在生產(chǎn)環(huán)境的EM檢查ADDM,最近總會(huì)看到增加SGA大小的建議,當(dāng)前SGA是4G,決定根據(jù)建議提高到5G。
環(huán)境:
雙節(jié)點(diǎn)RAC環(huán)境,節(jié)點(diǎn)1 pdmcn1節(jié)點(diǎn)2pdmcn2
數(shù)據(jù)庫(kù) pdmcn 實(shí)例1 pdmcn1 實(shí)例2 pdmcn2
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
CRS 10.2.0.4.0
32G內(nèi)存
注意:在RAC環(huán)境下修改 SGA一定是要指定實(shí)例逐個(gè)修改,sga_max_size是允許分配的最大的SGA大小,本次設(shè)置為8G,以為是靜態(tài)參數(shù)所以要修改spfile并重啟實(shí)例,sga_target是當(dāng)前要分配的SGA大小根據(jù)ADDM的建議到5G,這是個(gè)動(dòng)態(tài)參數(shù)可以動(dòng)態(tài)修改。
一、修改操作系統(tǒng)內(nèi)核參數(shù)
A、節(jié)點(diǎn)1
[root@pdmcn1 ~]# vi /etc/sysctl.conf
kernel.shmall = 4194304 #即支持最大16G共享內(nèi)存段可用,我們這次要設(shè)置最大SGA為8G,所以要修改這個(gè)參數(shù)。
[root@pdmcn1 ~]# sysctl -p #生效修改
B、節(jié)點(diǎn)2
[root@pdmcn2~]# vi /etc/sysctl.conf
kernel.shmall = 4194304 #即支持最大16G共享內(nèi)存段可用,我們這次要設(shè)置最大SGA為8G,所以要修改這個(gè)參數(shù)。
[root@pdmcn2 ~]# sysctl -p #生效修改
關(guān)于shmall的一點(diǎn)補(bǔ)充:
kernel.shmall
該參數(shù)控制系統(tǒng)一次可以使用的共享內(nèi)存總量(以頁(yè)為單位,一頁(yè)4k=4098),這個(gè)值的設(shè)定需要根據(jù)kernel.shmmax 大小來(lái)確定
kernel.shmall = 2097152 就是 2097152*4098= 8G 即最大一次可用8G的內(nèi)存(這個(gè)在調(diào)整SGA時(shí)需要注意,SGA大小設(shè)置不可超過該值)
該值默認(rèn) 2097152 ,但根據(jù)系統(tǒng)內(nèi)存大小和使用的不同可以參考如下:
kernel.shmall = 2097152 ---內(nèi)存8G
kernel.shmall = 4194304 ---內(nèi)存16G
kernel.shmall = 8388608 ---內(nèi)存32G
二、修改SGA
A、修改實(shí)例2的SGA
檢查實(shí)例
[oracle@pdmcn2 ~]$ srvctl status database -d pdmcn
Instance pdmcn1 is running on node pdmcn1
Instance pdmcn2 is running on node pdmcn2
確定各個(gè)實(shí)例均運(yùn)行正常
開始關(guān)閉實(shí)例2
[oracle@pdmcn2 ~]$ srvctl stop instance -d pdmcn -i pdmcn2
檢查實(shí)例
[oracle@pdmcn2 ~]$srvctl status database -d pdmcn
Instance pdmcn1 is running on node pdmcn1
Instance pdmcn2 is not running on node pdmcn2
確定實(shí)例2已關(guān)閉
確定一個(gè)數(shù)據(jù)庫(kù)實(shí)例時(shí)候業(yè)務(wù)正常
db 2上啟動(dòng)數(shù)據(jù)庫(kù)到mount狀態(tài)
[oracle@pdmcn2 ~]srvctl start instance -d pdmcn -i pdmcn2 -o mount
修改實(shí)例2的sga_max_size到8G
修改db2的sga_target到5G
[oracle@pdmcn2 ~]$ sqlplus / as sysdba
ALTER SYSTEM SET sga_max_size = 8589934592 COMMENT='internally adjusted' SCOPE=SPFILE SID='pdmcn2'
System altered.
ALTER SYSTEM SET sga_target = 5368709120 SCOPE=SPFILE SID='pdmcn2'
System altered.
關(guān)閉實(shí)例2
srvctl stop instance -d pdmcn-i pdmcn2
啟動(dòng)實(shí)例2
srvctl start instance -d pdmcn-i pdmcn2 open
查看實(shí)例2的SGA信息
[oracle@wtdb2 ~]$ sqlplus / as sysdba
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 8G
sga_target big integer 5G
SGA修改成功
B、修改實(shí)例1的SGA
關(guān)閉實(shí)例1
[oracle@wtdb1 ~]$ srvctl stop instance -d pdmcn -i pdmcn1
檢查實(shí)例狀態(tài)
[oracle@wtdb1 ~]$ srvctl status database -d pdmcn
Instance pdmcn1 is not running on node pdmcn1
Instance pdmcn2 is running on node pdmcn2
確定實(shí)例1已經(jīng)關(guān)閉
db1上啟動(dòng)數(shù)據(jù)庫(kù)到mount狀態(tài)
srvctl start instance -d pdmcn -i pdmcn1 -o mount
修改實(shí)例1的sga_max_size到8G
修改db2的sga_target到5G
[oracle@pdmcn2 ~]$ sqlplus / as sysdba
ALTER SYSTEM SET sga_max_size = 8589934592 COMMENT='internally adjusted' SCOPE=SPFILE SID='pdmcn1'
System altered.
ALTER SYSTEM SET sga_target = 5368709120 SCOPE=SPFILE SID='pdmcn1'
System altered.
關(guān)閉實(shí)例1
srvctl stop instance -d pdmcn -i pdmcn1
啟動(dòng)實(shí)例1
srvctl start instance -d pdmcn -i pdmcn1 -o open
查看實(shí)例1的SGA信息
[oracle@pdmcn1 ~]$ sqlplus / as sysdba
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 8G
sga_target big integer 5G
SGA修改成功
檢查數(shù)據(jù)庫(kù)狀態(tài)
[oracle@pdmcn1 ~]$ srvctl status database -d pdmcn
Instance pdmcn1 is running on node pdmcn1
Instance pdmcn2 is running on node pdmcn2
ok 全部正常