Oracle 11.2 使用的記憶體太少
我將伺服器從 Oracle 10g 更改為 11.2g 大約有一年時間(並且還將硬體和 Windows 從 2003R2 更改為 2012)。
問題是 CPU 功率增加了一倍以上,記憶體大約是 3 倍,磁碟速度更快,我的新伺服器比以前慢!!!我正在調查它,但擁有標準版一個許可證我沒有診斷包或其他東西……
聽起來我很糟糕的一件事是,在舊伺服器上,如果我將 SGA+PGA 記憶體設置為 16GB,oracle 會立即分配所有 16GB,我也可以在 Windows 任務管理器中檢查它。現在,我的 memory_target = memory_max_target = 20GB,但在 Windows 任務管理器中,oracle 使用的記憶體不超過 10GB。這怎麼可能?我可以強制它使用更多的記憶體嗎?
這是我的 pfile
SICOR .__ DB_CACHE_SIZE = 5796528128
SICOR .__ JAVA_POOL_SIZE = 58720256 SICOR .__ LARGE_POOL_SIZE = 12582912 SICOR
.__ PGA_AGGREGATE_TARGET =
12377391104
SICOR .__ SGA_TARGET = 9097445376
SICOR .__ shared_io_pool_size = 0 SICOR .__ SHARED_POOL_SIZE
= 3154116608
SICOR .__ STREAMS_POOL_SIZE = 25165824
.db_block_size = 8192
.distributed_lock_timeout = 300
*.job_queue_processes=1000
*.memory_max_target=21474836480
*.memory_target=21474836480
*.open_cursors=1500
*.parallel_automatic_tuning=FALSE
*.parallel_max_servers=80
*.parallel_servers_target=32
*.parallel_threads_per_cpu
=0 *.pga_11200.target
=
*.sessions=1325
*.sga_max_size=12884901888
*.sga_target=0
這是從 1 開始的 DB Cache Advice 的查詢
5536____682312__1_______39052864
5984____737528__0,9056__35366617
6528____804576__0,8461__33043015
7072____871624__0,8149__31825392
7616____938672__0,789___30813474
8160____1005720_0,766___29912665
8704____1072768_0,7442__29064260
9248____1139816_0,7219__28193363
9792____1206864_0,6997__27324768
10336___1273912_0,6778__26468501
10880___1340960_0,6558__25610722
所以看起來加倍記憶體會顯著提高性能..
如何設置它以使用至少 24-28GB 的記憶體?謝謝
預設情況下,Oracle 不會預先分頁 SGA,這意味著當您啟動數據庫實例時,它最初不會佔用所有記憶體,直到它需要它。
請參閱http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams201.htm#REFRN10174。
我會試試這個:
- 設置 memory_target = memory_max_target = 24GB。
- 去掉 init 參數中的 sga_max_size、sga_target、pga_aggregate_target,除非某些瘋狂的供應商應用程序特別需要(換句話說,讓 11g AMM 來代替它)。
- 還要從 pfile 中清除 db_cache_size。您基本上將記憶體限制為 5.4 GB。
- 反彈實例。
- 用幾個小時/幾天的工作負載來擊敗它(SQL 查詢、收集統計資訊、重建索引、RMAN 備份、expdp)。
- 檢查任務管理器的記憶體使用率。
取消設置 sga_max_size。
sicor.__db_cache_size
是自動記憶體管理 (AMM) 使用的最後一個值。雖然您可以從 pfile 中清除它,但 Oracle 會將其放回原處。您在啟動時看到的 9GB 記憶體分配是sicor.__sga_target
(9097445376),它應該大致是這些sicor.__*_size
值的總和。即使設置了
sga_*
,pga_*
等參數 unset 和 pre_page_sga 設置,Oracle 也不會在啟動時分配 memory_max_target。一些空間是為 PGA 保留的,直到需要時才分配。您還應該刪除 pga_aggregate_target=0 ,除非您特別需要這樣設置:
將 PGA_AGGREGATE_TARGET 設置為 0 會自動將 WORKAREA_SIZE_POLICY 參數設置為 MANUAL。這意味著使用 *_AREA_SIZE 參數調整 SQL 工作區的大小。