使用 DS_MAX_SCANS 配置参数来限定数据库服务器可并发执行的 PDQ 扫描线程的数目。
onconfig.std 值
GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 70 -
DS_MAX_SCANS 1048576 或 (1024 * 1024)
值
10 - (1024 * 1024)
单位
PDQ 扫描线程数
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法
当用户发出查询时,数据库服务器根据下列值分配一些扫描线程:
PDQ 优先级的值(通过环境变量 PDQPRIORITY 或 SQL 语句 SET PDQPRIORITY 设
置)
以 DS_MAX_SCANS 设置的上限
以 MAX_PDQPRIORITY 设置的因子
要扫描的表中的分片数(公式中的 nfrags)
内存分配器(MGM)试图根据下列公式为查询保留扫描线程:
reserved_threads = min (nfrags, (DS_MAX_SCANS * PDQPRIORITY / 100 *
MAX_PDQPRIORITY / 100) )
如果公式的 DS_MAX_SCANS 部分大于或等于要扫描的表中的分片数,则查询保持在就绪队
列中,直到有表分片且可用的扫描线程一样多。一旦进行,查询快速地执行,因为线程在
并行地扫描分片。
例如,如果 nfrags 等于 24,DS_MAX_SCANS 等于 90,PDQPRIORITY 等于 50, 且
MAX_PDQPRIORITY 等于 60,则查询不开始执行直到有 nfrags 个扫描线程可用。扫描并行
发生。
如果 DS_MAX_SCANS 公式降到低于分片数,则查询会尽快开始执行,但由于线程串行地扫
描分片,查询执行时间较长。
在前一个示例中,如果将 DS_MAX_SCANS 降低到 40,则查询需要较少的资源(12 个扫描
线程)来开始执行,但每一个线程需要串行地扫描两个分片。执行耗时较长。