PDQ配置及使用

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 和聚集操作。