showparameteropen_cursors--每個(gè)session(會(huì)話)最多能同時(shí)打開(kāi)多少個(gè)cursor(游標(biāo))NAMETYPEVALUE-----------------------------------------------------------------------------open_cursorsinteger300SQL>showparametersession_cached_cursor--每個(gè)session(會(huì)話)最" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【OPEN_CURSORS】oracle參數(shù)open_cursors和sess

系統(tǒng) 3310 0
    SQL
    
      >
    
     show parameter open_cursors           
    
      --
    
    
      每個(gè)session(會(huì)話)最多能同時(shí)打開(kāi)多少個(gè)cursor(游標(biāo))  
    
    
  
NAME                                 TYPE        VALUE  

    
      --
    
    
      ---------------------------------- ----------- ------------------------------  
    
    
open_cursors                         
    
      integer
    
    
      300
    
      
SQL
    
      >
    
     show parameter session_cached_cursor  
    
      --
    
    
      每個(gè)session(會(huì)話)最多可以緩存多少個(gè)關(guān)閉掉的cursor  
    
    
  
NAME                                 TYPE        VALUE  

    
      --
    
    
      ---------------------------------- ----------- ------------------------------  
    
    
session_cached_cursors               
    
      integer
    
    
      20
    
      

SQL
    
      >
    
    
      select
    
    
      count
    
    (
    
      *
    
    ) 
    
      from
    
     v$open_cursor;  
    
      --
    
    
      是指當(dāng)前實(shí)例的某個(gè)時(shí)刻的打開(kāi)的cursor數(shù)目
    
    
      COUNT
    
    (
    
      *
    
    )  

    
      --
    
    
      --------  
    
    
      108
    
  
    

1、open_cursors與session_cached_cursor的作用?

open_cursors設(shè)定每個(gè)session(會(huì)話)最多能同時(shí)打開(kāi)多少個(gè)cursor(游標(biāo))。session_cached_cursor 設(shè)定每個(gè)session(會(huì)話)最多可以緩存多少個(gè)關(guān)閉掉的cursor。想要弄清楚他們的作用,我們得先弄清楚oracle如何執(zhí)行每個(gè)sql語(yǔ)句。

【OPEN_CURSORS】oracle參數(shù)open_cursors和session_cached_cursor詳解!

看完上圖后我們明白了兩件事:

a、兩個(gè)參數(shù)之間沒(méi)有任何關(guān)系,相互也不會(huì)有任何影響。

b、兩個(gè)參數(shù)有著相同的作用:讓后續(xù)相同的sql語(yǔ)句不在打開(kāi)游標(biāo),從而避免軟解析過(guò)程來(lái)提供應(yīng)用程序的效率。

2、如何正確合理設(shè)置參數(shù)的大小? a、如果Open_cursors設(shè)置太小,對(duì)系統(tǒng)性能不會(huì)有明顯改善,還可能觸發(fā)ORA-O1000:m~imum open CUrsOrs exceeded.的錯(cuò)誤。如果設(shè)置太大,則無(wú)端消耗系統(tǒng)內(nèi)存。我們可以通過(guò)如下的sql語(yǔ)句查看你的設(shè)置是否合理:

      SQL
      
        >
      
      
        SELECT
      
      
        MAX
      
      (A.VALUE) 
      
        AS
      
       HIGHEST_OPEN_CUR, P.VALUE 
      
        AS
      
       MAX_OPEN_CUR  
      
      
        2
      
      
        FROM
      
       V$SESSTAT A, V$STATNAME B, V$PARAMETER P  
      
      
        3
      
      
        WHERE
      
       A.STATISTIC# 
      
        =
      
       B.STATISTIC#  
      
      
        4
      
      
        AND
      
       B.NAME 
      
        =
      
      
        '
      
      
        opened cursors current
      
      
        '
      
      
        5
      
      
        AND
      
       P.NAME 
      
        =
      
      
        '
      
      
        open_cursors
      
      
        '
      
      
        6
      
      
        GROUP
      
      
        BY
      
       P.VALUE;  
      
    HIGHEST_OPEN_CUR MAX_OPEN_CUR  
    
      
        --
      
      
        -------------- --------------------  
      
      
        28
      
      
        300
      
    
      

