1、調整APPLIER進程數
APPLIER進程就是執行應用操作的進程。在預設情況下邏輯Standby會啟動5個APPLIER進程,如果日誌應用任務繁重(或者說Primary資料庫修改量較大),則適當多啟動幾個APPLIER進程有助於提高應用的效率。
先查看當前閒置APPLIER進程數:
SQL> SELECT COUNT(*) AS IDLE_APPLIER FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'APPLIER' and status_code = 16166;
IDLE_APPLIER
------------
0
返回結果為0,難道都在忙?這個真不一定,閒置APPLIER進程數為0不一定代表應用非常繁忙,也有可能是因為當前沒什麼需要應用的日誌,甚至都沒啟動應用進程。
說 明: status_code=16166表示進程是空閑狀態,因為stats_code=16166對應的狀態說明列STATS為ORA-16116: no work available。
檢查事務的應用情況:
SQL> SELECT NAME,VALUE FROM V$LOGSTDBY_STATS WHERE NAME LIKE 'transactions%';
NAME VALUE
----- ---------------------------
trans 358
trans 358
如果ready-applied的值比APPLIER進程數的兩倍還要大,則說明DBA有必要考慮增加APPLIER進程的數目了,反之如果applied與ready的值差不多大,或者其差比APPLIER進程數還小,則說明APPLIER進程數偏多,DBA有必要考慮適當減小進程的數目。
如果確認當前APPLIER進程都非常繁忙,要增加APPLIER進程,可按如下步驟操作:
1) 停止邏輯Standby端的SQL應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
2) 執行下列語句,調整APPLIER進程數為10:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('APPLY_SERVERS',10);
PL/SQL procedure successfully completed.
3) 重新啟動SQL應用:
JSSLDG> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.
4) 查出的就是當前啟動並執行APPLIER進程數:
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/
SQL> SELECT COUNT(0) FROM V$LOGSTDBY_PROCESS WHERE TYPE='APPLIER';
COUNT(0)
----------
10
也可以通過V$LOGSTDBY_STATS視圖查詢,例如:
SQL> SELECT * FROM V$LOGSTDBY_STATS WHERE NAME='number of appliers';
NAME VALUE
----- ----------------------------------------------------------------
numbe 10
2、調整PREPARER進程數
PREPAPER進程將接收到的REDO資料中的塊修改轉換成LCRs(Logical Change Records)。一般需要調整PREPAPER進程數的機會不多,通常只有一種情況:APPLIER進程有空閑,Transactions Ready還很多,但沒有閒置PREPAPER進程,這時候DBA可能就需要增加一些PREPAPER進程。
先檢查空閑PREPAPER進程數量:
SQL> SELECT COUNT(*) AS IDLE_PREPARER FROM V$LOGSTDBY_PROCESS
WHERE TYPE = 'PREPARER' and status_code = 16166;
IDLE_PREPARER
-------------
0
說 明:如果顯示為0,別怕,也有可能是因為當前沒什麼新的REDO資料需要處理。
如果確實需要調整PREPAPER進程數量,可以按照下列步驟進行。
首先停止SQL應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
調整PREPAPER進程數量為4(預設只有1個PREPAPER進程):
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('PREPARE_SERVERS',4);
PL/SQL procedure successfully completed.
重新啟動SQL應用即可:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.
查看當前啟動的PREPAPER進程數, 查詢V$LOGSTDBY_STATS視圖,例如:
SQL> SELECT * FROM V$LOGSTDBY_STATS WHERE NAME='number of preparers';
NAME VALUE
----- ----------------------------------------------------------------
numbe 4
3、調整LCR使用的記憶體
LCR中儲存的是轉換後的塊修改的記錄,這部分資料儲存在SGA中。
查詢當前LCR可用的最大記憶體:
SQL> SELECT * FROM V$LOGSTDBY_STATS WHERE NAME='maximum SGA for LCR cache';
NAME VALUE