Q复制性能考量与错误处理
1. Q复制环境组件概述
Q复制环境主要由四个关键组件构成,分别是DB2数据库层(包含源数据库和目标数据库)、WebSphere MQ、Q Capture和Q Apply。对这些组件进行调优,能够提升Q复制的性能。
1.1 DB2数据库层调优
对于DB2源数据库或目标数据库,其调优操作与常规数据库调优一致。不过,由于设置了
DATA CAPTURE CHANGES
,DB2日志空间的需求可能会增加。同时,需要对复制控制表执行
RUNSTATS
和
REORGS
操作,将这些表视为普通应用表处理。
1.2 WebSphere MQ层调优
在WebSphere MQ层,队列的
MAXDEPTH
参数很关键。若增加该参数值,需确保为WebSphere MQ分配了足够的磁盘空间以处理相应数量的消息。另外,队列管理器参数
MAXUMSGS
表示可在队列上放置或检索的最大未提交消息数。当更改Q Capture的
commit_interval
参数时,可能需要增加
MAXUMSGS
值。若达到该限制,Q Capture尝试将事务放入发送队列时,
MQPUT
操作会失败,错误代码为2024(Syncpoint Limit Reached)。此时,Q Capture可选择提交已完成的操作或回滚。在Q Capture日志中会出现类似如下的错误信息:
<qConnMgr::putRestartMsg> ASN0575E "Q Capture" : "ASN" :
"WorkerThread" : The program encountered a WebSphere MQ error "2024"
while issuing the WebSphere MQ command "MQPUT" on queue "CAPA.
RESTARTQ".
1.3 Q Capture调优
可对Q Capture性能进行调优的参数包括
commit_interval
、
memory_limit
、
sleep_interval
和
max_msg_size
:
-
commit_interval
:指定Q Capture将事务提交到WebSphere MQ的时间间隔(毫秒)。
-
memory_limit
:指定Q Capture在内存中构建DB2事务时可使用的内存量。默认值32 MB适用于大多数工作负载。若Q Capture将事务溢出到磁盘,可尝试增加该值。可通过查看
IBMQREP_CAPMON
表中的
TRANS_SPILLED
列,若值大于零,则需增加内存限制。
-
sleep_interval
:指定Q Capture到达活动日志末尾并组装内存中剩余事务后等待的毫秒数。默认情况下,Q Capture会休眠5000毫秒(5秒),之后再次开始读取日志。较小的
sleep_interval
可降低延迟、减少空闲时间,并在高事务量环境中提高吞吐量。
-
max_msg_size
:确定Q Capture为每个发送队列使用的内存缓冲区大小。该参数在包含发送队列的发布队列映射或复制队列映射中设置。事务在内存中构建完成后,Q Capture使用
max_msg_size
参数确定要发布的消息大小。若事务字节大小大于最大消息大小,事务将被拆分为较小的消息。该参数还决定了Q Apply将看到的最大消息大小。对于LOB数据,较小的最大消息大小可能会因需要更频繁地更新目标表来复制整个LOB值而降低Q Apply性能。
若系统CPU资源受限,还需关注
monitor_interval
和
pruning_interval
参数。
1.4 Q Apply调优
若让Q Apply处理表的初始加载,它会在加载过程中将所有事务保存在磁盘的溢出文件中,因此需确保有足够的磁盘空间。确定磁盘空间大小时,需了解加载过程中要存储的行数,这并非易事。
num_apply_agents
参数是按接收队列分配的,在创建复制队列映射时设置。它表示Q Apply用于从接收队列并发应用事务的代理线程数。值为1时,请求按从源表接收的顺序执行事务,默认值为16。
2. 常见错误消息及处理方法
2.1 Q Capture启动时的ASN0569E错误
若启动Q Capture时出现
ASN0569E
启动错误
SIGSEGV
,意味着未启动队列管理器,可使用命令
$ strmqm <QMname>
启动。
2.2 Q Capture的ASN7094E错误
以下是Q Capture日志中显示该错误的示例:
2006-02-15-08.52.43.441000 ASN7094E "Q Capture" : "ASN" :
"WorkerThread" : The "P2PSUBSTOPPING" signal failed because the XML
publication or Q subscription "T10001" has an invalid subtype "B" or
an invalid state "G".
可通过以下命令将Q订阅的
ASN.IBMQREP_SUBS
列
STATE
更新为
N
:
$ db2 connect to db2a
$ db2 "UPDATE asn.ibmqrep_subs SET state = 'N' WHERE subname = 'T10001'"
$ db2 "update asn.ibmqrep_subs set state = 'N' where subname = 'T30001'"
$ db2 connect to db2b
$ db2 "UPDATE asn.ibmqrep_subs SET state = 'N' WHERE subname = 'T30002'"
$ db2 "update asn.ibmqrep_subs set state = 'N' where subname = 'T10002'"
2.3 Q Apply启动时挂起问题
启动Q Apply时,若仅看到如下消息:
ASN0600I "Q Apply" : "" : "Initial" : Program "mqapply 9.1.0" is
starting.
而未看到
ASN7526I
消息(表示Q Apply已开始处理接收队列),可能是Q Apply需要读取的接收队列为非活动状态。可通过以下查询检查每个接收队列的
STATE
:
$ db2 "SELECT SUBSTR(repqmapname,1,12) AS rqm, SUBSTR(recvq,1,20)
AS recvq, SUBSTR(sendq,1,20) AS sendq, SUBSTR(adminq,1,20) AS
adminq, SUBSTR(capture_server,1,5) AS caps, capture_alias AS capal,
SUBSTR(capture_schema,1,10) AS capschema, state FROM asn.ibmqrep_
recvqueues "
若
STATE
列的值为
I
(表示非活动),可使用以下命令启动接收队列:
$ asnqacmd APPLY_SERVER=tgtdb STARTQ='TGT.RECVQ'
若Q Apply无法处理队列上的消息,且在设置Q订阅时指定停止从接收队列读取消息,接收队列将停止。若使用复制中心,该操作在步骤7中选择;若使用ASNCLP命令,在为
ERROR ACTION
参数赋值时选择。
ERROR ACTION
参数可能的值如下:
-
S
:停止Q Apply,不应用事务。
-
D
:禁用订阅并通知Q Capture。
-
Q
:停止从接收队列读取消息。
可通过以下查询检查
ERROR ACTION
参数的值:
$ db2 "select SUBSTR(subname,1,20) AS subname, SUBSTR(recvq,1,30) AS
recvq, conflict_rule AS r, conflict_action AS a, error_action AS e, has_
loadphase AS l, CAST(load_type AS CHAR) AS t FROM asn.ibmqrep_targets"
2.4 处理ASN7551E消息
这是一个常见问题,帮助文件列出了需要执行的五个任务,具体步骤如下:
1. 使用
stopq
命令停止Q Apply从接收队列读取消息:
$ asnqacmd APPLY_SERVER=db2b STOPQ='CAPA.TO.APPB.RECVQ'
-
停用此复制队列映射的所有Q订阅:
- 使用步骤1中的接收队列获取RQM名称。
- 可使用相关查询获取特定接收队列的RQM。
- 可使用相关查询获取使用该RQM的Q订阅列表。
- 清空发送队列和接收队列,具体操作可参考WebSphere MQ的相关章节。
-
使用
startq命令让Q Apply恢复从接收队列读取消息,具体操作可参考Q Apply管理章节。 - 激活此复制队列映射的所有Q订阅,具体操作可参考Q订阅维护章节。
2.5 Q Apply的ASN7094E错误
当尝试发出不适合Q订阅或发布的信号时,会出现此错误。例如:
2005-04-02-02.37.43.821590 ASN7094E "Q Capture" : "ASN" :
"WorkerThread" : The "P2PREADYTOSTOP" signal failed because the XML
publication or Q subscription "TAB010002" has an invalid subtype "B"
or an invalid state "I".
可将Q订阅
TAB010002
的
ASN.IBMQREP_SUBS
列
STATE
更新为
N
,然后重启Q Apply。
2.6 Q Apply的ASN7505E错误
当目标表设置不正确时,会出现此错误。例如:
2005-04-02-19.05.20.544083 <QAsub::loadUniqConstrs> ASN7505E "Q
Apply" : "ASN" : "BR00000" : The attributes of target columns are not
set up correctly for Q subscription "TAB010002" (receive queue "CAPA.
TO.APPB.RECVQ", replication queue map "RQMA2B"). Reason code: "6".
此时需要正确设置目标表的属性。
综上所述,通过对Q复制环境各组件的调优以及对常见错误消息的有效处理,能够提升Q复制的性能和稳定性,确保数据复制过程的顺利进行。
下面是Q复制性能调优的流程图:
graph LR
A[Q复制环境] --> B[DB2数据库层]
A --> C[WebSphere MQ层]
A --> D[Q Capture]
A --> E[Q Apply]
B --> B1[常规调优]
B --> B2[处理日志空间]
B --> B3[对控制表操作]
C --> C1[调整MAXDEPTH]
C --> C2[调整MAXUMSGS]
D --> D1[调整commit_interval]
D --> D2[调整memory_limit]
D --> D3[调整sleep_interval]
D --> D4[调整max_msg_size]
E --> E1[确保磁盘空间]
E --> E2[调整num_apply_agents]
以下是Q Apply和Q Capture部分参数的对比表格:
|组件|参数|说明|
| ---- | ---- | ---- |
|Q Capture|commit_interval|指定将事务提交到WebSphere MQ的时间间隔(毫秒)|
|Q Capture|memory_limit|指定在内存中构建DB2事务可使用的内存量|
|Q Capture|sleep_interval|到达活动日志末尾并组装事务后等待的毫秒数|
|Q Capture|max_msg_size|确定为每个发送队列使用的内存缓冲区大小|
|Q Apply|num_apply_agents|从接收队列并发应用事务的代理线程数|
3. Q复制监控与报告工具及方法
3.1 常用监控工具
在Q复制环境中,可使用多种工具进行监控。数据库层可使用DB2 Health Center和Optim Data Studio,Q复制层可使用复制仪表板和Tivoli Monitoring,WebSphere MQ层可使用rfhutil实用程序、WebSphere MQ Explorer和WebSphere MQSC接口(runmqsc)。
3.2 监控指标与方法
3.2.1 Q Capture监控
-
历史分析
:可通过查看
COUNT (bigint)、hour (int)、MAX_TRANS_SIZE、QUEUES_IN_ERROR、ROWS_PROCESSED、RUNDATE、TRANS_PROCESSED、TRANS_SKIPPED和TRANS_SPILLED等指标进行历史分析。 - 状态检查 :检查Q Capture是否落后于DB2日志,可通过相关命令和工具进行查看。同时,可查看Q Capture的启动参数和启动状态,监控其是否正常启动。
-
内存使用
:关注
memory_limit参数,若IBMQREP_CAPMON表中的TRANS_SPILLED列值大于零,可尝试增加内存限制。
3.2.2 Q Apply监控
-
历史分析
:分析指标包括
APPLY_LATENCY、COUNT(bigint)、CURRENT_MEMORY、DEADLOCK_RETRIES、END2END_LATENCY、HOUR (int)、KEY_DEPENDENCIES、MEM_FULL_TIME、MONSTER_TRANS、OKSQLSTATE_ERRORS、QDEPTH、QLATENCY、RI_DEPENDENCIES、RI_RETRIES、ROWS_APPLIED、ROWS_NOT_APPLIED、RUNDATE、TRANS_APPLIED、TRANS_SERIALIZED、UNIQ_DEPENDENCIES和UNIQ_RETRIES等。 - 状态检查 :检查Q Apply是否落后于Q Capture,查看其启动状态和日志文件,确保其正常运行。同时,可查询Q Apply的状态,了解其处理接收队列的情况。
-
性能调优
:关注
num_apply_agents参数,根据实际情况调整并发应用事务的代理线程数。同时,确保有足够的磁盘空间用于处理初始加载。
3.3 复制警报监控(RAM)
复制警报监控(RAM)可用于监控Q Apply和Q Capture的运行状态。其控制表包括
IBMSNAP_ALERTS
、
IBMSNAP_CONDITIONS
、
IBMSNAP_CONTACTGRP
、
IBMSNAP_CONTACTS
、
IBMSNAP_GROUPS
、
IBMSNAP_MONENQ
、
IBMSNAP_MONPARMS
、
IBMSNAP_MONSERVERS
、
IBMSNAP_MONTRACE
、
IBMSNAP_MONTRAIL
、
IBMSNAP_SUSPENDS
和
IBMSNAP_TEMPLATES
等。
3.3.1 配置步骤
- 创建控制表 :使用相关命令创建RAM控制表。
-
设置电子邮件通知
:配置
email_server等参数,设置电子邮件通知。 - 启动监控 :使用相关命令启动RAM,开始监控Q Apply和Q Capture。
3.3.2 管理操作
- 更改监控设置 :可使用相关命令更改监控设置,如调整监控间隔、警报阈值等。
-
暂停和恢复监控
:使用
ASNMCMD SUSPEND和ASNMCMD RESUME命令暂停和恢复监控。 - 删除监控暂停设置 :使用相关命令删除监控暂停模板。
4. Q复制环境管理与操作
4.1 控制表管理
4.1.1 创建控制表
可使用ASNCLP命令或复制中心创建Q复制控制表,包括Q Apply控制表和Q Capture控制表。创建时需注意在同一数据库中创建时的相关设置。
4.1.2 删除控制表
同样可使用ASNCLP命令或复制中心删除控制表。
4.1.3 修剪控制表
定期修剪控制表,可使用
PRUNE
命令,设置合适的
pruning_interval
参数。
4.2 Q订阅管理
4.2.1 创建Q订阅
使用
CREATE QSUB
命令创建Q订阅,设置相关参数,如
ERROR ACTION
、
HEADER
、
MESSAGE CONTENT TYPE
和
MESSAGE FORMAT
等。
4.2.2 激活和停用Q订阅
使用相关命令激活或停用Q订阅,确保订阅状态符合需求。
4.2.3 监控Q订阅状态
可通过查询相关表,列出Q订阅的状态,了解其运行情况。
4.3 队列管理
4.3.1 队列创建
使用WebSphere MQ命令创建队列,包括本地队列、远程队列和传输队列等,设置合适的参数,如
MAXDEPTH
和
MAXMSGL
等。
4.3.2 队列状态检查
使用相关命令检查队列的状态,确保队列正常运行。
4.3.3 队列操作
可对队列进行清空、启动和停止等操作,使用相应的命令实现。
4.4 Q复制环境复制与升级
4.4.1 复制环境
可使用相关命令复制Q复制环境,确保多个环境的一致性。
4.4.2 升级环境
使用
ASNCLP PROMOTE
过程升级Q复制环境,提升环境性能和功能。
以下是Q复制环境管理操作的流程图:
graph LR
A[Q复制环境管理] --> B[控制表管理]
A --> C[Q订阅管理]
A --> D[队列管理]
A --> E[环境复制与升级]
B --> B1[创建控制表]
B --> B2[删除控制表]
B --> B3[修剪控制表]
C --> C1[创建Q订阅]
C --> C2[激活/停用Q订阅]
C --> C3[监控Q订阅状态]
D --> D1[创建队列]
D --> D2[检查队列状态]
D --> D3[队列操作]
E --> E1[复制环境]
E --> E2[升级环境]
以下是Q复制环境中部分命令的用途表格:
|命令|用途|
| ---- | ---- |
|asnqacmd|用于Q Apply的管理,如启动、停止、查询状态等|
|asnqccmd|用于Q Capture的管理,如启动、停止、查询状态等|
|asnqmfmt|用于查看消息,检索Q Capture重启队列信息|
|asnqanalyze|用于报告系统情况|
通过对Q复制环境的全面管理和操作,结合性能调优和错误处理,能够确保Q复制系统的高效、稳定运行,满足数据复制和同步的需求。在实际应用中,需根据具体情况灵活运用这些方法和工具,不断优化Q复制环境。
超级会员免费看
704

被折叠的 条评论
为什么被折叠?



