PDQ可以提供如下动作并行操作:
扫描(parallel scans);
关联(parallel joins);
排序(parallel Sorts);
分组(parallel group);
聚集(parallel aggregates)。
涉及参数如下:
MAX_PDQPRIORITY:
DS_MAX_QUERIES:并行PDQ查询的数量;
DS_TOTAL_MEMORY: DSS查询支持的最大内存;
DS_MAX_SCANS:最大扫描线程数,默认1024*1024 ; ;
DS_NONPDQ_QUERY_MEM: 最大=DS_TOTAL_MEMORY*25%
动态修改方法:
onmode -D 修改MAX_PDQPRIORITY
onmode -M 修改DS_TOTAL_MEMORY
onmode -S 修改DS_MAX_SCANS
onmode -Q 修改DS_MAX_QUERIES
如下操作可以使用PDQ:
1、select、update、delete、update
2、create index
3、update statistics
4、hold cursors
5、User-Defined Routines, User-Defined Aggregates
以下查询不能使用到PDQ:
1、查询使用cursor stability 隔离级;
2、查询包含for update或with hold的字句;
3、查询包含子查询;
4、查询语句包含SPL函数;
5、对于delete操作,当删除的表中包含一个引用约束时;
6、DDL语句
要使用PDQ,需要考虑如下因素:
1、使用set pdqpriority n;
2、使用分片表;
3、操作系统有多CPU,VPCLASS中cpu vp大于1;
PDQ以Quantum 为单位分配内存
1Quantum = DS_TOTAL_MEMORY/DS_MAX_QUERIES
某个PDQ会话的内存分配的范围在1Quantum和DS_TOTAL_MEMORY*MAX_PDQPRIORITY*PDQPRIORITY之间.
如下环境变量需要注意:
PSORT_NPROCS:用来设置排序和聚集线程的数量;
DBUPSPACE=8192:50:3 {磁盘空间}:{内存大小} :{directive}:
磁盘空间用于设置update statistics medium|high时候的排序空间的大小;
内存大小用于设置在没有开启PDQ的情况下的排序内存的大小(4-50MB);
directive用于为update statistics设置如下directive:
=1:不使用任何索引排序 ,打印update statistics完整的执行计划 ,
=2:不使用任何索引排序,不打印执行计划
=3:选择可用的索引进行排序,打印完整的执行计划
小结:
PDQ的使用也有很多细节需要注意,所以我们尽可能了解什么情况下可以使得PDQ生效,至于什么情况下不生效就不去记录和分析了,太多了~~~~