执行频繁的SQL 没有采取绑定变量,ORACLE将频繁发生硬解析,如果SGA采用自动管理,
SHARED POOL 将会很大,更加增加ORACLE 对内存管理的消耗,这个时候最好在应用优化
代码前,先将SGA设置为手动管理。
用下面提供的SQL 抓取没有使用绑定变量执行非常频繁的SQL。
老方法:
SELECT substr(sql_text,1,40) "SQLTXT",
count(*) ,
sum(executions) "TotExecs"
FROM v$sqlarea
WHERE executions < 5
GROUP BY substr(sql_text,1,40)
HAVING count(*) > 30
ORDER BY 2 DESC
新方法:
SELECT FORCE_MATCHING_SIGNATURE,COUNT(*)
FROM V$SQL
GROUP BY FORCE_MATCHING_SIGNATURE
ORDER BY 2 DESC