Oracle 11g AMM與ASMM切換
現在的Oracle正在往智慧化方向發展。如果我們現在找一些8i/9i時代的Oracle書籍,怎麼樣配置合適的資料庫各記憶體池大小是非常重要的話題。但是進入10g之後,自動記憶體池調節成為一個重要Oracle特性。
在10g時,Oracle推出了ASMM(Automatic Shared Memory Management),實現了Oracle SGA和PGA內部結構的自調節。進入11g之後,AMM(Automatic Memory Management)實現了引數MEMORY_TARGET,將SGA和PGA的規劃全部統籌起來對待。
預設情況下,Oracle 11g是使用AMM的。我們在安裝過程中,指定Oracle使用記憶體的百分比,這個取值就作為MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果這兩個引數設定為非零取值,那麼Oracle就是採用AMM管理策略的。
同時,如果我們設定這兩個引數為0,則AMM自動關閉。對應的SGA_TARGET、PGA_AGGREGATE_TARGET引數取值非零之後,Oracle自動退化使用ASMM特性。
本篇簡單介紹一下AMM和ASMM的相互切換。
1、實驗環境介紹
我們選擇11.2.0.3進行試驗,當前狀態為ASMM。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
當前MEMORY_TARGET設定為零,AMM沒有啟用。
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 0
memory_target big integer 0
parallel_servers_target integer 16
pga_aggregate_target big integer 108M
sga_target big integer 252M
2、從ASMM到AMM
在11g中,如果使用ASMM,對應的記憶體共享段是真實的共享段。
[oracle@SimpleLinux ~]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 32768 oracle 640 4194304 32
0x00000000 65537 oracle 640 260046848 32
0x01606d30 98306 oracle 640 4194304 32
下面進行引數的調整,這裡筆者有一個建議,很多時候啟動umount階段故障都是由於不當的引數修改造成的。在進行引數修改之前,可以使用create pfile進行一下引數備份,可以加快故障出現時候的系統修復速度。
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/dbs/spfileora11g.ora
SQL> create pfile from spfile;
Done
修改系統引數,將sga和pga的target值設定為0,memory的target設定非0。注意,這個過程很多引數是靜態的引數,可以都在spfile可見性中進行修改,之後重啟伺服器生效。
SQL> alter system set memory_max_target=360m scope=spfile;
System altered
SQL> alter system set memory_target=360m scope=spfile;
System altered
SQL> alter system set sga_target=0m scope=spfile;
System altered
SQL> alter system set sga_max_size=0 scope=spfile;
System altered
SQL> alter system set pga_aggregate_target=0 scope=spfile;
System altered
重新啟動資料庫伺服器,檢視引數配置。
SQL> conn / as sysdba
Connected.
SQL> startup force
ORACLE instance started.
Total System Global Area 263651328 bytes
Fixed Size 1344284 bytes
Variable Size 176164068 bytes
Database Buffers 83886080 bytes
Redo Buffers 2256896 bytes
Database mounted.
Database opened.
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 360M
memory_target big integer 360M
parallel_servers_target integer 16
pga_aggregate_target big integer 0
sga_target big integer 0
AMM啟動之後,系統共享段變為“虛擬”共享段。
[oracle@SimpleLinux dbs]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 163840 oracle 640 4096 0
0x00000000 196609 oracle 640 4096 0
0x01606d30 229378 oracle 640 4096 0
3、從AMM到ASMM
下面是如何從AMM到ASMM。要完全關閉AMM,一定將MEMORY_TARGET和MEMORY_MAX_TARGET都設定為0才行。
SQL> alter system set memory_max_target=0 scope=spfile;
System altered
SQL> alter system set memory_target=0 scope=spfile;
System altered
SQL> alter system set pga_aggregate_target=100m scope=spfile;
System altered
SQL> alter system set sga_target=260m scope=spfile;
System altered
SQL> alter system set sga_max_size=260m scope=spfile;
System altered
注意,此時如果重新啟動系統,會報錯。
SQL> startup force
ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account
ORA-00849: SGA_TARGET 272629760 cannot be set to more than MEMORY_MAX_TARGET 0.
SQL>
這個問題的原因是Oracle啟動過程中對於引數的內部檢查。因為MEMORY_MAX_TARGET被“顯示”的賦值,與SGA_TARGET賦值相沖突。
解決的方法就是使用引數預設值。建立出pfile之後,將顯示賦值為0的MEMORY_TARGET和MEMORY_MAX_TARGET記錄行刪除掉。再利用pfile啟動資料庫,重建spfile。
SQL> create pfile from spfile
2 ;
File created.
--修改前
*.db_recovery_file_dest='/u01/app/fast_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.diagnostic_dest='/u01/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11gXDB)'
*.log_checkpoints_to_alert=TRUE
*.memory_max_target=0
*.memory_target=0
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=150
--修改後
*.db_recovery_file_dest='/u01/app/fast_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.diagnostic_dest='/u01/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11gXDB)'
*.log_checkpoints_to_alert=TRUE
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
使用pfile啟動資料庫,重建spfile。
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup pfile=/u01/app/oracle/dbs/initora11g.ora
ORACLE instance started.
Total System Global Area 272011264 bytes
Fixed Size 1344372 bytes
Variable Size 176163980 bytes
Database Buffers 88080384 bytes
Redo Buffers 6422528 bytes
Database mounted.
Database opened.
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 0
memory_target big integer 0
parallel_servers_target integer 16
pga_aggregate_target big integer 100M
sga_target big integer 260M
SQL> create spfile from pfile
2 ;
File created.
重新啟動之後,ASMM切換完成。
SQL> startup force
ORACLE instance started.
Total System Global Area 272011264 bytes
Fixed Size 1344372 bytes
Variable Size 176163980 bytes
Database Buffers 88080384 bytes
Redo Buffers 6422528 bytes
Database mounted.
Database opened.
--真實的共享記憶體段結構
[oracle@SimpleLinux dbs]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 425984 oracle 640 8388608 25
0x00000000 458753 oracle 640 264241152 25
0x01606d30 491522 oracle 640 4194304 25
--HugePage使用情況
[oracle@SimpleLinux dbs]$ grep Huge /proc/meminfo
HugePages_Total: 67
HugePages_Free: 1
HugePages_Rsvd: 0
Hugepagesize: 4096 kB
[oracle@SimpleLinux dbs]$
4、結論
AMM和ASMM是我們管理資料庫非常重要的工具,藉助自我調節的機制,我們可以做到資料庫自我管理。11g的AMM應該說是很方便的,但是在一些情況下,如HugePage,我們可能需要切換回ASMM。權當記錄,留需要的朋友待查。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9950964/viewspace-1572049/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE AMM 、ASMM 、自動記憶體管理(官方手冊)OracleASM記憶體
- oracle 11g datagurd主從切換Oracle
- Oracle 11g dg switchover切換操作流程Oracle
- Oracle 11g 一主多備切換方案Oracle
- oracle 11g dg broker 開啟fast-start failover自動故障切換OracleASTAI
- OracleASM關閉AMM,開啟ASMM,修改引數後報ORA-00843 ORA-00849OracleASM
- oracle dg切換操作示例Oracle
- EDBPPAS(Oracle相容版)Oracle與PostgreSQL相容模式的引數配置切換OracleSQL模式
- Oracle RAC DG手動切換Oracle
- Oracle Temp 表空間切換Oracle
- oracle11g dataguard切換Oracle
- EDB PPAS(Oracle 相容版) Oracle與PostgreSQL 相容模式的引數配置切換OracleSQL模式
- Oracle 單機切換為主備Oracle
- Oracle DataGuard 主備切換 (switchover) oracle11gOracle
- ORACLE線上切換undo表空間Oracle
- Oracle ADG 自動切換指令碼分享Oracle指令碼
- Oracle 11.2.0.4 physical dataguard和snapshot dataguard切換Oracle
- git建立與切換分支Git
- 5分鐘,徹底精通Oracle DG切換Oracle
- 14. ORACLE到MYSQL上線切換方式OracleMySql
- Oracle切換undo表空間操作步驟Oracle
- Oracle資料庫歸檔模式的切換ELOracle資料庫模式
- 檢視Oracle的redo日誌切換頻率Oracle
- Oracle 11g R2 備份與恢復Oracle
- Oracle之11g DataGuardOracle
- 程式切換(上下文切換)
- Oracle 18c&19c physical dg切換總結Oracle
- 【DATAGUARD】Oracle Dataguard物理備庫切換最佳實踐(sqlplus)OracleSQL
- 檢視oracle的redo日誌組切換頻率Oracle
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- benchmark 壓測Oracle 11gOracle
- sysbench壓測Oracle 11gOracle
- Oracle 11G 安裝文件Oracle
- openGauss主備切換之switchover與failoverAI
- redhat7 搭建oracle 11g RAC 問題與處理RedhatOracle
- ORACLE 12C DATAGUARD環境搭建和主從切換Oracle
- 棧切換
- Oracle 11G 修改scan_ipOracle