SHARED POOL 基础知识

1. 查看共享池组成
select * from v$sgastat
where pool='shared pool' and name in ('free memory','library cache','row cache');

2. 刷新(清空)共享池
# 此后会发生大量硬解析
alter system flush shared_pool;

3. 查看软/硬解析的具体情况
select name,value from v$sysstat where name like 'parse%';

4. 查看共享池中缓存的 SQL 语句
select sql_id,sql_text,executions from v$sql;

5. 查看没有被共享的 SQL 语句
# 在 v$sql 查找执行次数较小的 SQL 语句, 观察这些 SQL 语句是否是经常被执行

select sql_fulltext from v$sql where executions=1 and sql_text like '%hello%';
select sql_fulltext from v$sql where executions=1 order by sql_text;

6. 查看共享池中 trunk 总数
select count(*) from x$ksmsp;

7. 查看命中率
7-1. 软解析命中率
select sum(pinhits)/sum(pins)*100 from v$librarycache;

7-2. 数据字典命中率
select sum(gets),sum(getmisses),100*sum(gets-getmisses)/sum(gets)
from v$rowcache where gets>0;

8. 查看 SGA 中动态分配的共享池大小
select component,current_size from V$sga_dynamic_components;

9. 修改共享池大小
# 数值必须大于 7 中动态分配的大小才有效

alter system set shared_pool_size=150M scope=both;

10. 根据 sql_id 查看执行计划
select * from table(dbms_xplan.display_cursor('g4pkmrqrgxg3b'));

11. 大对象
11-1. 查看内存中的大对象
select * from v$db_object_cache
where sharable_mem > 10000 and
(type = 'PACKAGE' or type='PACKAGE BODY' or type = 'FUNCTION' or type='PROCEDURE') and
kept = 'NO';

11-2. 保留大对象
# 在内存中保留大对象, 使其不容易被置换出内存
@?/rdbms/admin/dbmspool.sql
执行 dbms_shared_pool.keep('对象名');

11-3. 查看大对象保留区
show parameter shared_pool_reserved_size
select request_misses from v$shared_pool_reserved;

12. 查看最浪费内存的前10个 SQL 占所有语句的比例, 建议控制在5%以内
select sum(pct_bufgets) "Percent"
from
    (
        select
            rank() over (order by buffer_gets desc) as rank_bufgets,
            to_char(100 * ratio_to_report(buffer_gets) over (),'999.99') pct_bufgets
        from v$sqlarea
    )
where rank_bufgets < 11;

13. 查看消耗物理 IO 资源最大的的 SQL 语句
select disk_reads,substr(sql_text,1,4000) from v$sqlarea order by disk_reads asc;

14. 使用共享池大小设置指导
select
    shared_pool_size_for_estimate,
    estd_lc_size,estd_lc_memory_objects,
    estd_lc_time_saved,
    estd_lc_time_saved_factor,
    estd_lc_memory_object_hits
from v$shared_pool_advice;

select
    'Shared Pool' component,
    shared_pool_size_for_estimate,
    estd_lc_time_saved_factor,
    case
        when current_parse_time_elapsed_s + adjustment_s < 0
        then 0
        else current_parse_time_elapsed_s + adjustment_s
    end response_time
from
(
    select
        shared_pool_size_for_estimate,
        shared_pool_size_factor,
        estd_lc_time_saved_factor,
        a.estd_lc_time_saved,
        e.value/100 current_parse_time_elapsed_s,
        c.estd_lc_time_saved - a.estd_lc_time_saved adjustment_s
    from
        v$shared_pool_advice a,
        (select * from v$sysstat where name = 'parse time elapsed') e,
        (select estd_lc_time_saved from v$shared_pool_advice where shared_pool_size_factor = 1) c
);

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22558114/viewspace-1122587/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22558114/viewspace-1122587/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值