返回首页

gbase数据、南大通用产品文档:GBase8sSET STATEMENT CACHE 语句

更新日期:2024年09月11日


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1076
使用 SET STATEMENT CACHE 语句来为当前的会话开启高速缓存或关闭高速缓
存。此语句是对 SQL 的 ANSI/ISO 标准的扩展。
语法

用法
您可使用 SET STATEMENT CACHE 语句来为当前的会话在 SQL 语句高速缓存
中开启或关闭高速缓存。该语句高速缓存存储在会话中反复地运行的缓冲区相同
的语句中。仅数据操纵语言(DML)语句(DELETE、INSERT、UPDATE 或
SELECT)可被存储在语句高速缓存中。
此机制允许符合条件的语句绕过优化阶段,并避免重新编译,这可降低内存消
耗,并可改善查询处理时间。
示例
下列示例为当前会话开启语句高速缓存:
SET STATEMENT CACHE ON;
下例为当前会话关闭语句高速缓存:
SET STATEMENT CACHE OFF;
优先级和缺省的行为
SET STATEMENT CACHE 优先于 STMT_CACHE 环境变量和 STMT_CACHE
配置参数。然而,在 SET STATEMENT CACHE 语句可成功地执行之前,您必须
或通过设置 STMT_CACHE 配置参数或通过使用 onmode 实用程序来启用 SQL
语句高速缓存。
当您发出 SET STATEMENT CACHE ON 语句时,SQL 语句高速缓存保持生效,
直到您发出 SET STATEMENT CACHE OFF 语句为止,或直到程序结束为止。如
果您不使用 SET STATEMENT CACHE,则缺省的行为依赖于 STMT_CACHE
环境变量或 STMT_CACHE 配置参数的设置。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1077
开启高速缓存
使用 ON 选项来启用 SQL 语句高速缓存。当启用 SQL 语句高速缓存时,您通
过 SQL 语句高速缓存执行的每一语句决定相匹配的高速缓存条目是否出现。如
果如此,则数据库服务器使用高速缓存了的条目来执行该语句。
如果该语句没有相匹配的条目,则数据库服务器测试来查看它是否有资格进入高
速缓存。要了解一语句必须满足哪些条件才能进入高速缓存,请参阅 SQL 语句
高速缓存具备资格的标准。
对在 SQL 语句高速缓存中的相匹配的条目的限制
当数据库服务器考虑一语句是否与 SQL 语句高速缓存中的语句一致时,下列项
必须相匹配:

字母大小写

注释

空格

优化设置
o SET OPTIMIZATION 语句选项
o 优化器伪指令
o SET ENVIRONMENT OPTCOMPIND 语句选项或OPTCOMPIND
环境变量的设置,或 ONCONFIG 文件中的 OPTCOMPIND 配置参
数的设置。(如果对同一查询存在冲突的设置,则这是优先级的降
序排列。)

并行性设置
o SET PDQPRIORITY 语句选项或 PDQPRIORITY 环境变量的设置

查询文本字符串

文字
如果 SQL 语句在语义上等同于在 SQL 语句高速缓存中的语句,但文字不同,
则不认为是一致的语句且具备条目进入高速缓存的资格。例如,下列 SELECT 语
句是不相同的:
SELECT col1, col2 FROM tab1 WHERE col1=3;
SELECT col1, col2 FROM tab1 WHERE col1=5;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1078
在此示例中,两个语句都进入到 SQL 语句高速缓存内。
然而,主变量名称并不重要。例如,下列选择语句认定为相同:
SELECT * FROM tab1 WHERE x = :x AND y = :y;
SELECT * FROM tab1 WHERE x = :p AND y = :q;
在先前的示例中,虽然主名称不同,但语句够资格,因为大小写、查询文本字符
串和空格都匹配。然而,性能没有改进,因为通过 PREPARE 语句已解析和优化
了每一语句。
关闭高速缓存
OFF 选项禁用 SQL 语句高速缓存。当您为您的会话关闭高速缓存时,不为那个
会话执行 SQL 语句高速缓存代码。
在反复地执行相同的查询以及模式更改不频繁的环境中,设计 SQL 语句高速缓
存旨在节省内存。如果不是这种情况,您可能想要关闭 SQL 语句高速缓存来避
免高速缓存的开销。例如,如果你您几乎没有高速缓存结合,也就是说,当相对
少量的匹配但存在许多新的条目进入高速缓存时,高速缓存管理的开销很高。在
此情况下,请关闭 SQL 语句高速缓存。
如果您知道您正在执行许多不具备 SQL 语句高速缓存资格的语句,则您可能想
要禁用它,并避免因查看是否每一 DML 语句具备插入到高速缓存内的资格而导
致的测试开销。
SQL 语句高速缓存具备资格的标准
可高速缓存在 SQL 语句高速缓存中的语句(于是,可与已在 SQL 语句高速缓
存中出现的语句相匹配)必须满足特定的条件。
要具备高速缓存的资格,该语句必须满足所有下列条件:

它必须是 SELECT、INSERT、UPDATE 或 DELETE 语句。

它必须仅包含非 opaque 的内建的数据类型(不包括 BLOB、
BOOLEAN、BYTE、CLOB、LVARCHAR 和 TEXT)。

它必须仅包含内建的运算符。

它不可包含用户定义的例程。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1079

它不可包含临时表或远程表。

它不可包含在 Projection 列表中的子查询。

它不可是多语句 PREPARE 的一部分。

它不可有目标列上的用户权限限制。

在符合 ANSI 的数据库中,它必须包含完全具备资格的对象名称。

