Informix数据库SQL语句高速缓存技术应用实践
摘要:正如我们所知,Informix 数据库优化器采用基于“成本”优化方式,当接收到用户发出的SQL语句后,Informix优化器要对SQL语句进行编译,根据成本最低的原则生成最终的执行计划进行执行。对于每一个SQL语句,都要进行编译工作,为了提高系统的性能,特别是对具
-
正如我们所知,Informix 数据库优化器采用基于“成本”优化方式,当接收到用户发出的SQL语句后,Informix优化器要对SQL语句进行编译,根据成本最低的原则生成最终的执行计划进行执行。对于每一个SQL语句,都要进行编译工作,为了提高系统的性能,特别是对具有大量相同SQL语句的系统,Informix从9.2版本开始,就提供了SQL语句高速缓存机制SQL Statement Cache (SSC),将已分析并优化的SQL语句缓存到内存中,以使执行相同SQL语句的多个用户能够实现以下性能改进:
响应时间缩短,原因是绕过了分析和优化步骤
占用的内存量减少,原因是数据库服务器在用户间共享查询数据结构
通过采用SQL语句高速缓存机制,可以大大提高拥有大量相同SQL语句系统的性能。
下图显示数据库服务器如何对多个用户访问SQL语句高速缓存。
图 1. 使用SQL语句高速缓存时的数据库服务器操作
当数据库服务器第一次为用户 1 执行SQL语句时,数据库服务器检查完全一样的SQL语句是否在SQL语句高速缓存中。如果不在高速缓存中,那么数据库服务器分析该语句、确定最优的查询计划并执行该语句。
当用户 2 执行完全一样的SQL语句时,数据库服务器在SQL语句高速缓存中查找该语句而不需要分析和优化该语句。
同样,如果用户 3 和用户 4 执行完全一样的SQL语句,数据库服务器不必分析和优化该语句。相反,它使用内存中SQL语句高速缓存内的分析信息和查询计划。
启用SQL语句高速缓存
STMT_CACHE 配置参数为 0(缺省值)时,数据库服务器将不使用SQL语句高速缓存。
使用以下方法之一可更改该 STMT_CACHE 的缺省值:
更新 ONCONFIG 文件以指定 STMT_CACHE 配置参数,并重新启动数据库服务器。
如果将 STMT_CACHE 配置参数设置为 1,那么数据库服务器将在单个用户将 STMT_CACHE 环境变量设置为 1 或在应用程序中执行 SET STATEMENT CACHE ON 语句时,为该用户使用SQL语句高速缓存。
STMT_CACHE 1
如果 STMT_CACHE 配置参数为 2,那么数据库服务器将所有用户的SQL语句存储到SQL语句高速缓存中,除非单个用户使用 STMT_CACHE 环境变量或 SET STATEMENT CACHE OFF 语句关闭该功能。
STMT_CACHE 2
使用 onmode -e 命令动态地覆盖 STMT_CACHE 配置参数。
如果使用 enable 关键字,那么在单个用户将 STMT_CACHE 环境变量设置为 1 或在应用程序中执行 SET STATEMENT CACHE ON 语句时,数据库服务器将为该用户使用SQL语句高速缓存。
onmode -e enable
如果使用 on 关键字,数据库服务器将所有用户的SQL语句存储到SQL语句高速缓存,除非单个用户通过 STMT_CACHE 环境变量或 SET STATEMENT CACHE OFF 语句关闭该项功能。
onmode -e on
根据 STMT_CACHE 配置参数的设置(或 onmode -e 的执行),下表为用户总结了SQL语句高速缓存的用法,以及在 STMT_ CACHE 环境变量的应用程序和 SET STATEMENT CACHE 语句中的用法。
STMT_
CACHE 配置参数或 onmode -e
STMT_CACHE 环境变量SET STATEMENT CACHE
语句
导致的行为
0(缺省值)不适用不适用不使用语句高速缓存
10(或未设置)OFF不使用语句高速缓存
11OFF不使用语句高速缓存
10(或未设置)ON使用语句高速缓存
11ON使用语句高速缓存
11未执行使用语句高速缓存
10未执行不使用语句高速缓存
21(或未设置)ON使用语句高速缓存
21(或未设置)OFF不使用语句高速缓存
20ON使用语句高速缓存
20OFF用户不使用语句高速缓存
20未执行用户不使用语句高速缓存
21(或未设置)未执行用户使用语句高速缓存