HIGHEST_ OPEN CUR是實(shí)際打開(kāi)的cursors 的最大值,MAX_OPEN_ CUR是參數(shù)Open_cursors的設(shè)定值,如果二者太接近,甚至觸發(fā)eRA一01000錯(cuò)誤,那么你就應(yīng)該調(diào)大參數(shù)Open_cursors的設(shè)定 值。如果問(wèn)題依舊沒(méi)有解決,盲目增大Open_cursors也是不對(duì)的,這個(gè)時(shí)候你得檢查應(yīng)用程序的代碼是否合理,比如說(shuō)應(yīng)用程序是否打開(kāi)了游標(biāo),卻沒(méi) 有在它完成工作后沒(méi)有及時(shí)關(guān)閉。以下語(yǔ)句可以幫助你確定導(dǎo)致游標(biāo)漏出的會(huì)話:

        
              SELECT
        
         A.VALUE, S.USERNAME, S.SID, S.SERIAL#  
      
        
          FROM
        
         V$SESSTAT A, V$STATNAME B, V$SESSION S  
     
        
          WHERE
        
         A.STATISTIC# 
        
          =
        
         B.STATISTIC#  
       
        
          AND
        
         S.SID 
        
          =
        
         A.SID  
       
        
          AND
        
         B.NAME 
        
          =
        
        
          '
        
        
          opened cursors curent
        
        
          '
        
        ;  
      
        

同樣,session_cached_cursors的值也不是越大越好,我們可以通過(guò)下面兩條語(yǔ)句得出合理的設(shè)置。

              SQL
          
            >
          
          
            SELECT
          
           NAME, VALUE 
          
            FROM
          
           V$SYSSTAT 
          
            WHERE
          
           NAME 
          
            LIKE
          
          
            '
          
          
            %cursor%
          
          
            '
          
          ;  
      
    NAME                                                                  VALUE  
    
          
            --
          
          
            -------------------------------------------------------------- ----------  
          
          
    opened cursors cumulative                                             
          
            15095
          
            
    opened cursors 
          
            current
          
          
            34
          
            
    session 
          
            cursor
          
           cache hits                                             
          
            12308
          
            
    session 
          
            cursor
          
           cache 
          
            count
          
          
            775
          
          
            cursor
          
           authentications                                                  
          
            324
          
            
      
    SQL
          
            >
          
          
            SELECT
          
           NAME, VALUE 
          
            FROM
          
           V$SYSSTAT 
          
            WHERE
          
           NAME 
          
            LIKE
          
          
            '
          
          
            %parse%
          
          
            '
          
          ;  
      
    NAME                                                                  VALUE  
    
          
            --
          
          
            -------------------------------------------------------------- ----------  
          
          
    parse time cpu                                                          
          
            332
          
            
    parse time elapsed                                                     
          
            1190
          
            
    parse 
          
            count
          
           (total)                                                    
          
            9184
          
            
    parse 
          
            count
          
           (hard)                                                     
          
            1031
          
            
    parse 
          
            count
          
           (failures)                                                    
          
            3
          
        
          

session cursor cache hits就是系統(tǒng)在高速緩存區(qū)中找到相應(yīng)cursors的次數(shù),parse count(total)就是總的解析次數(shù),二者比值越高,性能越好。如果比例比較低,并且有較多剩余內(nèi)存的話,可以考慮加大該參數(shù)。

c、使用下面的sql判斷'session_cached_cursors' 的使用情況。如果使用率為100%則增大這個(gè)參數(shù)值。

