一、Shared_pool
存储很多信息,最重要的为Library cache和Dictionary Cache。Shared_pool的没有命中比db_cache的没有命中更加不好
Dictionary Cache:用户名称,段名称,profile,序列,表空间信息等
Library cache:曾经使用的SQL,PL/SQL的语句和执行计划
共享sql语句的条件:
1.内存中有相同的文本串,共享 。 2.Hash值不在内存,执行分析;
3.Hash值相同,比较两个语句的文本是否相同;
4.对象的owner必须相同,不同帐号的同名表不能共享;
5.使用绑定变量时,变量名称必须相同;
6.运行语句的环境相同,比如优化模式等参数。
--查看空余的共享池。如果有,说明共享池不必优化
SELECT * FROM V$SGASTAT
WHERE NAME = 'free memory'
AND POOL = 'shared pool';
SELECT * FROM V$SGASTAT
WHERE NAME = 'free memory'
AND POOL = 'shared pool';
--共享池的命中率
SELECT NAMESPACE, PINS, PINHITS, RELOADS, INVALIDATIONS FROM V$LIBRARYCACHE ORDER BY NAMESPACE;
--实例启动以来的命中率
select SUM(PINHITS)/SUM(PINS) from V$LIBRARYCACHE;
如果取一定的时间间隔,更加有代表意义,8:00查看一下V$LIBRARYCACHE,10:00再次查看一下V$LIBRARYCACHE,求出差值后在求命中率
SELECT NAMESPACE, PINS, PINHITS, RELOADS, INVALIDATIONS FROM V$LIBRARYCACHE ORDER BY NAMESPACE;
--实例启动以来的命中率
select SUM(PINHITS)/SUM(PINS) from V$LIBRARYCACHE;
如果取一定的时间间隔,更加有代表意义,8:00查看一下V$LIBRARYCACHE,10:00再次查看一下V$LIBRARYCACHE,求出差值后在求命中率