1. PDQPRIORITY
PDQPRIORITY决定了查询是否开启PDQ功能
-
OFF/0:PDQ关闭
-
LOW/1:仅限并行扫描(Parallel Scan Only)。
-
2-99:PDQ 资源使用的百分比。
-
HIGH/100:最大PDQ 资源使用
-
使用示例如下:
Set PDQPRIORITY 96;
2. PDQ配置参数
对于PDQ任务,通过如下参数进行内存分配:
-
MAX_PDQPRIORITY
单个PDQ任务可用资源最大百分比。 -
DS_TOTAL_MEMORY
定义PDQ查询能用的内存大小,从虚拟内存段(通过SHMVIRTSIZE/SHMTOTAL定义)中进行分配。最大值4GB(64位机器),2GB(32位)机器。 -
DS_MAX_QUERIES
定义同时运行的PDQ查询的最大个数。 -
DS_MAX_SCANS
定义PDQ查询所有用户最大扫描线程数。最小值为10,最大值为默认值1048576(1024*1024)
2. 动态调整PDQ相关参数
-
MAX_PDQPRIORITY:onmode -D priority
-
DS_TOTAL_MEMORY: onmode -M kbytes
-
DS_MAX_QUERIES : onmode -Q max_queries
-
DS_MAX_SCANS :onmode -S max_number_scan_threads
3. PDQ相关参数配置建议
一般对于OLTP系统,需要临时调整PDQ参数来运行一些PDQ任务,建议可以在运行PDQ 任务之前修改这些参数,运行完成后,再修改回原来的值,以节省内存资源。假设系统内存资源较多,同时需要正常运行 PDQ 任务,建议按如下参数初始化PDQ参数。
-
虚拟内存段 SHMVIRTSIZE,建议设置较大值,在内存充足的情况下,建议配置为12~20GB。
-
MAX_PDOPRIORITY 80。
-
DS_MAX_QUERIES=20,减少最大并行的PDQ数量,可避免PDQ任务影响OLTP任务的运行,一定要小于CPU vps x2。
-
DS_TOTAL_MEMORY=4096000,设置为最大值4GB,将64位系统设置到最大值,32 位系统则为 2GB。
-
DS MAX SCANS 默认即可。
4. PDQ相关参数及内存使用举例
假设ONCONFIG 相关参数的设置如下:
DS_TOTAL_MEMORY=2000000
DS_MAX_QUERIES=20
MAX_PDQPRIORITY=80
假设有如下两个用户:
Userl: set PDQRIORITY 100;
User2: set PDQPRIORITY 80;
那么,系统总共预留的PDQ内存为2000000KB
User1 实际的Priority 为:80(MAX_PDOPRIORITY)x100 (user1 set)=80
User1 分配的内存情况,初始分配:2000000/20=100000KB=100MB,最大可获取2000000*80%=1600000KB=1.6GB。
User2 实际的 Priority 为: 80 (MAX_PDOPRIORITY) x80 (user2 set) =64。
User2 分配的内存情况,初始分配: 2000000/20-100000KB=100MB,最大可获取:2000000x64%=1280000KB=1.28GB。
User1 和User2 同时运行时,可能出现内存不够情况,内存使用大小取决于joins 和聚集操作。