<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    cAng^Er

    不懂我的人 , 離不了我 , 該了解了解我 !而懂我的人 , 更離不了我 , 因?yàn)樗麄儛畚?。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      30 隨筆 :: 16 文章 :: 18 評論 :: 0 Trackbacks
    原文:http://space.itpub.net/79499/viewspace-341794

    .簡介:數(shù)據(jù)庫調(diào)整中最為重要的一部分是重寫運(yùn)行效率差的SQL代碼,重寫之后的SQL代碼在運(yùn)行效率方面可能會與之前的產(chǎn)生極大的差別!
          
    但是當(dāng)遇到重寫之后性能還是未能突破瓶頸或者你是用戶(無法訪問SQL代碼)的時候,可以通過調(diào)整ORACLE的共享內(nèi)存結(jié)構(gòu)SGA(System Global Area),最大限度地提高性能!
           SGA
    中比較重要的組件就是Shared Pool(共享池),它的作用就是高速緩存SQL語句!共享池由一個最近最少使用(LRU,Least Recently Used)算法來管理!
          
    共享池的好處:
    1.select cust_id,cust_name from col_cust
    2.
    上列語句的算法被轉(zhuǎn)換成ASCII,然后通過一個散列算法產(chǎn)生一個單獨(dú)的散列值~~接著Process會查看該散列值在Shared Pool中是否存在,
    如果存在,就執(zhí)行高速緩存中語句
    3.
    如果不存在,就必須對該語句進(jìn)行語法分析,這些分析步驟會產(chǎn)生額外的系統(tǒng)開銷,該操作是高代價的!
    4.
    查找到匹配的SQL叫做一次高速緩沖區(qū)命中(Cache Hit)
    5.
    反之叫做高速緩沖區(qū)脫靶(Cache Miss)
    6.
    注意是區(qū)分大小寫的
     SELECT CUST_ID,CUST_NAME FROM COL_CUST 
     
          
    .共享池有三個組件組成,Library Cache(庫高速緩存區(qū)),Data Dictionary Cache(數(shù)據(jù)目錄高速緩存區(qū)),User Global Area(用戶全局區(qū))
          1.Library Cache(
    庫高速緩存區(qū))是用來緩存SQL語句的場所.可以通過下面這句話對動態(tài)視圖進(jìn)行查詢,檢查Library Cache的內(nèi)容
     select p.username,l.sql_text,
     lpad(' ' ,4*(LEVEL-2)) || operation || ' ' || options || ' ' || object_name as "Execution Plan"
     from (
     select s.username,p.address,p.hash_value,p.operation,p.options,p.object_name,p.id,p.parent_id
     from v$sql_plan p,v$session s
     where (p.address=s.sql_address and p.hash_value=s.sql_hash_value) and s.username='citictest'
     ) p,v$sql l
     where(l.address=p.address and l.hash_value=p.hash_value)
     start with id=0
     connect by prior id = parent_id
          2.Data Dictionary Cache(
    數(shù)據(jù)目錄高速緩存區(qū)):數(shù)據(jù)目錄是用來檢查SQL語句所引用的那些表是否已經(jīng)存在,列名和數(shù)據(jù)類型是否也正確! Library CacheData Dictionary Cache使用互相獨(dú)立的LRU機(jī)制,好處是后續(xù)用戶發(fā)布的語句與先前用戶所發(fā)布的語句類似但不一致,雖然在Library Cache中無法找到匹配的,但是在數(shù)據(jù)目錄中會存在,也會有性能上的提高。

          
    .(1)測量Library Cache(庫高速緩存區(qū))的性能
          select namespace,gethitratio,pinhitratio,reloads,invalidations
           from v$librarycache
           where namespace in ('SQL_AREA','TABLE/PROCEDURE','BODY','TRIGGER');
    主要看gethitratio,pinhitratio>90%說明調(diào)整充分
          select sum(reloads)/sum(pins) "RELOAD RATIO"
           from v$librarycache
    當(dāng)<1%意味著不是經(jīng)常重新語法分析以前被裝載到Library Cache的語句
     
           (2)
    測量Data Dictionary Cache(數(shù)據(jù)目錄高速緩存區(qū))的性能
          select 1 - (sum(getmisses)/sum(gets)) "DATA DICTIONARY HIT RATIO"
           from v$rowcache;
    當(dāng)>85%時說明調(diào)整充分
       .通過改進(jìn)Library CacheData Dictionary Cache來提高shared pool性能
    (1).
    得到當(dāng)前shared pool的大小
     select pool,sum(bytes) "SIZE" from v$sgastat where pool='shared pool' group by pool;
    (2).
    得到推薦的shared pool大小
      set echo off
      set feedback off
      set serveroutput on
      declare
      v_total_plsql_mem number := 0;
      v_total_sql_mem   number := 0;
      v_total_sharable_mem number := 0;
      begin
           select sum(sharable_mem) into v_total_plsql_mem from v$db_object_cache;
          
           select sum(sharable_mem) into v_total_sql_mem from v$sqlarea where executions > 10;
          
           v_total_sharable_mem := v_total_plsql_mem + v_total_sql_mem;
          
           Dbms_Output.put_line('Estimated required shared pool size is:' || to_char(v_total_sharable_mem,'fm9,999,999,999,999') || ' bytes');
      end;
      /
    (3).
    動態(tài)加大shared pool大小
    alert system set shared_pool_size = 200M;
    *
    大小不能超過SGA_MAX_SIZE的值
    (4).
    初始SGA大小的計(jì)算
    (TSGA)SGA
    總的大小=服務(wù)器物理內(nèi)存*0.55   (1G以上物理內(nèi)存的話可以相應(yīng)60%-75%)
    (TSGAI)
    每個實(shí)例的總SGA大小=TSGA/oracle上實(shí)例的個數(shù)
    shared pool
    的總內(nèi)存=TSGAI*0.45
    (5).
    上述四點(diǎn)是其實(shí)完成的是同一個做法,就是使Shared Pool更大
    (6).
    可以將PL/SQL程序包裝入Shared Pool Reserved Area(共享池保留區(qū))
    Shared_Pool_Reserved_Size
    用來設(shè)置這一區(qū)域的大小,默認(rèn)是5%,這是不夠的
    select owner,name,sharable_mem from v$db_object_cache
    where type in('PACKAGE','PACKAGE BODY') order by sharable_mem desc;
    上述這句語句可以查看當(dāng)前緩存區(qū)中的PL/SQL程序包的名稱和大小,當(dāng)發(fā)現(xiàn)大小> Shared_Pool_Reserved_Size時說明保留區(qū)的大小不夠,你需要增加Shared_Pool_Reserved_Size的值
    (7).
    把重要的PL/SQL代碼保持在內(nèi)存中
    你可以把常用的PROCEDURE銷定(Pinning)Shared_Pool_Reserved_Size
    做法如下:
              a)sys用戶登錄
              b)
    運(yùn)行@%ORACLE_HOME%/rdbms\admin\dbmspool.sql
              c)SQL>execute DBMS_SHARED_POOL.KEEP('PROCEDURENAME') (
    銷定,必須用sys完成)
              d)
    找到銷定的對象select owner,name,type from v$db_object_cache where kept='YES';
              e)
    銷定對單獨(dú)的SQL語句無法操作,盡可能的把大語句做成PROCEDURE,可以用一下語句尋找出比較大的語句
    select substr(sql_text,1,45),length(sql_text) "STMT_SIZE" from v$sqlarea where command_type=47 order by length(sql_text) desc;
              f)
    可以編寫一個腳本,當(dāng)實(shí)例啟動之后運(yùn)行,把所有需要銷定的語句執(zhí)行一下
              h)
    只有使用UNKEEP或者實(shí)例關(guān)閉時才會取消銷定
    (8).
    其他的一些調(diào)整Library Cache參數(shù)
    a)open_cursors :
    默認(rèn)50
    b)cursor_space_for_time
    默認(rèn)false
    c)session_cached_cursors
    默認(rèn)0(無游標(biāo)高速緩存)
    d)cursor_sharing
    默認(rèn)EXACT --2SQL語句必須完全匹配才能共享shared pool中所緩存的已分析代碼.
                     SIMILAR --
    允許2條僅在字面上不同的SQL語句共享shared pool中所緩存的已分析代碼.
    例如:select cust_id from col_cust where cust_name = 'wang'
         select cust_id from col_cust where cust_name = 'huang'
    上述兩句在SIMILAR模式中是相等,可以使用緩存的已分析代碼.
    posted on 2011-02-23 10:33 cAng^Er 閱讀(256) 評論(0)  編輯  收藏 所屬分類: |:數(shù) 據(jù) 庫:|
    主站蜘蛛池模板: 亚洲中文久久精品无码| 亚洲成人免费在线观看| 日韩免费在线视频| 亚洲三级高清免费| 亚洲精品tv久久久久| 99在线观看免费视频| 亚洲免费综合色在线视频| 在线A亚洲老鸭窝天堂| 手机看黄av免费网址| 欧洲美女大片免费播放器视频| 91亚洲va在线天线va天堂va国产| 免费黄色网址入口| 曰批全过程免费视频在线观看无码| 中文有码亚洲制服av片| 亚洲色婷婷一区二区三区| 三年片在线观看免费大全| aa毛片免费全部播放完整| 亚洲卡一卡二卡乱码新区| 国产精品亚洲а∨无码播放| 免费人成视频在线| 久久免费视频99| 视频免费1区二区三区| 亚洲国产夜色在线观看| 日日噜噜噜噜夜夜爽亚洲精品 | 一级毛片免费一级直接观看| 亚洲人成网站在线观看播放青青| 中文字幕亚洲不卡在线亚瑟| 岛国片在线免费观看| 无码国产精品一区二区免费3p| 免费精品国产自产拍在线观看| 亚洲av极品无码专区在线观看| 亚洲精品无码专区在线在线播放 | 91福利免费网站在线观看| 亚洲人成未满十八禁网站| 亚洲国产第一页www| 久久精品国产亚洲AV不卡| 午夜时刻免费入口| 国产桃色在线成免费视频| 99免费视频观看| 在线成人精品国产区免费| 一区二区三区免费精品视频|