SQL缓冲区提供在执行SQL语句过程中所需要的内存,包括计划、SQL语句和结果集缓存。很多应用当中都存在反复执行相同SQL语句的情况,此时可以使用缓冲区保存这些语句和它们的执行计划,这就是计划重用。
查看现有设置
SQL> select SF_GET_PARA_VALUE(2,'CACHE_POOL_SIZE');
行号 SF_GET_PARA_VALUE(2,'CACHE_POOL_SIZE')
---------- --------------------------------------
1 100
--修改配置
SQL> sp_set_para_value(2,'CACHE_POOL_SIZE',200);
DMSQL 过程已成功完成
已用时间: 10.752(毫秒). 执行号:47434803.
SQL> select SF_GET_PARA_VALUE(2,'CACHE_POOL_SIZE');
行号 SF_GET_PARA_VALUE(2,'CACHE_POOL_SIZE')
---------- --------------------------------------
1 100
已用时间: 0.308(毫秒). 执行号:47434804.
SQL> select SF_GET_PARA_VALUE(1,'CACHE_POOL_SIZE');
行号 SF_GET_PARA_VALUE(1,'CACHE_POOL_SIZE')
---------- --------------------------------------
1 200
CACHE_POOL_SIZE默认值20M,一般在内存小于16G的情况下,建议设置为200M,内存大于16G,小于64G,建议设置为1024M,当内存大于64G时,建议设置为2048M。
通过 PLNDUMP 来看对应缓存中的 SQL 执行计划
查找出活动会话中执行时间大于 1S 的 SQL
select * from (
select timestampdiff(second,s.last_recv_time,sysdate) t ,s.*
from v$sessions s where state='ACTIVE')
where t > 1
找到对应慢 SQL 对应的 cache_item 值。
select * from v$cachepln where upper(sqlstr) like '%SQL%'
在 trace 目录中生成对应 trc 文件
alter session set events 'immediate trace name plndump ,level cache_item'
对比管理工具的执行计划和 .trc 文件中的执行计划。
清理内存中执行计划缓存。
call sp_clear_plan_cache();
call sp_clear_plan_cache(pln号);---不加 pln 就是清理所有 sql 缓存。
USE_PLN_POOL | 1 | 静态 | 是否重用执行计划。0:禁止执行计划的重用;1:启用执行计划的重用功能 ;2:对不包含显式参数的语句进行常量参数化优化; |