分类: 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 日志进度表 |