查询并行解释
您可以检查计划表数据,以确定 Db2 是否选择了利用并行处理的访问路径。
关于本任务
要了解 Db2 选择并行性的可能性,请检查PLAN_TABLE输出。 本信息描述了一种检查PLAN_TABLE列是否具有并行性的方法,并提供了多个示例。
过程
解释EXPLAIN输出中的并行性:
示例
以下示例说明了PLAN_TABLE中代表并行性的部分值。
- 单桌访问
- 假设 Db2 在绑定时决定同时发起三个请求,从表 T1 中检索数据。 PLAN_TABLE的一部分如下表所示。 如果 Db2 决定不使用并行操作,则ACCESS_DEGREE和ACCESS_PGROUP_ID包含空值。
表 1. PLAN_TABLE的一部分,用于单表访问 TNAME 方法 访问_
程度ACCESS_
PGROUP_
ID加入_
学位JOIN_
PGROUP_
IDSORTC_
PGROUP_
IDSORTN_
PGROUP_
IDT1 0 3 1 (空) (空) (空) (空) - 嵌套循环连接
- 考虑一个查询,它对三个表( T1、 T2 和 T3 )进行一系列嵌套循环连接。 T1 是最外层的表格, 是最内层的表格。 T3 Db2 在绑定时决定同时启动三个请求,从三个表中分别检索数据。 每个请求访问 T1 的一部分以及 T2 和 T3 的全部内容。 对于带排序的嵌套循环连接方法,除了ACCESSTYPE=T(稀疏索引)的星形连接外,所有检索都在同一个并行组中。 PLAN_TABLE的部分内容如下表所示:
表 2. PLAN_TABLE的一部分,用于嵌套循环连接 TNAME 方法 访问_
程度ACCESS_
PGROUP_
ID加入_
学位JOIN_
PGROUP_
IDSORTC_
PGROUP_
IDSORTN_
PGROUP_
IDT1 0 3 1 (空) (空) (空) (空) T2 1 3 1 3 1 (空) (空) T3 1 3 1 3 1 (空) (空) - 合并扫描连接
- 假设有一个查询,需要在两个表( T1 和 T2 )之间进行合并扫描连接。 Db2 在绑定时决定同时向 发送三个请求,同时向 发送六个请求。 T1 T2 T1 的扫描和分类在一个并行组中进行。 T2 的扫描和分类在另一个并行组中进行。 此外,合并阶段可以并行进行。 这里,第三个并行组用于在每个中间排序表上启动三个并发请求。 PLAN_TABLE的部分内容如下表所示:
表 3. PLAN_TABLE的一部分,用于合并扫描连接 TNAME 方法 访问_
程度ACCESS_
PGROUP_
ID加入_
学位JOIN_
PGROUP_
IDSORTC_
PGROUP_
IDSORTN_
PGROUP_
IDT1 0 3 d (空) (空) d (空) T2 2 6 2 3 3 d d 在多表联接中, Db2 还可能对并行任务中涉及多个表的复合表执行排序。 Db2 使用成本基础模型来确定是否在所有情况下都使用并行排序。 当 Db2 决定使用并行排序时,SORTC_PGROUP_ID和SORTN_PGROUP_ID表示并行组标识符。 考虑一个查询,它连接了三个表: T1、 T2 和 T3 ,并在 T1 和 T2 之间以及复合表和 T3 之间使用合并扫描连接。 如果 Db2 根据成本模型决定将查询中的所有操作并行执行,则PLAN_TABLE的一部分将如下表所示:表 4. PLAN_TABLE的一部分,用于多表合并扫描连接 TNAME 方法 访问_
程度ACCESS_
PGROUP_
ID加入_
学位JOIN_
PGROUP_
IDSORTC_
PGROUP_
IDSORTN_
PGROUP_
IDT1 0 3 1 (空) (空) (空) (空) T2 2 6 2 6 3 1 2 T3 2 6 4 6 5 3 4 - 混合连接
假设有一个查询,需要 T1 和 T2 两个表进行混合连接。 此外, T1 需要排序;因此,在PLAN_TABLE中, T2 行的SORTC_JOIN=Y。 Db2 在绑定时决定同时向 发送三个请求,同时向 发送六个请求。 T1 T2 并行操作用于通过 T2 的聚集索引进行连接。
由于可以通过在集群索引上发起并发请求来检索 T2 RID,因此连接阶段是并行步骤。 T2 RID和 T2 行的检索在同一并行组中。 PLAN_TABLE的部分内容如下表所示:表5。 混合连接的PLAN_TABLE的一部分 TNAME 方法 访问_
程度ACCESS_
PGROUP_
ID加入_
学位JOIN_
PGROUP_
IDSORTC_
PGROUP_
IDSORTN_
PGROUP_
IDT1 0 3 1 (空) (空) (空) (空) T2 4 6 2 6 2 1 (空)