它不可需要重新优化。
在高速缓存插入之前需要重新执行
仅在数据库服务器对引用(有时称之为“命中”)具备资格的 SQL 语句的可配置
数目计数之后,才将那个语句完全地插入到 SQL 语句高速缓存内。对于缺省值
0,在被高速缓存之前,不需要重新执行具备资格的 DML 语句。
然而,使用 STMT_CACHE_HITS 配置参数,数据库管理员(DBA)可指定在将
具备资格的 DML 语句插入到语句高速缓存内之前,必须执行该语句的最少次
数。通过将此设置为 1(或更大的值),DBA 拒绝将一次性的即席查询完全插入
到 SQL 语句高速缓存内,从而降低高速缓存管理的开销。
在大小超出配置的限度之后启用或禁用插入
当高速缓存大小达到它的配置的大小(如通过 STMT_CACHE_SIZE 配置参数指
定的那样)时,DBA 可通过将配置参数 STMT_CACHE_NOLIMIT 设置为 0 来
防止将附加的具备资格的 SQL 语句插入到语句高速缓存。
准备好的语句和语句高速缓存
准备好的语句本来是对单个会话进行高速缓存。也就是说,如果执行准备好的语
句多次(或如果打开单个游标多次),则那个会话反复地使用相同的准备好的查
询计划。
如果会话准备语句,然后执行它多次,则使用 SQL 语句高速缓存基本上不会对
它的性能产生影响,因为在 PREPARE 语句期间,该语句只优化一次。
然而,如果其他会话也准备那个相同的语句,或如果第一个会话准备该语句几
次,则语句高速缓存通常会带来直接的性能收益,因为数据库服务器仅计算该查

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1080
询计划一次。当然,原始的会话可能从语句高速缓存获得小的收益,即便它仅准
备该语句一次,因为其他会话使用较少的内存,且数据库服务器为其他会话执行
较少的操作。

以下示例显示了 items_pct 过程中的样本跟踪输出,这些输出出现在 SET DEBUG FILE TO
语句所指定的文件中。这些输出显示过程变量、过程参数、返回值和错误代码的值。
trace expression :begin trace
trace on
expression:
(select (sum total_price)
from items)
evaluates to $18280.77 ;
let tp = $18280.77
expression:
(select (sum total_price)
from items
where (= manu_code, mac))
evaluates to $3008.00 ;
let mc_tot = $3008.00
expression:(/ mc_tot, tp)
evaluates to 0.16
let pct = 0.16
expression:(> pct, 0.1)
evaluates to 1
expression:(- 745)
evaluates to -745
raise exception :-745, 0, ''
exception : looking for handler
SQL error = -745 ISAM error = 0 error string = = ''
exception : no appropriate handler
有关如何使用 TRACE 语句诊断 SPL 例程中的逻辑错误的更多信息,请参阅创建和使用
SPL 例程。

警告
我们不建议把集群从V9.5.X.X 版本集群回退到升级前版本,而且多数场景
下这种回退是无效的,并且会导致数据错误。
如果满足如下条件,可以把V9.5.X.X 版本集群成功回退到升级前版本集群:
1、从V8.6.X.X 版本集群升级到V9.5.2.X 时使用的V9.5.2.X 安装包解压目录仍然
存在。从V8.6.X.X 版本升级到V9.5.2.X 版本时会在DBAUser 的home 目录下暂时
保留升级前版本的系统用户数据文件。
2、
升级到V9.5.X.X 版本集群后,
没有执行过DDL操作、
扩容操作、
生成新distribution
操作,没有生成新的FEVENTLOG。
3、
升级到V9.5.X.X 版本集群时,
升级工具保存的备份文件还存在。
升级到V9.5.X.X
版本集群时备份文件名包含gcluster 关键字,如:
gcluster_backup_9.5.3.17.114764_20191110162202.tar.bz2。
如果是升级到9.5.3.X,还会有gcware 的独立的备份文件。
首先要停止集群所有节点服务,
然后必须在gbase 用户下执行回退集群版本的命令,
如下所示:
python Restore.py
--backupFile=/home/gbase/gcluster_backup_9.5.3.17.114764_20191110162202.
tar.bz2 --silent=demo.options
[--passwordInputMode=PASSWORDINPUTMODE]
[--backupGcwareFile=gcwarebackupfile]
表3- 18 参数说明
参数名称


--backupFile
指定要回退的集群备份文件(gcluster 和gnode 文件)。默认
在/home/$dbaUser 下。
--silent
指定配置文件
backupGcwareFile
可选参数,
如果是由9.5.3.X 回退到9.5.2.X,
需要填写gcware
的备份文件路径和名称。如果是由9.5.2.X 的回退不需要填写
该参数。
passwordInputMode
可选参数,指定密码获取的方式,通过不同的参数实现不同
的获取方式。若指定该参数,则demo.options 中的密码不必

GBase 8a MPP Cluster 产品手册
3 集群安装升级与卸载
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
116
参数名称


再修改。取值范围为[file,pwdsame,pwddiff],默认认值为file:

file:表示从文件获取,该方式下,文件中的密码是明文
的;

pwdsame:表示从终端由用户输入密码,并且所有节点
的密码一致情况下使用该参数,对于不同用户密码只输
入一次;

pwddiff:表示从终端由用户输入密码,并且节点间的
密码不一致情况下使用该参数,对于不同用户密码每个
节点分别输入一次。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
117
4 管理员指南
本章介绍如何管理集群。供系统管理员进行集群日常健康检查、集群管理、安全管
理、审计管理、备份与恢复等操作。