ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DB2 9.7 轮换诊断日志和管理通知日志

DB2 9.7 轮换诊断日志和管理通知日志

原创 Linux操作系统 作者:ArtCode 时间:2010-03-01 14:18:14 0 删除 编辑

转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1002qianx/index.html

背景介绍

DB2 有两种类型的日志文件用于故障诊断。管理通知日志 (instance_name.nfy) 主要供数据库和系统管理员进行故障诊断,它只用于 Linux 和 Unix 操作系统。DB2 诊断日志文件 (db2diag.log) 主要供 IBM 软件支持机构进行故障诊断。管理通知日志消息也以标准化消息格式记录到 db2diag 日志文件。

在 IBM DB2 9.7 之前的版本,这两个日志文件的大小被允许无限制地增长。有时候这些文件由于一直没有归档,而导致其所在文件系统的磁盘空间溢出。这会造成 DB2 不能正常记录诊断信息,其他应用程序也可能因为磁盘空间满而运行失败。更为糟糕的是,如果这些日志和 DB2 其他关键数据保存在同一文件系统上,DB2 本身会不能正常工作,带来不必要的损失。

此外,如果 db2diag.log 一直没有被删除,它会包含数年来数据库操作的大量诊断信息。当客户系统发生错误需要 DB2 支持服务时,该诊断日志文件会通过 ftp 发往 IBM,这将花费客户很长的时间并延缓了支持人员对该服务消息的响应时间。这对于 24 × 7 运行的生产系统是完全不能容忍的。

上述两大问题一直是客户和服务支持人员的痛处。DB2 9.7 引入的新特性 - 轮换诊断日志和管理通知日志可以控制所有轮换日志的总大小,从而解决这些问题,减轻 DBA 的日常工作。

诊断日志文件的两种形式

诊断日志文件和管理通知日志文件存在的形式相似,这里以诊断日志文件为例说明其存在的形式。DB2 的诊断日志文件有两种不同的形式:

单一诊断日志文件

一个活动诊断日志文件,名为 db2diag.log,其大小可以无限增大。DB2 9.7 之前都采用这个形式,这也是 DB2 9.7 的默认行为。每当 diagsize 数据库管理器配置参数的值为缺省值 0 时,都采用单一诊断日志记录行为。

轮换诊断日志文件

单一活动日志文件(名为 db2diag.N.log,其中 N是从 0 开始持续增大的文件名数字索引)。在 diagpath 配置参数定义的位置可以找到一系列诊断日志文件。每个文件都将增长到有限的大小,达到该限制值时,系统将关闭该日志文件,然后创建并打开一个新的日志文件进行日志记录,新日志文件将具有增大后的文件名索引(db2diag.N+1.log)。每当 diagsize 数据库管理器配置参数设为非零值时,都采用轮换日志记录行为。

你可以通过设置 DIAGSIZE数据库管理器配置参数来选择采用上述哪种日志文件形式。

如何使用轮换日志

启用轮换日志

更新数据库管理器配置参数 DIAGSIZE 为非 0 值,DB2 重新启动时切换到轮换日志记录行为,使用命令如下:

 db2 update dbm cfg using DIASIZE 1024 

DIAGSIZE 的单位是兆字节,缺省值为 0,最小值为 2,最大值不能超过磁盘的可用空间,否则会报 SQL5130N 的错误消息。

当启动轮换日志记录行为后,其表现如下:

  • 使用一系列诊断日志文件,如 db2diag.9.log, db2diag.10.log … . db2diag.18.log,文件总数目不超过 10,当第 10 个文件的大小达到限制后,将删除最旧的文件并创建新文件。
  • 使用一系列管理通知日志文件,如 .0.nfy, .1.nfy ...,.9.log,文件总数目不超过 10
  • 消息始终被记录到索引号最大的轮换日志文件 db2diag. 最大的 n.log 和 . 最大的 n.nfy。

除此之外,DIAGSIZE 配置参数将控制所有轮换诊断日志文件和轮换管理通知文件的总大小:

  • Linux 和 Unix 操作系统,轮换诊断日志文件 db2diag.n.log 的总大小不能超过 DIAGSIZE 配置参数的 90%,轮换管理通知日志文件 .n.nfy 的总大小不超过 DIAGSIZE 配置参数的 10%。例如 DIAGSIZE 设置为 1024,那么全部 db2diag.n.log 文件总大小不超过 921.6MB,全部 .n.nfy 的总大小不超过 102.4MB。
  • Windows 操作系统上,DIAGSIZE 的整个值都分配给轮换诊断日志文件。
  • 每个日志文件的大小由分配给每类日志文件的空间总量除以 10 确定。

轮换日志文件从来不会充满 diagpath 所定义的目录,这是因为 DB2 的“Early Totaling”机制。当创建一个新的日志文件时,DB2 会检查可用的磁盘空间。当没有足够的磁盘空间创建新日志文件并且至少存在两个轮换日志文件时,DB2 会删除最老的日志文件,即使轮换日志文件数目未达到 10,这样 DB2 就会得到些许空间创建新的日志文件。



图 1. 轮换日志的示意性图例(3 个轮换日志文件)

