zoukankan      html  css  js  c++  java
  • shared pool

    1、shared pool的组成
    3块区域:free、library cache、row cache
    select * from v$sgastat a where a.NAME = 'library cache';
    select * from v$sgastat a where a.pool = 'shared pool' and a.NAME = 'free memory';
    select * from v$sgastat a where a.NAME = 'row cache';
    简述数据字典

    2、硬解析、软解析
    硬解析步骤、软解析步骤
    讲解shared pool内存块组成结构
    两个概念:chain、chunk
    ora-4031错误
    select count(*) from x$ksmsp;
    select count(*) from dba_objects;
    select count(*) from x$ksmsp;
    alter system flush shared_pool;

    软硬解析的具体情况
    select name,value from v$sysstat where name like 'parse%'


    3、SQL共享,绑定变量
    SQL语句组成,动态部分、静态部分
    cursor_sharing

    declare v_sql varchar2(50);
    begin for i in 1..10000 loop
    v_sql := 'insert /*hello*/ into test(id) values (:1)';
    execute immediate v_sql using i;
    end loop;
    commit;
    end;

    select SQL_ID,sql_text,EXECUTIONS from v$sql where SQL_TEXT like

    4、找出没有共享的SQL语句
    如何找出不能共享cursor的sql
    在v$sql查找执行次数较小的sql语句,观察这些sql语句是否是经常执行的。
    select SQL_FULLTEXT from v$sql where EXECUTIONS=1 and sql_text like '%from t%';
    select SQL_FULLTEXT from v$sql where EXECUTIONS=1 order by sql_text;

    5、解析命中率
    select sum(pinhits)/sum(pins)*100 from v$librarycache;
    select sum(gets),sum(getmisses),100*sum(gets-getmisses)/sum(gets) from v$rowcache where gets>0;

    6、解决4031错误的方法
    1、alter system flush shared_pool;
    2、共享SQL
    3、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';
    执行dbms_shared_pool.keep('对象名');
    DBMS_SHARED_POOL
    @?/rdbms/admin/dbmspool.sql
    4、保留区
    select REQUEST_MISSES from v$shared_pool_reserved;
    5、增加shared pool空间
    select COMPONENT,CURRENT_SIZE from V$SGA_DYNAMIC_COMPONENTS;
    show parameter sga_target
    show parameter sga_max_size
    alter system set shared_pool_size=150M scope=both;

    7、查看执行计划
    select * from table(dbms_xplan.display_cursor('g4pkmrqrgxg3b'));

    8、在Oracle10g中允许有多个sub shared pool,可以设置大于1G的shared pool


    设置shared pool的大小
    SELECT
    shared_pool_size_for_estimate "SP",
    estd_lc_size "EL",
    estd_lc_memory_objects "ELM",
    estd_lc_time_saved "ELT", estd_lc_time_saved_factor "ELTS",
    estd_lc_memory_object_hits "ELMO"
    FROM v$shared_pool_advice;

    SELECT 'Shared Pool' component,shared_pool_size_for_estimate estd_sp_size,estd_lc_time_saved_factor parse_time_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);


    首先判定是否ORA-04031 错误是由共享池保留空间中的库高速缓冲的碎片产生的。提交下的查询:
    SELECT free_space, avg_free_size,used_space, avg_used_size, request_failures,
    last_failure_size
    FROM v$shared_pool_reserved;
    如果:
    REQUEST_FAILURES > 0 并且 LAST_FAILURE_SIZE > SHARED_POOL_RESERVED_MIN_ALLOC
    那么ORA-04031 错误就是因为共享池保留空间缺少连续空间所致。要解决这个问题,可以考虑加大SHARED_POOL_RESERVED_MIN_ALLOC 来降低缓冲进共 享池保留空间的对象数目,并增大 SHARED_POOL_RESERVED_SIZE 和 SHARED_POOL_SIZE 来加大共享池保留空间的可用内存。
    如果:
    REQUEST_FAILURES > 0 并且 LAST_FAILURE_SIZE < SHARED_POOL_RESERVED_MIN_ALLOC
    或者
    REQUEST_FAILURES 等于0 并且 LAST_FAILURE_SIZE < SHARED_POOL_RESERVED_MIN_ALLOC
    那么是因为在库高速缓冲缺少连续空间导致ORA-04031 错误。
    第一步应该考虑降低SHARED_POOL_RESERVED_MIN_ALLOC 以放入更多的对象到共享池保留空间中并且加大SHARED_POOL_SIZE。


    看了下memory_max_target配置的值为21G,再查看了下操作系统使用的内存达到15G左右,所以memory_max_target的值和
    OS使用内存已经大大超过了物理内存值,因此导致出现了错误,将内存合理调整分配后问题得到解决。

    可以使用“free”命令查看当前内存的使用情况,
    其中各项的含义如下,total:总计物理内存的大小;used:已使用的内存大小;free:可用的内存大小;Shared:多个进程共享的内存总额;Buffers/cached:磁盘缓存的大小。
    第二行(mem)的used/free与第三行(-/+ buffers/cache)used/free的区别在于是从不同的角度来看内存的占用,“Mem”是从操作系统的角度来看,对于OS,buffers/cached都是属于被使用,总共使用的内存包含内核(OS)使用+Application(X,oracle,etc)使用+buffers+cached。“-/+ buffers/cache”所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是可用的内存,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

    free(选项)
    选项
    -b:以Byte为单位显示内存使用情况;
    -k:以KB为单位显示内存使用情况;
    -m:以MB为单位显示内存使用情况;
    -o:不显示缓冲区调节列;
    -s<间隔秒数>:持续观察内存使用状况;
    -t:显示内存总和列;
    -V:显示版本信息。

    alter system set cursor_sharing=SIMILAR | FORCE;

    select sum(bytes) from v$sgastat where pool='shared pool';

    select pool,sum(bytes)/1024/1024 from v$sgastat group by pool;


    select sum(bytes)/1024/1024 mb from v$sgastat where pool='shared pool';

    SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ, To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE" FROM X$KSMSP GROUP BY KSMCHCLS;

    SELECT KSMCHIDX,KSMCHDUR, KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,to_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE" FROM X$KSMSP GROUP BY KSMCHIDX,KSMCHDUR, KSMCHCLS order by 1,2,3;

  • 相关阅读:
    Scoop Windows 的命令行安装程序管理工具
    微信小程序:用 Promise 解决方案代替回调地狱。 修复 this._invokeMethod is not a function 的问题
    微信小程序 获取地理位置信息
    Vue 与 动态组件 import 的尝试
    exception: TypeError: Cannot read property '_modulesNamespaceMap' of undefined at getModuleByNamespac
    Vue 项目中断点没有跳转到指定源码的问题
    检查 chrome 插件是否存在
    vue-devtools 获取到 vuex store 和 Vue 实例的?
    HTML5的服务器EventSource(server-sent event)发送事件
    ps 渐进式图片的技巧(支持jpg,gif,png)
  • 原文地址:https://www.cnblogs.com/dbalightyear/p/11241873.html
Copyright © 2011-2022 走看看