暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用GBase8s 常用SQL语句(249)

刚刚 好 2022-09-19
262



IFX_AUTO_REPREPARE 环境选项

使用 IFX_AUTO_REPREPARE 环境选项来减少在动态的 SQL 应用访问的数据库中 SQL 错误 -710 的发生率。

当游标尝试执行准备好的对象时,或当 SPL 例程执行查询时,在 DLL 操作已更改了准备好的对象或 SPL 例程引用的表的模式之后,可能发出错误 -710。

在启用 IFX_AUTO_REPREPARE 选项时,在对数据库表的模式的有些更改之后,您可避免 -710 错误,诸如添加启用的索引。此特性可减少显式地发出 PREPARE 语句来重新编译准备好的对象的需要,或显式地发出 UPDATE STATISTICS 语句来重新优化 SPL 例程的需要。在不需要重新发出 DESCRIBE 语句的表模式更改期间,如果启用 IFX_AUTO_REPREPARE,则数据库服务器自动地标识并重新编译准备好的语句和引用修改的表的 SPL 例程。

SET ENVIRONMENT IFX_AUTO_REPREPARE 语句指定的值可启用或禁用此自动重新编译特性:

如果指定的 IFX_AUTO_REPREPARE 值为 '1' 或 'ON' 或 'on',则启用自动重新编译。

如果指定的 IFX_AUTO_REPREPARE 值为 '0' 或 'OFF' 或 'off',则禁用自动重新编译。

在对准备好的对象或 SPL 例程引用的表的 DDL 操作之后,下列语句启用自动重新编译:

SET ENVIRONMENT IFX_AUTO_REPREPARE '1';

这覆盖 AUTO_REPREPARE 配置参数的设置,如果它是 0 或 'None' 的话,对于当前会话的剩余部分,或直到您重置 IFX_AUTO_REPREPARE 为止。

数据库服务器可能不检测有些使得准备好的对象或 SPL 例程无效的表模式的更改,即使当启用 IFX_AUTO_REPREPARE 时。例如,当您尝试在获得共享锁之后读同一表时,通过一个会话对表模式的更改导致并发的会话收到错误 -710。

启用 IFX_AUTO_REPREPARE 可能不影响引用表的准备好的语句和 SPL 例程,其中的 DDL 操作更改表中列的数目,或更改列的数据类型。要避免在这些模式更改之后发生错误 -710,对于引用其模式已被修改的表的任何例程,您通常必须重新发出 DESCRIBE 语句、PREPARE 语句以及(对于与例程相关联的游标)UPDATE STATISTICS 语句。

如果您对您的应用当前处理由于模式更改导致的错误的方式满意,则可禁用自动重新编译,如此例中所示:

SET ENVIRONMENT IFX_AUTO_REPREPARE 'OFF';

如果启用 IFX_AUTO_REPREPARE 会话环境变量导致运行时错误,则将那个错误传回应用。

要获取更多关于 AUTO_REPREPARE 配置参数的信息,请参阅您的 GBase 8s 管理员参考手册。要了解对游标和对查询的 IFX_AUTO_REPREPARE 和 AUTO_REPREPARE 设置的作用的讨论,请参阅您的 GBase 8s 性能指南

IFX_BATCHEDREAD_INDEX 环境选项

在当前会话期间,使用 SQL 的 SET ENVIRONMENT 语句的 IFX_BATCHEDREAD_INDEX 环境选项来启用或禁用对来自索引缓冲区的键集合的自动存取。

指定:

'1' 来启用优化器自动地存取来自索引缓冲区的键集合

'0' 来禁用对来自索引缓冲区的键的自动存取

例如,要启用优化器来自动地存取来自会话的索引缓冲区的键集合,请指定:

SET ENVIRONMENT IFX_BATCHEDREAD_INDEX '1';

IFX_BATCHEDREAD_TABLE 环境选项

