心跳丢失数量(HeartBeatMissed):主机会不断地向备机发送心跳,以确认仍然可以和对方通信。这个值表明了有多少心跳信号没有发送成功或者没有接收成功。
日志 LSN 差异(LogGapRunAvg):这个值表示一段时间以内,主机和备机日志差异的平均值。如果这个值一直很大,可能表明网络状况比较差,或者备机的性能和主机差异太大,以至于日志不能及时的从主机传到备机。
连接状态(ConnectStatus):包括三种 CONNECTED, DISCONNECTED, CONGESTED。CONNECTED 表示连接状况良好;DISCONNECTED 表示主机和备机已经断开连接;CONGESTED 表示当前的网络状况不太好,日志或者消息的发送遇到拥塞。
连接时间(ConnectTime):如果主机和备机是连接的,表示连接建立起来的时间;如果连接时断开的,表示的是连接断开的时间;如果发生了网络拥塞,则表示上次网络拥塞的时间。
超时时间(Timeout):如果 HADR 在这段时间内没有收到来自同伴的任何消息,它就会断开网络连接。需要注意的是,这个时间并一定是网络出现错误以后的等待时间。HADR 可以发现网络上的大部分错误,当这些错误发生时,HADR 会立刻断开和对方的连接,而并不会等待。另外,这项配置还有另外两个作用:
1. 心跳的时间间隔为 HADR_TIMEOUT/4 和 30 秒钟两者之间的较小的那个值
2. 如果首先在主机上执行启动 HADR 的操作,如果主机没有在 HADR_TIMEOUT 时间以内没有收到备机的连接,主机上的数据库就会停掉,以防止两台主数据库的存在而导致脑裂。
同伴窗口(PeerWindow):相对应 DB2 配置文件中的 HADR_PEER_WINDOW,该参数只对 SYNC 和 NEARSYNC 两种同步模式有效。如果该参数不为零,当主机和备机断开连接时,在 HADR_PEER_WINDOW 这段时间以内,数据库处于 DISCONNECTED PEER 状态。主机在这段时间内不能提交任何事务。所以,这段时间内,如果备机做了接管,备机不会丢失任何事务。这个参数通对于在 TSA 对 HADR 自动做接管的环境中特别重要,因为 TSA 执行”takeover hard on db dbname by force peer window only”这个命令进行接管。
同伴窗口结束时间(PeerWindowEnd):显示了同伴窗口的结束时间。过了这个时间以后,HADR 将处于 DISCONNECTED 状态。
本地主机名(LocalHost):本地 HADR 所在的主机名或者 IP 地址。
本地服务名(LocalService):本地 HADR 所使用的服务名称或者端口号。
远程主机名(RemoteHost):对端 HADR 所在机器的的主机名或者 IP 地址。
远程服务名(RemoteService):对端 HADR 使用的服务名称或者端口号。
远程实例(RemoteInstance):对端 HADR 数据库所在的实例的名字。
主机日志文件(PrimaryFile):主机目前正在写的日志文件。
主机日志页号(PrimaryPg):主机目前正在写的日志文件中的页号。
主机日志序号(PrimaryLSN):主机正在处理的日志记录的序列号。
备机日志文件(StandByFile):备机目前正在写的日志文件。
备机日志页号(StandByPg):备机目前正在写的日志文件中的页号。
备机日志序号(StandByLSN):备机正在处理的日志记录的序列号。
对于很多 DBA 来说,知道主机和备机的同步情况很重要。从主机日志序号和备机日志序号里面,我们可以判断出来主机还有多少日志没有传输到备机。例如以下图 7 的 db2pd 的结果:
我们可以看出来主机和备机的日志相差 0x0000000000FA179C-0x0000000000FA16E6 = 0xB6。也就是十进制的 182 个字节。

db2trc 命令是 DB2 提供的跟踪工具。该跟踪工具记录有关操作的信息并将此信息格式化为可读格式。需要注意的是,运行跟踪时会增加开销,所以启用跟踪工具可能会影响系统性能。
db2trace 可以跟踪每个函数以及该函数的执行时间。利用这一性质,我们可以计算出来每次写日志花费的时间以及 HADR 带来的开销。
首先,我们需要找到主机上的写日志的 EDU(Engine Dispatchable Unit),即 db2loggw 的线程号(或进程号)。对于 v91 及以前的版本,我们使用 db2procs,如图 8:
对于 v95 及以后版本,db2 基于线程模型,使用 db2pd – edus,如图 9:
找到 HADR 的 EDU 以后,我们可以通过 db2trc 去跟踪 loggw 这个进程(或者线程)。例如对于图 8,使用命令:
|
db2trc on -t -p 32567 -f trace.dump
|
等主机上运行过了需要写日志的交易(例如插入,删除,修改)以后,将 db2trc 关掉,然后格式化 db2trace 的 dump 文件:
|
db2trc off; db2trc flow -t trace.dump trace.flow |
打开文件 trace.flow,以图 10 为例。
注意标记红线和红色框里面的内容,计算 hadr 的方法如下:
1. 找到 sqlpgwlp 函数,
2. 找到这个函数内的 sqloWaitEDUWaitPost
3. 计算 sqlpgwlp 的执行时间。T1 = 0.196988000 – 0.192810000 = 0.004178000
4. 计算 sqloWaitEDUWaitPost 的执行时间。T2 = 0.196951000 – 0.196946000 = 0.000005000
T1 是完成这次写日志的总时间,T2 就是这次写日志时,HADR 带来的开销
如果我们跟踪了多次写日志的操作,就跟得到多个上面的片段。可以根据所有的片段计算平均值,从而得到更精确地开销比例。

以下文章点击率最高
Loading…



