查询并行解释

您可以检查计划表数据,以确定 Db2 是否选择了利用并行处理的访问路径。

关于本任务

开始特定程序编程接口信息。

要了解 Db2 选择并行性的可能性,请检查PLAN_TABLE输出。 本信息描述了一种检查PLAN_TABLE列是否具有并行性的方法,并提供了多个示例。

结束特定程序编程接口信息。

过程

解释EXPLAIN输出中的并行性:

  1. 确定 Db2 选择并行的可能性:
    对于查询(QUERYNO)中的每个查询块(QBLOCKNO),ACCESS_DEGREE或JOIN_DEGREE中的非空值表示计划了一定程度的并行性。
  2. 在查询中识别并列组:

    ACCESS_PGROUP_ID、JOIN_PGROUP_ID、SORTN_PGROUP_ID或SORTC_PGROUP_ID的值相同的PLANNO(计划)表示一组操作处于同一并行组中。 通常,这一系列操作涉及各种连接方法和排序操作。 根据所执行的操作,并行组ID可以出现在PLAN_TABLE输出的同一行中,也可以出现在不同的行中。

  3. 识别平行模式。
    PARALLELISM_MODE列指示计划采用的并行类型。

示例

以下示例说明了PLAN_TABLE中代表并行性的部分值。

单桌访问
假设 Db2 在绑定时决定同时发起三个请求,从表 T1 中检索数据。 PLAN_TABLE的一部分如下表所示。 如果 Db2 决定不使用并行操作,则ACCESS_DEGREE和ACCESS_PGROUP_ID包含空值。
表 1. PLAN_TABLE的一部分,用于单表访问
TNAME 方法
访问_
程度
ACCESS_
PGROUP_
ID
加入_
学位
JOIN_
PGROUP_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 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_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 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_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 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_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 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_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 0 3 1 (空) (空) (空) (空)
T2 4 6 2 6 2 1 (空)