允许数据库服务器分配 PDQ 内存

可以使用 SET ENVIRONMENT 语句的 IMPLICIT_PDQ 会话环境选项,以允许数据库服务器在当前会话期间确定要分配给查询的 PDQ 内存量。这可能会覆盖当前 PDQPRIORITY 设置。

但是,数据库服务器可以分配的最大内存量受限于系统可用的物理内存以及以下参数的设置: IMPLICIT_PDQ 会话环境选项仅在支持 PDQPRIORITY 的系统上可用。

缺省情况下,IMPLICIT_PDQ 会话环境变量设置为 OFF。IMPLICIT_PDQ 设置为 OFF 时,服务器不会覆盖当前 PDQPRIORITY 设置。

要允许数据库服务器根据其需求确定查询的内存分配以及在查询操作程序之间分发内存,请在发出查询之前输入以下语句:
SET ENVIRONMENT IMPLICIT_PDQ ON; 

如果改为将 IMPLICIT_PDQ 值设置为 1 到 100 范围内的整数,那么数据库服务器会根据指定的值浮动其估算值。如果设置了较低的值,那么分配给查询的内存量会减少,这可能会增加查询操作程序溢出量。

查询的 IMPLICIT_PDQ 功能至少需要对该查询访问的所有表的 LOW 分发统计信息。如果查询引用的一个或多个表缺少分发统计信息,那么 IMPLICIT_PDQ 设置对可用于执行查询的资源没有影响。此限制还适用于星型连接查询,在缺少统计信息的情况下不支持此类查询。

通过设置 BOUND_IMPL_PDQ 限制 PDQ 资源分配

如果 IMPLICIT_PDQ 设置为 ON 或数字值,那么还可以使用 SQL 的 SET ENVIRONMENT 语句的 BOUND_IMPL_PDQ 会话环境选项来指定分配的 PDQ 内存不应大于当前显式 PDQPRIORITY 值或范围。如果 IMPLICIT_PDQ 会话环境设置为 OFF(无论是显式设置还是缺省值),那么 BOUND_IMPL_PDQ 设置将不起作用。

例如,如果 IMPLICIT_PDQ 会话环境选项已设置,那么以下语句强制数据库服务器将显式 PDQPRIORITY 值用作分配内存的准则:
SET ENVIRONMENT BOUND_IMPL_PDQ ON;
如果改为指定 1 到 100 范围内的正整数,那么在当前会话期间将根据该设置浮动显式 PDQPRIORITY 值。

当 BOUND_IMPL_PDQ 会话环境选项设置为 ON(或 1)时,需要数据库服务器将显式 PDQPRIORITY 设置用作可以分配给查询的内存的上限。如果同时设置了 IMPLICIT_PDQ 和 BOUND_IMPL_PDQ,那么显式 PDQPRIORITY 值将确定可以分配给查询的内存的上限。

如果在 SET ENVIRONMENT 语句中包含整数值,那么必须将该值括在引号内。但是,不要将 ON 和 OFF 关键字括在引号内。

以下示例是带有整数值的语句:

SET ENVIRONMENT IMPLICIT_PDQ "50";
SET ENVIRONMENT BOUND_IMPL_PDQ "80";