SQL > SELECT ' session_cached_cursors ' PARAMETER,

            
              2
            
                     LPAD(VALUE, 
            
              5
            
            ) VALUE,  
      
            
              3
            
                     DECODE(VALUE, 
            
              0
            
            , 
            
              '
            
            
               n/a
            
            
              '
            
            , TO_CHAR(
            
              100
            
            
              *
            
             USED 
            
              /
            
             VALUE, 
            
              '
            
            
              990
            
            
              '
            
            ) 
            
              ||
            
            
              '
            
            
              %
            
            
              '
            
            ) USAGE  
      
            
              4
            
            
              FROM
            
             (
            
              SELECT
            
            
              MAX
            
            (S.VALUE) USED  
      
            
              5
            
            
              FROM
            
             V$STATNAME N, V$SESSTAT S  
      
            
              6
            
            
              WHERE
            
             N.NAME 
            
              =
            
            
              '
            
            
              session cursor cache count
            
            
              '
            
            
              7
            
            
              AND
            
             S.STATISTIC# 
            
              =
            
             N.STATISTIC#),  
      
            
              8
            
                     (
            
              SELECT
            
             VALUE 
            
              FROM
            
             V$PARAMETER 
            
              WHERE
            
             NAME 
            
              =
            
            
              '
            
            
              session_cached_cursors
            
            
              '
            
            )  
      
            
              9
            
            
              UNION
            
            
              ALL
            
            
              10
            
            
              SELECT
            
            
              '
            
            
              open_cursors
            
            
              '
            
            ,  
     
            
              11
            
                     LPAD(VALUE, 
            
              5
            
            ),  
     
            
              12
            
                     TO_CHAR(
            
              100
            
            
              *
            
             USED 
            
              /
            
             VALUE, 
            
              '
            
            
              990
            
            
              '
            
            ) 
            
              ||
            
            
              '
            
            
              %
            
            
              '
            
            
              13
            
            
              FROM
            
             (
            
              SELECT
            
            
              MAX
            
            (
            
              SUM
            
            (S.VALUE)) USED  
     
            
              14
            
            
              FROM
            
             V$STATNAME N, V$SESSTAT S  
     
            
              15
            
            
              WHERE
            
             N.NAME 
            
              IN
            
            
              16
            
                             (
            
              '
            
            
              opened cursors current
            
            
              '
            
            , 
            
              '
            
            
              session cursor cache count
            
            
              '
            
            )  
     
            
              17
            
            
              AND
            
             S.STATISTIC# 
            
              =
            
             N.STATISTIC#  
     
            
              18
            
            
              GROUP
            
            
              BY
            
             S.SID),  
     
            
              19
            
                     (
            
              SELECT
            
             VALUE 
            
              FROM
            
             V$PARAMETER 
            
              WHERE
            
             NAME 
            
              =
            
            
              '
            
            
              open_cursors
            
            
              '
            
            );  
      
    PARAMETER              VALUE      USAGE  
    
            
              --
            
            
              -------------------- ---------- -----  
            
            
    session_cached_cursors    
            
              20
            
            
              100
            
            
              %
            
              
    open_cursors             
            
              300
            
            
              16
            
            
              %
            
          

當(dāng)我們執(zhí)行一條sql語(yǔ)句的時(shí)候,我們將會(huì)在shared pool產(chǎn)生一個(gè)library cache object,cursor就是其中針對(duì)于sql語(yǔ)句的一種library cache object.另外我們會(huì)在pga有一個(gè)cursor的拷貝,同時(shí)在客戶(hù)端會(huì)有一個(gè)statement handle,這些都被稱(chēng)為cursor,在v$open_cursor里面我們可以看到當(dāng)前打開(kāi)的cursor和pga內(nèi)cached cursor.

session_cached_cursor
這個(gè)參數(shù)限制了在pga內(nèi)session cursor cache list的長(zhǎng)度,session cursor cache list是一條雙向的lru鏈表,當(dāng)一個(gè)session打算關(guān)閉一個(gè)cursor時(shí),如果這個(gè)cursor的parse count超過(guò)3次,那么這個(gè)cursor將會(huì)被加到session cursor cache list的MRU端.當(dāng)一個(gè)session打算parse一個(gè)sql時(shí),它會(huì)先去pga內(nèi)搜索session cursor cache list,如果找到那么會(huì)把這個(gè)cursor脫離list,然后當(dāng)關(guān)閉的時(shí)候再把這個(gè)cursor加到MRU 端.session_cached_cursor提供了快速軟分析的功能,提供了比soft parse更高的性能.

更新2:

      OPEN_CURSORS是一個(gè)十分有趣的參數(shù),經(jīng)常有DBA發(fā)現(xiàn)自己的系統(tǒng)中的OPEN CURSORS十分大。我們看一個(gè)例子:
    
      SQL
      
        >
      
      
        select
      
       sid,value 
      
        from
      
       v$sesstat a,v$statname b 
      
        where
      
       a.statistic#
      
        =
      
      b.statistic# 
      
        and
      
       name
      
        =
      
      
        '
      
      
        opened cursors current
      
      
        '
      
      
        order
      
      
        by
      
      
        2
      
      ;

       SID      VALUE


      
        --
      
      
        -------- ----------
      
      
        5430
      
      
        93
      
      
        3527
      
      
        95
      
      
        4055
      
      
        96
      
      
        4090
      
      
        97
      
      
        2012
      
      
        98
      
      
        1819
      
      
        98
      
      
        5349
      
      
        102
      
      
        1684
      
      
        103
      
      
        1741
      
      
        116
      
      
        4308
      
      
        169
      
      
        1970
      
      
        170
      
      
        1369
      
      
        181
      
      
        4208
      
      
        184
      
      
        887
      
      
        214
      
      
        5215
      
      
        214
      
      
        3518
      
      
        214
      
      
        868
      
      
        214
      
      
        1770
      
      
        215
      
      
        4050
      
      
        215
      
      
        1809
      
      
        231
      
      
        3010
      
      
        235
      
      
        762
      
      
        237
      
      
        731
      
      
        471
      
      
        4013
      
      
        1066
      
      
        2648
      
      
        1152
      
      
        2255
      
      
        1172
      
      
        2322
      
      
        2620
      
    
      

我們看到這個(gè)系統(tǒng)的 OPEN_CURSORS 參數(shù)設(shè)置為 3000 ,而會(huì)話中當(dāng)期打開(kāi) CURSOR 最大的會(huì)話居然達(dá)到了 2620 。在一般人的眼里, CURSOR 使用后就關(guān)閉了, OPENEDCURSORS 的數(shù)量應(yīng)該不會(huì)太多,難道應(yīng)用程序出現(xiàn)了 CURSOR 泄漏,有些應(yīng)用使用了 CURSOR 沒(méi)有關(guān)閉?實(shí)際上我們對(duì) OPENCURSOR 的概念一直存在誤解。認(rèn)為只有正在 FETCH CURSOR OPEN 狀態(tài)的,而一旦 FETCH 結(jié)束, CLOSECURSOR 后, CURSOR 就處于關(guān)閉狀態(tài)了。因此一個(gè)會(huì)話中 OPEN 狀態(tài)的 CURSOR 數(shù)量應(yīng)該很少。事實(shí)上不是這樣的,某些 CURSOR 在程序中是已經(jīng) CLOSE 了,但是 Oracle 為了提高 CURSOR 的性能,會(huì)對(duì)其進(jìn)行緩沖,這些緩沖的 CURSOR ,在程序中的關(guān)閉只是一個(gè)軟關(guān)閉,事實(shí)上,在會(huì)話中并未關(guān)閉,而是放在一個(gè) CURSOR 緩沖區(qū)中。

Oracle9.2.0.5 之前, OPEN_CURSORS 參數(shù)的作用是雙重的,一方面是限制一個(gè)會(huì)話打開(kāi)的 CURSORS 的總量。另外一方面, OPEN_CURSORS 參數(shù)也作為 PL/SQLCURSOR 的緩沖。在 PL/SQL 中,如果某個(gè) CURSOR 關(guān)閉了,這個(gè) CURSOR 不會(huì)馬上硬關(guān)閉,而是首先保存在 CURSOR 緩沖中。如果這個(gè)會(huì)話當(dāng)前打開(kāi)的 CURSOR 數(shù)量還沒(méi)有達(dá)到 OPEN_CURSORS 參數(shù)的值,那么就可以先保持 OPEN 狀態(tài)。如果當(dāng)前打開(kāi)的 CURSOR 數(shù)量已經(jīng)達(dá)到了 OPEN_CURSORS 參數(shù)的限制,那么首先會(huì)關(guān)閉一個(gè)被緩沖的,實(shí)際當(dāng)時(shí)并未打開(kāi)的 CURSOR 。如果緩沖池中的所有 CURSOR 都是實(shí)際打開(kāi)的,那么就會(huì)報(bào) ORA-1000 , "maximumopencursorsexceeded" 。

Oracle9.2.0.5 以后, OPEN_CURSORS 參數(shù)不再承擔(dān) PL/SQL 緩沖的工作 ,PL/SQL 中的 SQL 也可以使用 SESSION_CACHED_CURSORS 的會(huì)話緩沖了。這個(gè)參數(shù)就成為了一個(gè)純粹的限制。

雖然如此, OPEN_CURSORS 參數(shù)仍然和 CURSOR 的緩沖機(jī)制密切相關(guān),因?yàn)檫@個(gè)參數(shù)限制了當(dāng)前某個(gè)會(huì)話打開(kāi) CURSOR 的最大值。設(shè)置一個(gè)較大的 OPEN_CURSORS 參數(shù),可以避免出現(xiàn) ORA-1000 ,同時(shí)也可以讓會(huì)話緩沖更多的 CURSOR ,改善 SQL 解析的性能。不過(guò)這個(gè)參數(shù)設(shè)置的較大會(huì)占用較大的 PGA 空間,消耗一定的物理內(nèi)存。因此這個(gè)參數(shù)也不是設(shè)置的越大越好,一般的 OLTP 系統(tǒng)中, 1000 3000 就足夠了。在共享服務(wù)器模式的系統(tǒng)中,這個(gè)參數(shù)的設(shè)置要略微保守一些,因?yàn)檫@個(gè)參數(shù)越大,占用的 SGA 空間也就越大。

