logical standby上Sql Apply的进程个数和效率由三个参数控制:MAX_SERVERS,APPLY_SERVERS以及PREPARE_SERVERS。它们之间的值和关系遵循以下准则:
1. 三个参数设置推荐如下等式关系:
APPLY_SERVERS + PREPARE_SERVERS = MAX_SERVERS – 3
2. 参数默认设置如下:
- MAX_SERVERS=9
- PREPARE_SERVERS=1
- APPLY_SERVERS=5
3. Oracle建议通过DBMS_LOGSTDBY.APPLY_SET调整MAX_SERVERS的值
4. sql apply进程通常照以下规则进行分配:
- 每20个服务进程分配一个为PREPARE_SERVE,其余进程为Applyer
- RPREPARE_SERVER最大值为5
比如,设置max_servers在1~20之间,则分配一个进程作为PREPARER,其余进程作为applers;如果max_servers值在21~40之间,则分配2个进程作为PREPARER,其余进程作为applers。
如何合理调整apply的进程数目呢?
调整apply的进程需要参考apply的表现,apply进程过多浪费系统资源,过少则影响apply的效率。对于生产系统来说,可以参照业务压力最大时的apply表现调整apply进程个数。方法如下:
1. 统计transactions的apply状态,使用如下sql:
SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS WHERE NAME LIKE 'transactions%'; |
Oracle Concepts给的建议:
如果transactions ready(ready to be applied)减去 transactions applied(have been applied)的差比APPLIER进程数的2倍还多,则需要增加APPLIER进程数目。
2. Logical Standby上apply进程相关的sql语句
查看logical standby节点apply进程状态
select sid,type,status_code,status from v$logstdby_process;
查看applyer进程的个数
SELECT COUNT(*) AS APPLIER_COUNT FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'APPLIER';
查看空闲的applyer进程
SELECT COUNT(*) AS IDLE_APPLIER FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'APPLIER' and status_code = 16166;
3. 调整apply进程数目
- 调整apply进程数目建议依据公式APPLY_SERVERS + PREPARE_SERVERS = MAX_SERVERS – 3
- 修改apply进程数目要停止logical standby上的apply操作后进行
比如:调整APPLY_SERVERS为20,则PREPARE_SERVERS=1,MAX_SERVERS=24,操作步骤如下:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; |
参考文档:《Managing a Logical Standby Database》
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/110321/viewspace-612668/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/110321/viewspace-612668/