oracle 排序記憶體

來源:互聯網
上載者:User

我在http://zhidao.baidu.com/question/123262452.html?fr=msg 提的問題,整理到這裡 非常感謝 zjwssg
的回答

 

排序記憶體涉及到PGA。
什麼時候使用自動PGA記憶體管理?什麼時候使用手動PGA記憶體管理?

  白天系統正常運行時適合使用自動PGA記憶體管理,讓Oracle根據當前負載自動管理、分配PGA記憶體。

  夜裡使用者數少、進行維護的時候可以設定當前會話使用手動PGA記憶體管理,讓當前的維護操作獲得儘可能多的記憶體,加快執行速度。

  如:伺服器平時運行在自動PGA記憶體管理員模式下,夜裡有個任務要大表進行排序串連後更新,就可以在該操作session中臨時更改為手動PGA記憶體管理,然後分配大的SORT_AREA_SIZE和HASH_AREA_SIZE(50%甚至80%記憶體,要確保無其他使用者使用),這樣能大大加快系統運行速度,又不影響白天高峰期對系統造成的影響。

 操作命令

 
  會話級更改

  ALTER SESSION SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};

  ALTER SESSION SET SORT_AREA_SIZE = 65536;

  ALTER SESSION SET HASH_AREA_SIZE = 65536;

 學以致用

  1,排序區:

  pga_aggregate_target為100MB,單個查詢能用到5%也就是5MB時排序所需時間

  SQL> create table sorttable as select * from all_objects;

  表已建立。

  SQL> insert into sorttable (select * from sorttable);

  已建立49735行。

  SQL> insert into sorttable (select * from sorttable);

  已建立99470行。

  SQL> set timing on;

SQL> set autotrace traceonly;

  SQL> select * from sorttable order by object_id;

  已選擇198940行。

  經過時間:  00: 00: 50.49

  Session級修改排序區為30mb所需時間

  SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;

  會話已更改。

  經過時間:  00: 00: 00.02

  SQL> ALTER SESSION SET SORT_AREA_SIZE = 30000000;

  會話已更改。

  經過時間:  00: 00: 00.01

  SQL> select * from sorttable order by object_id;

  已選擇198940行。

  經過時間:  00: 00: 10.76

  可以看到所需時間從50.49秒減少到10.31秒,速度提升很明顯。

  2,散列區:

  pga_aggregate_target為100MB,單個查詢能用到5%也就是5MB時表串連所需時間

  SQL> select /*+ use_hash(tb1 tb2)*/ * from sorttable tb1,sorttable tb2 where tb1.object_id=tb2.object_id;

  已選擇49735行。

  經過時間:  00: 00: 40.50

  Session級修改散列區為30mb所需時間

  SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;

  會話已更改。

  經過時間:  00: 00: 00.01

  SQL> ALTER SESSION SET HASH_AREA_SIZE = 30000000;

  會話已更改。

  經過時間:  00: 00: 00.01

  SQL> select /*+ use_hash(tb1 tb2)*/ * from sorttable tb1,sorttable tb2 where tb1.object_id=tb2.object_id;

  已選擇49735行。

  經過時間:  00: 00: 04.47

  所需時間由40.50秒提升到4.47秒,效果同樣很明顯。

  備忘:以上實驗皆執行全表掃描保證相關表讀入緩衝區中,避免因資料沒讀入緩衝造成誤差。

---另一個網址的:
總結一下:
1。 使用並行參數,8個CPU, 可以用parallel 6 ,最多佔用6個CPU, 正常情況下沒問題(前提是其他應用沒有佔超過2個CPU的資源)
2。 nologging, 絕對應該使用,會使速度大幅上升。(減少大量redo log)
3。 PGA, 普通的auto pga最大才100M, 顯然沒有達到最好效能,應該使用manual pga
alter session set workarea_size_policy=manual;
alter session set  hash_area_size=100000; -- hash_area_size 預設情況下會自動根據sort_area_size*2來調,導致sort_area_size不能超過1G, 手動設了就沒問題了。
alter session set sort_area_size=2000000000; -- 在系統可用記憶體足夠的情況下,最大可以到2G
4。 設定高一點的db_file_multiblock_read_count 也有利於提高I/O效能。保證足夠大的db_cache_size可以避免free_buffer_wait的出現
5。 可以通過v$session_longops 來監視進度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.