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
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, select
, 应用
, 进程
, 当前
调整
oracle 逻辑standby、逻辑standby、oracle standby、oracle 物理standby、oracle standby 模式,以便于您获取更多的相关知识。