这里是启用轮换日志的一个例子,默认情况下 DIAGSIZE 为 0,我们在其 DIAGPATH 定义的路径目录 db2dump 内只看到一个 db2diag.log 和 db2hia.nfy(db2 实例名为 db2hia)。

 sapsu2:db2hia 4% ls -lrt 
 total 22168 
 -rw-r----- 1 db2hia dbhiaadm 6291312 Oct 20 00:24 db2eventlog.000 
 -rw-rw-rw- 1 db2hia dbhiaadm 2967 Oct 20 00:24 db2hia.nfy 
 drwxrwxrwx 2 db2hia dbhiaadm 4096 Oct 25 13:47 events 
 drwxrwxr-t 2 db2hia dbhiaadm 4096 Oct 27 17:40 stmmlog 
 -rw-rw-rw- 1 db2hia dbhiaadm 5036089 Oct 27 17:40 db2diag.log 

然后,我们发出如下命令

 sapsu2:db2hia 5% db2 update dbm cfg using DIAGSIZE 2 
 DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed 
 successfully. 

重启 DB2 实例后,在 db2dump 目录中新生成了两个文件,db2diag.0.log 和 db2hia.0.nfy。

 sapsu2:db2hia 9% ls -lrt 
 total 30392 
 drwxrwxrwx 2 db2hia dbhiaadm 4096 Oct 25 13:47 events 
 drwxrwxr-t 2 db2hia dbhiaadm 4096 Oct 27 17:40 stmmlog 
 -rw-r----- 1 db2hia dbhiaadm 6291312 Oct 29 02:47 db2eventlog.000 
 -rw-rw-rw- 1 db2hia dbhiaadm 3148 Oct 29 02:47 db2hia.nfy 
 -rw-rw-rw- 1 db2hia dbhiaadm 5043787 Oct 29 02:47 db2diag.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 12190 Oct 29 02:47 db2diag.0.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 863 Oct 29 02:47 db2hia.0.nfy 

过一段时间后,DB2 会陆续关闭旧的诊断日志文件,创建新的诊断日志文件。

 sapsu2:hiaadm 4% ls -lrt 
 total 25472 
 drwxrwxrwx 2 db2hia dbhiaadm 4096 Oct 25 13:47 events 
 drwxrwxr-t 2 db2hia dbhiaadm 4096 Oct 27 17:40 stmmlog 
 -rw-rw-rw- 1 db2hia dbhiaadm 3148 Oct 29 02:47 db2hia.nfy 
 -rw-rw-rw- 1 db2hia dbhiaadm 5043787 Oct 29 02:47 db2diag.log 
 -rw-r----- 1 db2hia dbhiaadm 6291312 Oct 29 03:38 db2eventlog.000 
 -rw-rw-rw- 1 db2hia dbhiaadm 2775 Oct 29 03:39 db2hia.0.nfy 
 -rw-rw-rw- 1 db2hia dbhiaadm 172957 Oct 29 03:47 db2diag.6.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172957 Oct 29 03:47 db2diag.7.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172957 Oct 29 03:47 db2diag.8.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172957 Oct 29 03:47 db2diag.9.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172957 Oct 29 03:47 db2diag.10.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172957 Oct 29 03:47 db2diag.11.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172383 Oct 29 03:52 db2diag.12.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172362 Oct 29 04:00 db2diag.13.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 172391 Oct 29 04:00 db2diag.14.log 
 -rw-rw-rw- 1 db2hia dbhiaadm 85909 Oct 29 04:19 db2diag.15.log 

禁用轮换日志

如果要回到采用老的日志记录方式,将 DIAGSIZE 设置为 0 并重启 DB2 实例。在我们的例子中:

 sapsu2:db2hia 5% db2 update dbm cfg using DIAGSIZE 0 
 DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed 
 successfully. 

支持轮换日志的 DB2 工具

DB2 工具 db2diag、table UDF PD_GET_DIAG_HIST 和 db2support 都支持轮换日志。

  • 通过 db2diag 工具读取和过滤 db2 诊断文件信息。当 DIAGSIZE 不为零时,db2diag 命令会读取所有轮换诊断日志文件,输出格式在用户看来没有任何改变。
  • 通过 table UDF PD_GET_DIAG_HIST 读取和过滤 db2 诊断文件信息。当 DIAGSIZE 不为 0 时,该 UDF 在返回结果时会考虑所有轮换诊断日志文件。
  • db2support 工具也支持轮换日志记录行为。

    最佳实践

    DB2 9.7 在文档中推荐将 DIAGSIZE 设置为大于 50MB 的数值,但不超过 DIAGPATH 所指定目录中可用空间的 80%。但在实际生产系统中,个人建议通过观察每周 db2diag.log 的增长速度决定 DIAGSIZE 的数值。例如据一般性统计,SAP 客户系统的 db2diag.log 每星期增长 2 到 4MB,为避免诊断信息丢失,推荐将 DIAGSIZE 设为 1024MB(1GB)。这允许 DB2 创建至多 10 个 10MB 的管理通知日志文件和至多 10 个 90MB 的诊断日志文件,这将能涵盖处于高压力下数据库产生很多的警告 / 错误信息的情况。

    总结

    本文主要介绍了 DB2 9.7 轮换日志特性。希望通过本文读者能够了解这种新的日志记录形式所带来的好处,DB2 轮换日志的工作原理和使用方式,以及在实际生产系统中的最佳实践。关于本文中提高的配置参数可搜索 IBM DB2 9.7 Information Center for Linux, UNIX and Windows获得更多相关信息。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15082138/viewspace-628281/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-05

  • 博文量
    269
  • 访问量
    609696