Oracle dg同步中断,Oracle DG 逻辑Standby数据同步性能优化

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进程数:

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

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

maximum SGA for LCR cache                              30

显示的参数值默认单位为M,当前结果显示LCR内存区可用空间为30M。

要增加LCR可用的内存,可按照下列步骤操作。

1) 首先还是需要停止SQL应用:

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

Database altered.

2) 调整内存大小为100M:

SQL> EXEC DBMS_LOGSTDBY.APPLY_SET('MAX_SGA',100);

PL/SQL procedure successfully completed.

3)最后重启SQL应用即可

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

Database altered.

4、调整事务应用方式

在默认情况下逻辑Standby端事务应用顺序与Primary数据库提交顺序相同。如果DBA希望逻辑Standby端事务应用不按照Primary数据库顺序执行的话,可以按照下列步骤操作:

1)停止SQL应用:

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

2)允许事务不按照Primary的提交顺序应用:

SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('PRESERVE_COMMIT_ORDER', 'FALSE');

3)重新启动SQL应用:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

恢复逻辑Standby按照事务提交顺序应用的话,可按照下列步骤操作:

1)先停止SQL应用:

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

2)重置参数PRESERVE_COMMIT_ORDER的初始值:

SQL> EXECUTE DBMS_LOGSTDBY.APPLY_UNSET('PRESERVE_COMMIT_ORDER');

3)重新启动SQL应用:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值