如果 SQL 语句高速缓存太小,那么会发生性能问题。 可以监视 SQL 语句高速缓存的大小的有效性。
最常使用的语句应该保留在 SQL 语句高速缓存中。如果 SQL 语句高速缓存不够大,那么当其他语句进入高速缓存时,数据库服务器可能没有足够的空间来保留这些语句。有关后续执行,数据库服务器必须重新分析、重新优化并将 SQL 语句重新插入高速缓存中。尝试增加 STMT_CACHE_SIZE。
数据库服务器尝试通过使用阈值(STMT_CACHE_SIZE 参数的 70%)来确定何时从 SQL 语句高速缓存中除去条目,从而防止 SQL 语句高速缓存分配大量内存。如果新条目引起 SQL 语句高速缓存的大小超过阈值,那么数据库服务器在插入新条目前除去最久未使用的条目(当前未使用)。
但是,如果后续查询需要使用已除去的内存结构,那么数据库服务器必须重新分析并重新优化 SQL 语句。 重新生成这些内存结构所需要的额外处理时间会使查询的总响应时间增加。
您可以使用 STMT_CACHE_SIZE 配置参数来设置内存中 SQL 语句高速缓存的大小。该参数的值是以千字节为单位表示的大小。如果未设置 STMT_CACHE_SIZE,那么缺省值为 512 千字节。
onstat -g ssc 输出显示 maxsize 列中 STMT_CACHE_SIZE 的值。在图 1 中,该 maxsize 列值为 524288,即缺省值 (512 * 1024 = 524288)。
使用 onstat -g ssc 和 onstat -g ssc all 选项监视 SQL 语句高速缓存的大小的有效性。 如果在高速缓存中看不到应用程序最常用的 SQL 语句的条目,SQL 语句高速缓存可能太小或者有过多的非共享 SQL 语句占用了高速缓存。以下各节描述如何确定这些情况。