天天看點

RAC下修改SGA的實戰操作

       在生産環境的EM檢查ADDM,最近總會看到增加SGA大小的建議,目前SGA是4G,決定根據建議提高到5G。

       環境:

               Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

               CRS 10.2.0.4.0

               32G記憶體

        注意:在RAC環境下修改 SGA一定是要指定執行個體逐個修改,sga_max_size是允許配置設定的最大的SGA大小,本次設定為8G,以為是靜态參數是以要修改spfile并重新開機執行個體,sga_target是目前要配置設定的SGA大小根據ADDM的建議到5G,這是個動态參數可以動态修改。

一、修改作業系統核心參數

A、節點1

[root@pdmcn1 ~]# vi /etc/sysctl.conf

kernel.shmall = 4194304  #即支援最大16G共享記憶體段可用,我們這次要設定最大SGA為8G,是以要修改這個參數。

[root@pdmcn1 ~]# sysctl -p #生效修改

B、節點2

[root@pdmcn2~]# vi /etc/sysctl.conf

[root@pdmcn2 ~]# sysctl -p  #生效修改

關于shmall的一點補充:

kernel.shmall

該參數控制系統一次可以使用的共享記憶體總量(以頁為機關,一頁4k=4098),這個值的設定需要根據kernel.shmmax 大小來确定

kernel.shmall = 2097152  就是 2097152*4098= 8G 即最大一次可用8G的記憶體(這個在調整SGA時需要注意,SGA大小設定不可超過該值)

該值預設 2097152 ,但根據系統記憶體大小和使用的不同可以參考如下:

kernel.shmall = 2097152    ---記憶體8G

kernel.shmall = 4194304    ---記憶體16G

kernel.shmall = 8388608    ---記憶體32G

二、修改SGA

A、修改執行個體2的SGA

檢查執行個體

[oracle@pdmcn2 ~]$ srvctl status database -d pdmcn

Instance pdmcn1 is running on node pdmcn1

Instance pdmcn2 is running on node pdmcn2

确定各個執行個體均運作正常

開始關閉執行個體2

[oracle@pdmcn2 ~]$ srvctl stop instance  -d pdmcn -i pdmcn2

[oracle@pdmcn2 ~]$srvctl status database -d pdmcn

Instance pdmcn2 is not running on node pdmcn2

确定執行個體2已關閉

确定一個資料庫執行個體時候業務正常

db 2上啟動資料庫到mount狀态

[oracle@pdmcn2 ~]srvctl start instance -d pdmcn -i pdmcn2 -o mount

修改執行個體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'

關閉執行個體2

srvctl stop instance -d pdmcn-i pdmcn2

啟動執行個體2

srvctl start instance  -d pdmcn-i pdmcn2 open

檢視執行個體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、修改執行個體1的SGA

關閉執行個體1

[oracle@wtdb1 ~]$ srvctl stop instance -d pdmcn -i pdmcn1

檢查執行個體狀态

[oracle@wtdb1 ~]$ srvctl status database -d pdmcn

Instance pdmcn1 is not running on node pdmcn1

确定執行個體1已經關閉

db1上啟動資料庫到mount狀态

srvctl start instance -d pdmcn -i pdmcn1 -o mount

修改執行個體1的sga_max_size到8G

ALTER SYSTEM SET sga_max_size = 8589934592 COMMENT='internally adjusted' SCOPE=SPFILE SID='pdmcn1'

ALTER SYSTEM SET sga_target = 5368709120 SCOPE=SPFILE SID='pdmcn1'

srvctl stop instance -d pdmcn -i pdmcn1

啟動執行個體1

srvctl start instance  -d pdmcn -i pdmcn1 -o open

檢視執行個體1的SGA資訊

[oracle@pdmcn1 ~]$ sqlplus / as sysdba

檢查資料庫狀态

[oracle@pdmcn1 ~]$ srvctl status database -d pdmcn

ok 全部正常