Oracle資料庫記憶體管理
一、Oracle資料庫記憶體管理概念:
記憶體管理涉及到根據資料庫變化的需要為Oracle實體記憶體結構保持最佳大小,Oracle資料庫根據與記憶體相關的初始化引數的設定來管理記憶體,
記憶體管理有三種基本方式:
AMM (自動記憶體管理)
Automatic memory management:
- 指定實體記憶體的目標大小,資料庫實體自動調整到目標記憶體大小,根據需要在SGA和實體PGA之間重新分配記憶體
ASMM (自動共享記憶體管理)
Automatic shared memory management:
- 這種管理模式是部分自動化的,為SGA設定目標大小,然后可以選擇為PGA設定聚合目標大小或單獨管理PGA作業區
Manual memory management(手動記憶體管理)
- 不是設定總記憶體大小,而是設定許多初始化引數來分別管理SGA和實體PGA的組件
如果使用資料庫配置助手(DBCA)創建資料庫并選擇基本安裝選項,則默認為AMM(自動記憶體管理)
二、記憶體管理方式的切換:
MEMORY_TARGET :
作業系統上 Oracle 所能使用的最大記憶體值(動態引數),是PAG 和SGA的總和,
1、AMM(自動記憶體管理)
memory_target=非0,如果初始化引數 LOCK_SGA = true ,則 AMM 是不可用的
2、ASMM (自動共享記憶體管理)
memory_target=0 and sga_target=非0
3、Manual memory management(手動記憶體管理)
memory_target=0 and sga_target=0,指定 share_pool_size 、db_cache_size 等 sga 引數
在設定memory_target與memory_max_target 需注意注意以下三點:
- 若指定了
memory_target而沒有指定memory_max_target重啟后,memory_max_target和memory_target大小相等; - 若指定了
memory_max_target而沒有指定memory_target,重啟后memory_target=0; - 若設定 memory_max_target < memory_target 時,則重啟后報錯(ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET),
三、修改實體sga與pga大小:
原理:登錄資料庫—>將memory_target與memory_max_target大小置為0—>修改sga、pga大小—>通過spfile指定路徑創建一個pfile—>修改pfile中sga_target等引數—>使用pfile啟動資料庫—>通過該pfile創建spfile—>關閉資料庫—>最后正常啟動資料庫即可
首先:創建spfile備份
SQL> create pfile='/u01/app/oracle/admin/orcl/pfile/pfile1.ora' from spfile;
File created.
SQL>
1、查看memory_target與memory_max_target大小:
SQL> show parameter memory
NAME TYPE VALUE
-------------------------------- ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>
#根據輸出的結果顯示 memory_max_target=0 與 memory_target=0 說明目前已經是 ASMM 模式直接修改sga與pga大小即可
2、(如果值非零) 修改memory_target與memory_max_target大小:
#如果memory_max_target非0 與 memory_target非0,使用下面命令將值改為0
1、修改memory_max_target大小:
SQL> alter system set memory_max_target=0 scope=spfile;
System altered.
2、修改memory_target大小(memory_target<=memory_max_target):
SQL> alter system set memory_target=0 scope=spfile;
System altered.
3、修改sga與pga大小:
1、修改sga大小:
SQL> alter system set sga_max_size=2560M scope=spfile;
System altered.
SQL> alter system set sga_target=2560M scope=spfile;
System altered.
2、修改pga大小:
SQL> alter system set pga_aggregate_target=650M scope=spfile;
System altered.
4、通過spfile創建pfile并關閉資料庫:
#創建路徑為:/u01/app/oracle/admin/orcl/pfile/
#創建的pfile檔案名為:pfile.ora
SQL> create pfile='/u01/app/oracle/admin/orcl/pfile/pfile.ora' from spfile;
File created.
SQL>
#關閉資料庫:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
5、作業系統中編輯pfile檔案:
#若在/u01/app/oracle/admin/orcl/pfile/pfile.ora檔案中存在memory_max_target與memory_target引數,屏蔽或洗掉即可,
vi /u01/app/oracle/admin/orcl/pfile/pfile.ora
orcl.__db_cache_size=2046820352
orcl.__java_pool_size=16777216
orcl.__large_pool_size=33554432
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=654311424 #實體orcl 建議pga=(物理記憶體 x 80%) x 20%,由memory_target自動管理
orcl.__sga_target=2566914048 #實體orcl 建議sga=(物理記憶體 x 80%) x 80%,由memory_target自動管理
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=436207616
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
#*.memory_max_target=0 #將memory_max_target屏蔽或洗掉
#*.memory_target=0 #將memory_target屏蔽或洗掉
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=681574400 #pga大小(alter system修改)
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1655
*.sga_max_size=2684354560 #sga_max_size大小(alter system修改)
*.sga_target=2684354560 #sga_target大小(alter system修改)
*.undo_tablespace='UNDOTBS1'
6、通過pfile啟動實體:
#通過pfile啟動資料庫實體:
SQL> startup pfile='/u01/app/oracle/admin/orcl/pfile/pfile.ora';
ORACLE instance started.
Total System Global Area 2672361472 bytes
Fixed Size 2256232 bytes
Variable Size 1073742488 bytes
Database Buffers 1577058304 bytes
Redo Buffers 19304448 bytes
Database mounted.
Database opened.
SQL>
7、查詢sga、pga等驗證:
#查看pga大小:
SQL> show parameter pga
NAME TYPE VALUE
------------------------------- ----------- ------------------------------
pga_aggregate_target big integer 650M #pga大小已經修改成功(原610M)
#查看sga大小:
SQL> show parameter sga
NAME TYPE VALUE
-------------------------------- ----------- -----------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 2560M #sga大小已經修改成功(原2450M)
sga_target big integer 2560M #sga大小已經修改成功(原2450M)
SQL> show parameter memory
NAME TYPE VALUE
------------------------------- ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>
8、通過pfile創建spfile并關閉資料庫:
SQL> create spfile from pfile='/u01/app/oracle/admin/orcl/pfile/pfile.ora';
File created.
SQL>
#關閉資料庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
9、使用startup啟動資料庫(默認使用spfile)
SQL> startup
ORACLE instance started.
Total System Global Area 2672361472 bytes
Fixed Size 2256232 bytes
Variable Size 1073742488 bytes
Database Buffers 1577058304 bytes
Redo Buffers 19304448 bytes
Database mounted.
Database opened.
#查看查詢驗證pga
SQL> show parameter pga
NAME TYPE VALUE
-------------------------------- ----------- ------------------------------
pga_aggregate_target big integer 650M #與修改結果一致
#查看查詢驗證sga
SQL> show parameter sga
NAME TYPE VALUE
-------------------------------- ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 2560M #與修改結果一致
sga_target big integer 2560M #與修改結果一致
SQL> show parameter memory
NAME TYPE VALUE
-------------------------------- ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>
sga與pga修改成功!
至此結束,有什么問題歡迎留言,謝謝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/282166.html
標籤:其他
上一篇:LeetCode:Database 02.求第N高的薪水
下一篇:機房重構之添加用戶
