分类: DB2/Informix
2008-05-31 17:57:28
ER:监视
本节讨论以下主题:
本节主要关注应该 监视什么,而不是可以 监视什么。可以收集的信息量非常大,无法在本教程中全面讨论。所以本节只讨论经常出现问题的领域,以及在深入研究之前需要检查的领域。问题常常只与一个服务器相关,比如日志文件写满、引擎停止运行或连接问题。尽管实际问题可能只发生在一个服务器上,但是应该分别检查每个 ER 服务器。请记住,ER 是在 IDS、操作系统和网络之上建立的。这些部分都可能导致 ER 出现问题。确定问题出现在某个服务器上之后,就要深入研究 ER 的数据流。
表 13 列出了对于 Enterprise Replication 比较重要的 onstat
选项。本节后面会详细讨论那些粗体显示的选项:
onstat | 功能 | 描述 |
---|---|---|
onstat -g cat | 全局编目 | 记录 ER 内部状态和活动的内存结构 |
onsat -g ddr | 搜索和重放位置 | 扫描日志页面并决定要复制的日志记录 |
onsat -g grp | 分组器 | 在提交事务之前持有事务、压缩事务、对事务进行排队以便发送 |
onsat -g nif | 网络接口功能 | 处理每个连接的数据包压缩和发送/接收线程 |
onsat -g dss | 数据同步统计 | 在目标实例上重放复制的数据,处理冲突解决,数据映射 |
onsat -g rcv | 接收统计信息和数据同步摘要 | 接收和发送队列器、全局编目和数据同步组件的消息 |
onsat -g rqm | 队列信息 | 维护 ER 使用的消息队列(SENDQ、CNTRLQ、ACKQ、SYNCQ、RECVQ) |
这个命令查看三个重要的逻辑日志位置,从而判断 ER 的表现。这些位置由逻辑日志惟一 ID 和逻辑日志位置指定。这些位置是:
$ onstat -g ddr IBM Informix Dynamic Server Version 11.10.FC1 -- On-Line (Prim) -- Up 16 days 18:50:41 -- 196608 Kbytes DDR -- Running -- # Event Snoopy Snoopy Replay Replay Current Current Buffers ID Position ID Position ID Position 528 11 643018 11 4f3070 11 644000 Log Pages Snooped: From From Tossed Cache Disk (LBC full) 5992 612 0 Total dynamic log requests: 0 DDR events queue Type TX id Partnum Row id |
正如在 onstat -g ddr
的输出中看到的,重放位置和搜索位置应该正在向前推进。如果重放位置没有前进,这说明发送队列已满,或者远程服务器关闭。如果搜索位置没有移动,那么可能是 ddr_snoopy 线程出了问题。
如果数据库服务器将要覆盖 ER 还没有处理的逻辑日志,ER 就会进入 DDRBLOCK 模式。在服务器处于 DDRBLOCK 模式期间,尽管用户事务会被阻塞,但是 ER 活动可以继续执行。在此期间,ER 尝试处理事务,从而将重放位置向前推进,避免日志文件被用光。
这个命令指出(服务器已知)站点是否连接,并显示发送和接收的字节数。这有助于找到暂停的站点(相对于其他活动站点)。在下面清单 53 中的输出示例中可以看到,站点 g_90s 处于 SUSPEND 状态。这意味着有人在这个站点上运行了 cdr suspend server
。如果该服务器离线,这个输出中就不会列出它。(参见 cdr list server
提供的信息。)
$ onstat -g nif IBM Informix Dynamic Server Version 11.10.FC1 -- On-Line (Prim) -- Up 16 days 20:17:51 -- 196608 Kbytes NIF anchor Block: fe0a678 nifGState RUN RetryTimeout 300 CDR connections: Id Name State Version Sent Received --------------------------------------------------------------------------- 2000 g_00s RUN 9 5559 18 90 g_90s RUN,SUSPEND 9 5562 17 |
有时候,在这个输出中可能看到 “BLOCK” 状态。阻塞状态意味着这个站点无法处理更多的信息,并请求不要再向它发送更多的数据。这个状态应该是临时的,常常只会持续几分钟。如果 BLOCK 状态持续存在,那么要进一步检查这个站点。
这个命令输出五个 ER 队列的相关信息:SENDQ、CNTRLQ、ACKQ、SYNCQ、RECVQ。每个队列有自己的选项,还可以使用以下选项之一查看所有队列的信息:FULL、BRIEF、VERBOSE。清单 54 中的输出示例显示一个队列的所有信息。输出分为五个部分:
$ onstat -g rqm sendq IBM Informix Dynamic Server Version 11.10.FC1 -- On-Line (Prim) -- Up 16 days 20:46:32 -- 196608 Kbytes CDR Reliable Queue Manager (RQM) Statistics: RQM Statistics for Queue (0xfdb1028) trg_send Transaction Spool Name: trg_send_stxn Insert Stamp: 6161/0 Flags: SEND_Q, SPOOLED, PROGRESS_TABLE, NEED_ACK Txns in queue: 4003 Log Events in queue: 0 Txns in memory: 4003 Txns in spool only: 0 Txns spooled: 4001 Unspooled bytes: 210 Size of Data in queue: 849555 Bytes Real memory in use: 849555 Bytes Pending Txn Buffers: 0 Pending Txn Data: 0 Bytes Max Real memory data used: 849555 (1843200) Bytes Max Real memory hdrs used 1206340 (1843200) Bytes Total data queued: 1188006 Bytes Total Txns queued: 6161 Total Txns spooled: 4001 Total Txns restored: 0 Total Txns recovered: 0 Spool Rows read: 0 Total Txns deleted: 2158 Total Txns duplicated: 0 Total Txn Lookups: 29232 Progress Table: Progress Table is Stable On-disk table name............: spttrg_send Flush interval (time).........: 30 Time of last flush............: 1181403392 Flush interval (serial number): 1000 Serial number of last flush...: 5 Current serial number.........: 5 Server Group Bytes Queued Acked Sent ------------------------------------------------------------------------------ 2000 0x500001 0 50/b/4e8118/0 - 50/b/4e8118/0 90 0x500001 0 50/b/4e8118/0 - 50/b/4e8118/0 Traverse handle (0x104f0028) for thread CDRGeval1 at Head_of_Q, Flags: None Traverse handle (0x10483028) for thread CDRGeval0 at Head_of_Q, Flags: None Traverse handle (0x10351028) for thread CDRGeval2 at Head_of_Q, Flags: None Traverse handle (0x1034f028) for thread CDRACK_0 at Head_of_Q, Flags: None Traverse handle (0x1048c028) for thread CDRACK_1 at Head_of_Q, Flags: None Traverse handle (0x10288028) for thread CDRNrA90 at Head_of_Q, Flags: None Traverse handle (0xfe60028) for thread CDRNsA2000 at Head_of_Q, Flags: None Traverse handle (0x102b9028) for thread CDRNrA2000 at Head_of_Q, Flags: None |
IBM Informix Dynamic Server Enterprise Replication Guide 中详细描述了为 ER 添加的所有 SMI(sysmaster 数据库)表。这些 SMI 表是基于 syscdr 数据库的视图,而且可能将几个表组合在一个视图中。在 $INFORMIXDIR/etc/syscdr.sql 中可以找到这些表的模式,在 $INFORMIXDIR/etc/syscdrview.sql 中可以找到在 sysmaster 中创建的视图。
如果 onstat
命令和 cdr
命令的输出之间出现差异,那么可能需要查看这些表。onstat
实用程序总是从共享内存读取信息,而 cdr
实用程序读取全局编目(也称为 syscdr 数据库)。
表名 | 描述 |
---|---|
hostdef_tab | Enterprise Replication 服务器信息(就像 SQLHOSTS) |
protodef_tab | 服务器协议信息 |
servdef_tab | 服务器定义 |
repdef_tab | 副本定义 |
triggerdef_tab | ER 触发器定义 |
triggercol_tab | ER 触发器列 |
partdef_tab | 副本的参与服务器 |
mastered_replicates_tab | 主副本描述 |
mastered_syscolumns_tab | 主副本列 |
mastered_sysxtdtypes_tab | 主扩展类型 |
mastered_sysattr_tab | 扩展类型的属性 |
rsncjobdef_tab | resync 作业定义表 |
rsncjobdeps | resync 作业依赖项 |
rsncprocnames_tab | Resync 过程名 |
delrepl | 删除的副本表 |
replsetdef_tab | 副本集定义 |
replsetpartdef | 副本集中的副本 |
servroute | 服务器路由表 |
cdr_errors | 错误日志 |
gcversion | 全局编目版本 |
swaploginfo | 交换日志位置表 |
shadow_event_info | 影子副本事件表 |
replaytab | 重放位置表 |
recvcntldup | 接收控制消息重复探测 |
cdrstatedef_tab | CDR 编目状态 |
deltabdef_tab | 活跃删除表定义 |
cdrviotabdef_tab | CDR 违例表定义 |
deltabrep | 删除表到副本的映射 |
freqdef | 基于时间的复制频率信息 |
rsncrowstats | 跟踪 resync 作业的行计数 |
replevents | 副本暂停/继续运行事件 |
cdr_pcpt | PostCommit 触发器进度表 |
cdrddlpt | PostCommit DDL 日志进度表 |