DS_MAX_SCANS 配置参数

使用 DS_MAX_SCANS 配置参数来限定数据库服务器可并发执行的 PDQ 扫描线程的数目。

onconfig.std 值
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 等于 90PDQPRIORITY 等于 50, 且 MAX_PDQPRIORITY 等于 60,则查询不开始执行直到有 nfrags 个扫描线程可用。扫描并行发生。

如果 DS_MAX_SCANS 公式降到低于分片数,则查询会尽快开始执行,但由于线程串行地扫描分片,查询执行时间较长。

在前一个示例中,如果将 DS_MAX_SCANS 降低到 40,则查询需要较少的资源(12 个扫描线程)来开始执行,但每一个线程需要串行地扫描两个分片。执行耗时较长。