在当前的会话期间,使用 SQL 的 SET ENVIRONMENT 语句的 IFX_BATCHEDREAD_TABLE 环境选项来启用或禁用对压缩的表、带有大于一页的行的表和带有 VARCHAR、LVARCHAR 和 NVARCHAR 数据的表的轻量扫描。

指定:

'1' 来为会话启用对压缩的表、带有大于一页的行的表和带有 VARCHAR、LVARCHAR 和 NVARCHAR 数据的表的轻量扫描

'0' 来为会话禁用这些轻量扫描

例如,要启用对带有 VARCHAR 数据的大型表的轻量扫描,请指定:

SET ENVIRONMENT IFX_BATCHEDREAD_TABLE '1';

IMPLICIT_PDQ 环境选项

使用 IMPLICIT_PDQ 会话环境选项来允许数据库服务器决定分配给查询的内存数量。除非也设置 BOUND_IMPL_PDQ,当 IMPLICIT_PDQ 设置为 ON 或 100 时,数据库服务器不理会 PDQPRIORITY 环境变量的当前显式设置。

然而,当 PDQPRIORITY 设置为 100 时,数据库服务器不会分配多于可用的内存。数据库服务器可分配的内存的最大数量受您的系统可用的物理内存的限制,且受这些参数的设置的限制:

PDQPRIORITY 环境变量

最近的 SQL 的 SET PDQPRIORITY 语句

MAX_PDQPRIORITY 配置参数

DS_TOTAL_MEMORY 配置参数

BOUND_IMPL_PDQ 会话环境变量

当正在运行并行查询时,DS_MAX_QUERIES 配置参数设置还可限制新的查询可用的 PDQ 内存的数量。

在缺省情况下,IMPLICIT_PDQ 是禁用的。当 IMPLICIT_PDQ 设置为 OFF 时,不论是显式地还是在缺省情况下,当为查询分配资源时,数据库服务器不覆盖当前的 PDQPRIORITY 设置。

仅在支持 PDQPRIORITY 的系统上,IMPLICIT_PDQ 会话环境选项是可用的。

如果您设置 value 介于 1 与 100 之间,则数据库服务器根据指定的值调节它的估计值。如果您设置低值,则减少分配给查询的内存数量,这可能增加查询运算符溢出的风险。

要请求数据库服务器确定查询的内存分配并根据它们的需要在查询运算符之中分配内存,请输入下列语句:

SET ENVIRONMENT IMPLICIT_PDQ ON;

要要求数据库服务器来使用显式的 PDQPRIORITY 设置作为上限和它授权给查询的可选的较低限,请设置 BOUND_IMPL_PDQ 会话环境选项。

星型连接查询执行计划需要设置 PDQ 优先级。将 IMPLICIT_PDQ 会话环境选项设置为启用隐式的 PDQ 提供一种替代。如果对于该会话将 IMPLICIT_PDQ 设置为 ON,则星型连接执行计划会考虑不带有显式的设置 PDQPRIORITY。可通过 sysdbopen 过程来发出 SET ENVIRONMENT IMPLICIT_PDQ ON 语句,以便当用户打开数据库时自动地启用隐式的 PDQ。在此情况下,查询优化器自动地考虑不带有由用户设置的显式的 PDQPRIORITY 的星型连接。

查询的 IMPLICIT_PDQ 功能在该查询中的所有表要求至少 LOW 级别统计。如果在该查询中分发统计遗失一个或多个表,则 IMPLICIT_PDQ 设置不起作用。此限制还适用于星型连接查询,在遗失统计的情况下,不支持它。

要获取关于创建 sysdbopen 过程和关于指定其会话会受影响的用户的信息,请参阅主题 使用 SYSDBOPEN 和 SYSDBCLOSE 过程。要获取关于 PDQPRIORITY 环境变量的信息,请参阅 GBase 8s SQL 参考指南。要获取关于 DS_TOTAL_MEMORY 和 MAX_PDQPRIORITY 配置参数的信息,请参阅 GBase 8s 管理员参考手册

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论