優化邏輯Standby的資料同步效能

靜以致遠√團團發表於2014-03-11

一、調整APPLIER程式數:

 

檢視一下當前的空閒APPLIER程式情況:

v$logstdby_process顯示standby端的程式使用情況

SQL> select * from v$logstdby_process where type='APPLIER' and status_code=16166;

no rows selected

 

其中status_code=16166表示該程式是空閒程式

沒有返回結果,有兩種可能:一方面,可能是因為當前沒有需要應用的日誌,沒有啟動應用程式;另一方面就是當前的應用非常繁忙,需要DBA去增減APPLIER程式。

 

檢查事物的應用情況:

 

SQL> select name,value from v$logstdby_stats where name like 'transactions%';

NAME                 VALUE

-------------------- --------------------

transactions ready    25

transactions applied  25

 

將兩個值想減(ready-applied),如果該值超出空閒APPLIER的程式兩倍,則說明APPLIER的值太少,需要天劍APPLIER的程式數; 反之如果該值比空閒APPLIER的程式數小的多,則證明APPLIER的程式數過多,可以適量的減少APPLIER的程式數

 

檢視當前啟動的APPLIER的程式數:

SQL> select count(*) from v$logstdby_process where type='APPLIER';

  COUNT(*)

----------

         5

設定APPILER的程式數:

SQL> alter database stop logical standby apply;

Database altered.

 

SQL> exec dbms_logstdby.apply_set('APPLY_SERVERS',10)

PL/SQL procedure successfully completed.

啟動SQL應用,並檢視程式的設定:

SQL> alter database start logical standby apply immediate;

Database altered.

 

SQL> select count(*) from v$logstdby_process where type='APPLIER';

  COUNT(*)

----------

        10

SQL> select * from v$logstdby_stats where name='number of appliers';

NAME                 VALUE

-------------------- --------------------

number of appliers   10

 

二、調整PREPAPER的程式數目

PREPAPER程式將接受到的REDO資料中的塊修改轉換成LCRsLogical Change Records),當APPLIER程式有空閒程式,而Transactions Ready還很多,簡單的說就是“供不應求”的時候,需要加大供給,適當的增大PREPAPER程式數。

 

檢查空閒的PREPARER程式數

SQL> select count(*) from v$logstdby_process 

  2  where type='PREPARER' and status_code=16166

  3  /

 

  COUNT(*)

----------

         0

APPLIER程式相似,該查詢結果為0並不代表沒有空閒的PREPARER程式,也可能是當前沒有REDO資料需要處理

 

調整PREPARER程式數的方法:

 

檢視當前的PERPARER程式數

 

SQL> select * from v$Logstdby_stats where name='number of preparers';

NAME                 VALUE

-------------------- --------------------

number of preparers  1

或者:

SQL> select count(*) from v$logstdby_process where type='PREPARER';

  COUNT(*)

----------

         1

停止SQL應用並設定PREPARER程式數:

 

SQL> alter database stop logical standby apply;

Database altered.

 

SQL> exec dbms_logstdby.apply_set('PREPARE_SERVERS',3);

PL/SQL procedure successfully completed.

 

啟動SQL應用,並檢視新的PREPARER程式數目:

 

SQL> alter database start logical standby apply immediate;

Database altered.

 

SQL> select * from v$logstdby_stats where name='number of preparers';

NAME                 VALUE

-------------------- --------------------

number of preparers  3

 

SQL> select count(*) from v$logstdby_process where type='PREPARER';

  COUNT(*)

----------

         3

 

三、調戲LCR使用的記憶體:

 

LCR中儲存的是轉換後的塊修改的記錄,這部分資料儲存在SGA

 

檢視當前LCR可用的最大記憶體:(顯示單位為MB

SQL> select * from v$logstdby_stats where name like '%SGA%LCR%';

NAME                           VALUE

------------------------------ --------------------

maximum SGA for LCR cache      30

 

調整LCR大小的步驟:

 

SQL> alter database stop logical standby apply;

Database altered.

 

SQL> exec dbms_logstdby.apply_set('MAX_SGA',50)

PL/SQL procedure successfully completed.

 

SQL> alter database start logical standby apply immediate;

Database altered.

 

檢視調整後的LCR最大記憶體:

SQL> select * from v$logstdby_stats where name like '%SGA%LCR%';

NAME                           VALUE

------------------------------ --------------------

maximum SGA for LCR cache      50

 

四、調整事物應用方式:

 

預設情況下邏輯Standby端的事物順序與primary資料庫提交的事物順序是一樣的;

設定邏輯Standby的書屋順序不按primary資料庫順序執行:

SQL> alter database stop logical standby apply;

Database altered.

 

SQL> exec dbms_logstdby.apply_set('PRESERVE_COMMIT_ORDER', 'FALSE');

PL/SQL procedure successfully completed.

 

SQL> alter database start logical standby apply immediate;

Database altered.

 

恢復邏輯Standby資料庫的事物執行順序:

 

SQL> exec dbms_logstdby.apply_unset('PRESERVE_COMMIT_ORDER')

PL/SQL procedure successfully completed.

 

SQL> alter database start logical standby apply immediate;

Database altered.

 

-----EDN-----

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-1107828/,如需轉載,請註明出處,否則將追究法律責任。

相關文章