另外要注意的是,從 Oracle9.0 開(kāi)始,這個(gè)參數(shù)就已經(jīng)是動(dòng)態(tài)的了,可以隨時(shí)動(dòng)態(tài)調(diào)整。

【OPEN_CURSORS】oracle參數(shù)open_cursors和session_cached_cursor詳解!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日本亚洲精品色婷婷在线影院 | 日韩欧美一区二区三区不卡 | 成人性视频免费网站 | 久久久婷 | 夜夜撸天天操 | 6月婷婷 | 一级在线观看视频 | 涩色婷婷狠狠第四四房社区奇米 | 午夜丁香 | 無码一区中文字幕少妇熟女H | 亚洲国产精品久久综合 | 国产男女爽爽爽免费视频 | 第四色播日韩AV第一页 | 欧美zozozo人禽交免费观看 | 亚洲欧美综合精品久久成人 | 日韩精品无码一区二区三区 | 青娱乐欧美视频 | 久久亚洲最大成人网4438 | 成人精品国产 | a级毛片免费高清视频 | 亚洲天堂久久 | 久久亚洲国产成人亚 | 性色网站| 色综合久久天天综合网 | 国产91色在线 | 亚洲 | www.日韩av.com| 麻豆精品在线观看 | 国产精品亚洲一区 | 日本在线视频一区二区 | 日日操夜夜草 | 国产综合欧美 | 免费日韩av | 免费在线看a | 欧美精品一区二区在线观看 | 在线播放高清视频www | 久久久久无码国产精品一区 | 日本高清视频在线播放 | 免费观看一级黄色片 | 免费国产精品视频在线 | 日韩欧美精品综合一区二区三区 | xxx 日本韩国 |