并行处理方法
本主题中的数据展示了并行方法与顺序预取以及相互之间的比较。
假设查询访问的表空间有三个分区,分别是 P1、 P2 和 P3。 P1、 P2 和 P3 是表空间中的分区。 R1、 R2、 R3 等都是顺序预取请求。 例如,组合 P2R1 表示分区2的第一个请求。
sequential processing(顺序处理)
下图显示了顺序处理。 在顺序处理中 , Db2 按顺序处理三个分区,在处理分区2之前先完成分区1,在处理分区3之前先完成分区2。 顺序预取允许CP处理与I/O操作重叠,但I/O操作之间不会重叠。 在下图中,预取请求所需时间比处理时间更长。 处理器经常处于等待I/O的状态。
并行CP处理
下图显示了并行CP处理。 通过并行CP处理 , Db2 可以使用多个并行任务来处理查询。 同时执行三项任务可以大大减少数据密集型和处理器密集型查询的总耗时。
最有可能利用并行操作的查询
- Db2 大部分时间都在抓取页面——这是一种I/O密集型查询
一个典型的I/O密集型查询类似于以下查询,假设对许多页面进行了表空间扫描:
SELECT COUNT(*) FROM ACCOUNTS WHERE BALANCE > 0 AND DAYS_OVERDUE > 30; - Db2 花费处理器时间和I/O时间来处理某些类型查询的行。 这些疑问包括:
- 具有密集数据扫描和高选择性的查询
- 这些查询涉及大量数据,但符合搜索条件的行数相对较少。
- 包含聚合函数的查询
- 列函数(如MIN、MAX、SUM、AVG和COUNT)通常需要扫描大量数据,但只返回一个汇总结果。
- 访问长数据行的查询
- 这些查询访问具有长数据行的表,每页的行数较少(例如每页一行)。
- 需要大量中央处理器时间的查询
这些查询可能是复杂、数据密集或涉及排序的只读查询。 例如,典型的处理器密集型查询如下:
SELECT MAX(QTY_ON_HAND) AS MAX_ON_HAND, AVG(PRICE) AS AVG_PRICE, AVG(DISCOUNTED_PRICE) AS DISC_PRICE, SUM(TAX) AS SUM_TAX, SUM(QTY_SOLD) AS SUM_QTY_SOLD, SUM(QTY_ON_HAND - QTY_BROKEN) AS QTY_GOOD, AVG(DISCOUNT) AS AVG_DISCOUNT, ORDERSTATUS, COUNT(*) AS COUNT_ORDERS FROM ORDER_TABLE WHERE SHIPPER = 'OVERNIGHT' AND SHIP_DATE < DATE('2006-01-01') GROUP BY ORDERSTATUS ORDER BY ORDERSTATUS;
术语
当 “任务”一词与并行处理的信息一起使用时,请考虑上下文。在并行查询 CP 处理中,任务是用于处理查询的实际 z/OS® 执行单元。
并行组是指一组特定的并行操作。 一个查询可以有多个并行组,但查询中的每个并行组都有自己唯一的ID号。
并行度是指 Db2 确定的可用于并行组操作的并行任务数量。 Db2 最多可同时生成 254 个操作。 然而,对于大多数查询和 Db2 环境, Db2 会选择较小的数字。
您可能需要进一步限制最大数量,因为并行操作越多,处理器、实际存储和I/O资源消耗就越大。 如果并行环境中的资源消耗过高,请使用 PARAMDEG 子系统参数的值来限制并行操作的最大数量。
在并行组中, 初始任务是TCB(SRB用于分布式请求),它负责协调所有并行任务的工作。 并行任务是由特殊SRB组成的可执行单元,称为可抢占SR B。
有了可抢占式 SRB z/OS 调度员可以随时中断任务,以相同或更高的调度优先级运行其他工作。 对于非分布式并行工作,并行任务在一种称为客户 SRB 的可抢占式 SRB 下运行,这种 SRB 允许并行任务继承源地址空间的重要性。 对于分布式请求,并行任务在一个称为飞地 SRB 的可抢占式 SRB 下运行。