alter system flush “oracle的緩衝”

來源:互聯網
上載者:User

    下面3條語句,旨在重新整理oracle的緩衝。這裡總結一下。

 

    1)alter system flush global context

    說明:

    對於多層架構的,如:應用伺服器和資料區塊伺服器通過串連池進行通訊,對於串連池的這些資訊被保留在SGA中,這條語句便是把這些串連資訊清空。

 

    2)alter system flush shared_pool

    將使library cache和data dictionary cache以前儲存的sql執行計畫全部清空,但不會清空共用sql區或者共用pl/sql區裡面緩衝的最近被執行的條目。重新整理共用池可以協助合并片段(small chunks),釋放少數共用池資源,暫時解決shared_pool中的片段問題。但是,這種做法通常是不被推薦的。原因如下:

                ·Flush Shared Pool會導致當前未使用的cursor被清除出共用池,如果這些SQL隨後需要執行,那麼資料庫將經曆大量的硬解析,系統將會經曆嚴重的CPU爭用,資料庫將會產生激烈的Latch競爭。
                ·如果應用沒有使用綁定變數,大量類似SQL不停執行,那麼Flush Shared Pool可能只能帶來短暫的改善,資料庫很快就會回到原來的狀態。
                ·如果Shared Pool很大,並且系統非常繁忙,重新整理Shared Pool可能會導致系統掛起,對於類似系統盡量在系統空閑時進行。

    下面測試一下,重新整理對共用池片段的影響:

SQL> select count(*) from x$ksmsp;  COUNT(*)----------     41637SQL> alter system flush shared_pool;系統已更改。SQL> select count(*) from x$ksmsp;  COUNT(*)----------      9276

    3)alter system flush buffer_cache

    為了最小化cache對測試實驗的影響,需要手動重新整理buffer cache,以促使oracle重新執行物理訪問(統計資訊裡面的:physical reads)。

    測試環境

SQL> select count(*) from tt;  COUNT(*)----------   1614112SQL> show user;USER 為 "HR"SQL> exec dbms_stats.gather_table_stats('HR','TT');PL/SQL 過程已成功完成。SQL> select blocks,empty_blocks from dba_tables where table_name='TT' and owner='HR';    BLOCKS EMPTY_BLOCKS---------- ------------     22357            0表TT共有22357個block

    藉助x$bh,觀察state=0的情況

SQL> select count(*) from x$bh where state=0;  COUNT(*)----------         0SQL> alter system flush buffer_cache;系統已更改。SQL> select count(*) from x$bh where state=0;  COUNT(*)----------     40440

    state=0表示buffer狀態是free,flush cache後,所有的buffer都被標誌為free

    觀察flush cache後,對查詢的影響:

SQL> set autot on statisticsSQL> select count(*) from tt;  COUNT(*)----------   1614112統計資訊----------------------------------------------------------          0  recursive calls          0  db block gets      22288  consistent gets      22277  physical reads          0  redo size        416  bytes sent via SQL*Net to client        385  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          1  rows processedSQL> /  COUNT(*)----------   1614112統計資訊----------------------------------------------------------          0  recursive calls          0  db block gets      22288  consistent gets          0  physical reads          0  redo size        416  bytes sent via SQL*Net to client        385  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          1  rows processedSQL> alter system flush buffer_cache;系統已更改。SQL> select count(*) from tt;  COUNT(*)----------   1614112統計資訊----------------------------------------------------------          0  recursive calls          0  db block gets      22288  consistent gets      22277  physical reads          0  redo size        416  bytes sent via SQL*Net to client        385  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          1  rows processed

 

   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.