生活生产服务其它Informix

监控和估计Informix Dynamic Server 中逻辑日志的使用情况

简介逻辑日志(logical log)是数据库管理的一个重要方面。如果没有得到适当的管理,逻辑日志将给数据库管理员带来许多头痛的事。最常见的一些问题是:长事务(long transaction)。如果一个事务达到独占长事务高水准线(exclusive long transaction high water mark,ELTM)时还没有提交...显示全部
简介
逻辑日志(logical log)是数据库管理的一个重要方面。如果没有得到适当的管理,逻辑日志将给数据库管理员带来许多头痛的事。最常见的一些问题是:
长事务(long transaction)。如果一个事务达到独占长事务高水准线(exclusive long transaction high water mark,ELTM)时还没有提交或回滚,我们就说该事务是长的。独占长事务高水准线是一个配置参数,该参数规定单个事务能横跨逻辑日志多大的百分比。只要一个事务达到了在一个 Informix Dynamic Server 配置文件中设置的 ELTM,服务器将中止该事务,并开始回滚该事务。在回滚期间,服务器将挂起进一步的数据库操作,前端用户将在他们的应用程序中遭遇中止。
灾难恢复(disaster recovery)。如果我们丢失了任何逻辑日志,那么在遇到灾难时,我们能选择的恢复策略就要受到限制。我们只能执行代码恢复(cold restore)。热恢复(warm restore)是不可能的,因为 Informix Dynamic Sever 需要检查所有逻辑日志来重新应用自上一次备份之后的数据库事务。结果就是数据丢失。
慢性能(slow performance)。如果没有将逻辑日志放在适当的位置,例如,如果我们将逻辑日志放在 root dbspace 中,或者磁盘上其他的热点(hot spot)中,那么系统和服务器的整体性能就会遭殃。
Informix Dynamic Server 中止。如果没有正规地备份逻辑日志,并且在系统中使用了所有的逻辑日志,那么 Informix Dynamic Server 将中止,并挂起其他数据库连接和操作。
本文将详细讨论如何配置和管理逻辑日志。本文还将通过一个实际生活中的例子演示如何估计和预测逻辑日志的使用情况。收起
参与5

查看其它 4 个回答zhixian的回答

zhixianzhixian业务经理电信
监控逻辑日志的使用
配置了逻辑日志之后,应不断监控逻辑日志的使用情况,以确保有足够的逻辑日志,这样 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)
}'
该脚本在帮助识别当前事务消耗了多少逻辑日志空间时很有帮助。但是有没有更具前瞻性的方法呢?如果将要执行的事务是已知的,那么可不可以预先计算出逻辑日志空间呢?可不可以预测事务能否成功?如果答案是肯定的,那么就可以前瞻性地采取某些行动,例如增加逻辑日志空间或者将事务劈成更小的块以避免长事务。
生活生产服务其它 · 2012-09-21
浏览795

回答者

zhixian
业务经理电信

回答状态

  • 发布时间:2012-09-21
  • 关注会员:0 人
  • 回答浏览:795
  • X社区推广