监视 SQL 语句高速缓存的使用情况

如果注意到一直使用 SQL 语句高速缓存的某一查询的响应时间突然增加,那么查询的高速缓存条目可能已被删除。 您可以通过显示 onstat -g ssc 命令输出来监视 SQL 语句高速缓存的使用情况并检查已舍弃条目或已删除条目。

当查询依赖的对象之一发生更改而导致该查询的数据字典高速缓存条目无效时,数据库服务器将从高速缓存中删除该条目。 以下操作会造成依赖性检查故障:

当一个条目标记为已删除时,数据库服务器在下次执行该 SQL 语句时必须对其重新进行语法分析和重新优化。 例如,图 1显示在执行第一条和第二条 SQL 语句之间,对 itemsorders 表执行 UPDATE STATISTICS 之后,onstat -g ssc 命令显示的条目。

图 1onstat -g ssc 输出的 Statement Cache Entries 部分显示了 flag 字段,该字段表明某个条目是否已从 SQL 语句高速缓存中舍弃或删除。

图: 已舍弃条目的样本 onstat -g ssc 命令输出

onstat -g ssc

...
Statement Cache Entries:

lru hash ref_cnt hits flag heap_ptr  database     user
-----------------------------------------------------------------------------
...
    2  232       1    1   DF  aa3d020  vjp_stores   virginia
  SELECT C.customer_num, O.order_num
    FROM customer C, orders O, items I
    WHERE C.customer_num = O.customer_num
    AND O.order_num = I.order_num

    3  232       1    0   -F  aa8b020  vjp_stores   virginia
  SELECT C.customer_num, O.order_num
    FROM customer C, orders O, items I
    WHERE C.customer_num = O.customer_num
        AND O.order_num = I.order_num
...