监控逻辑日志的使用
配置了逻辑日志之后,应不断监控逻辑日志的使用情况,以确保有足够的逻辑日志,这样 Informix Dynamic Server 就可以避免前面讨论过的长事务的情况。要监控逻辑日志的使用,需使用 onstat 实用程序。命令 onstat -l 将显示当前逻辑日志的使用情况。以下是 onstat -l 的示例输出:
Informix Dynamic Server Version 9.40.FC1 -- On-Line -- Up 1 days 19:37:46 -- 1818624 Kbytes
Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-2 0 16 178155 11983 14.87
phybegin physize phypos phyused %used
1:263 8750 6413 0 0.00
Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-2 0 16 1695756 319940 227242 5.3 1.4
Subsystem numrecs Log Space used
OLDRSAM 1695756 241316428
address number flags uniqid begin size used %used
16f4a7e90 4 U-B---- 244 7:53 15000 15000 100.00
16f4a7ee8 5 U---C-L 245 7:15053 15000 7558 50.39
16f4a7f40 6 U-B---- 166 7:30053 15000 15000 100.00
16f4a7f98 7 U-B---- 167 7:45053 15000 15000 100.00
16f181218 8 U-B---- 168 7:60053 15000 15000 100.00
16f181270 9 U-B---- 169 7:75053 15000 15000 100.00
16f1812c8 10 U-B---- 170 7:90053 15000 15000 100.00
7 active, 7 total
看看该输出的底端部分。 Number字段表明逻辑日志号。该号码可能不是连续的,因为 DBA 可能要根据系统需要插入和删除逻辑日志。例如,上面的输出表明,由于某种原因,前三个逻辑日志(号码 1 到 3)已经被删除。 Flags字段表明逻辑日志的状态。U 代表使用过的逻辑日志,B 代表备份过,C 代表当前正在使用,L 代表有最后检查点记录的逻辑日志。上面的输出表明,逻辑日志 5 被使用过,但当前仍在使用,而且它有最后检查点记录。 Uniqid字段是惟一的日志 id。由于逻辑日志是循环的,当逻辑日志被重用时,该号码就会改变。Size 字段表明按页计算逻辑日志有多大(一页大约 2 k 字节)。Used 字段表明事务记录所使用的空间,这也是按页计算的。 %used字段表明逻辑日志的使用百分率。要获得该输出中所有字段的详细描述,请参考 Administrator's Reference的第 13 章。
为了监控当前事务的逻辑日志使用情况,下面有一个小小的 shell 脚本。它基本上是使用 onstat -l命令,但是它还计算通过该命令收集到的统计数字,然后输出该事务所使用的逻辑日志空间,这里是以百分比表示的。
#!/bin/sh
$INFORMIXDIR/bin/onstat -l | awk -F" " ' BEGIN { t_flag=0 }
{
if ($1 == "address")
{ t_flag=1 }
if ( t_flag == 1 )
{
if ( $1 == "address")
{ t_logsize=0
t_logused=0
}
else
{
if ( substr($3,3,1) != "B" )
{ t_logused=t_logused+$7 }
t_logsize=t_logsize+$6
}
}
}
END {
t_logperct=t_logused/t_logsize*100
printf("Logical log space used %-d%n",t_logperct)
}'
该脚本在帮助识别当前事务消耗了多少逻辑日志空间时很有帮助。但是有没有更具前瞻性的方法呢?如果将要执行的事务是已知的,那么可不可以预先计算出逻辑日志空间呢?可不可以预测事务能否成功?如果答案是肯定的,那么就可以前瞻性地采取某些行动,例如增加逻辑日志空间或者将事务劈成更小的块以避免长事务。