异步页清除程序的数目(NUM_IOCLEANERS)
背景知识
NUM_IOCLEANERS 是一个数据库配置参数,它可以让您指定数据库的异步页清除程序的数目。在数据库代理程序需要缓冲池中的空间之前,这些页清除程序将缓冲池中已更改的页写到磁盘。这允许代理程序不必等待已更改页被写到磁盘就可以读取新页。因此,这会加快应用程序事务的运行。
如果将该参数设置成 0,则不启动页清除程序,结果,数据库代理程序将缓冲池中的所有页写到磁盘。该参数会对存储在多个物理存储设备上的单个数据库的性能产生显著影响,这是因为在这种情况下其中某个设备极有可能处于空闲状态。如果没有配置页清除程序,则应用程序可能会遇到不时发生的“日志已满”情况。
如果连接到数据库的应用程序主要执行更新数据的事务,那么增加清除程序的数目会提高性能。增加页清除程序的数量还会减少“软”故障(比如断电)的恢复时间,因为磁盘上数据库的内容在任何给定时候都是比较新的。
当设置该参数的值时要考虑下面这些因素:
1 如果有多个事务针对数据库运行,则将该参数的值设置在 1 到该数据库所使用的物理存储器的数量之间。有一个建议:至少将该参数的值设置成您系统上 CPU 的数量。
2 在具有高更新事务率的环境下,可能需要配置较多的页清除程序。
3 在具有大缓冲池的环境下,也可能需要配置较多的页清除程序。
如何更改该参数
可以用下面的命令来为该参数设置一个新值:
db2 -v update db cfg for DB_NAME using NUM_IOCLEANERS a_number
db2 -v terminate
研究步骤
使用数据库系统监视器,利用有关从缓冲池进行写操作的快照数据(或事件监视器)信息来帮助您调优该配置参数。
当使用快照和收集缓冲池的快照数据时,监控下列计数器:
Buffer pool data writes = 0
Asynchronous pool data page writes = 0
Buffer pool index writes = 0
Asynchronous pool index page writes = 0
LSN Gap cleaner triggers = 0
Dirty page steal cleaner triggers = 0
Dirty page threshold cleaner triggers = 0
如何决定该减少还是该增加 NUM_IOCLEANERS?
如果下面这两个条件成立,则 减少NUM_IOCLEANERS:
· “Buffer pool data writes”约等于“Asynchronous pool data page writes”。
· “Buffer pool index writes”约等于“Asynchronous pool index page writes”。
只要下面这两个条件有一个成立,则 增加NUM_IOCLEANERS:
· “Buffer pool data writes”远远大于“Asynchronous pool data page writes”。
· “Buffer pool index writes”远远大于“Asynchronous pool index page writes”。
Dirty page steal cleaner triggers 指出调用页清除程序的次数,因为在数据库“受损”缓冲区替换期间需要同步写操作。为了有更好的响应时间,该数值应当尽可能低。利用上面所示的计数器,可以使用下面的公式计算用该元素表示的所有清除程序调用的百分比:
Dirty page steal cleaner triggers / (Dirty page steal cleaner triggers +
Dirty page threshold cleaner triggers +
LSN Gap cleaner triggers)
如果该比率很高,则它可能表明您所定义的页清除程序太少了。页清除程序太少会使故障恢复时间变长。
回页首
I/O 服务器的数目(NUM_IOSERVERS)
背景知识
诸如备份和恢复之类的实用程序使用 I/O 服务器代表数据库代理程序执行预取 I/O 和异步 I/O。该参数是一个数据库配置参数��用于指定数据库的 I/O 服务器的数目。超过这个数量的预取和实用程序 I/O 在任何时候都不能在数据库中运行。在启动 I/O 操作时,I/O 服务器处于等待状态。由于从数据库代理程序直接调度非预取 I/O,因此非预取 I/O 不受 NUM_IOSERVERS 约束。
建议
在 OLTP 环境中,请使用缺省值。
如何更改该参数
使用下面的命令为 NUM_IOSERVERS 设置新值:
db2 -v update db cfg for DB_NAME using NUM_IOSERVERS a_number
db2 -v terminate
回页首
编入组中的提交数目(MINCOMMIT)
背景知识
MINCOMMIT 是数据库配置参数,它让您把将日志记录写到���盘的工作一直延迟到执行了最小数量的提交为止。该延迟可以有助于减少与写日志记录相关的数据库管理器开销。这意味着当您针对数据库运行多个应用程序并且在非常短的时间范围内应用程序请求大量提交时可以提高性能。只有当该参数值大于 1 并且当连接到数据库的应用程序数量大于或等于该参数值时,才会发生这个提交分组。当执行提交分组时,应用程序提交请求会被挂起,直到时间过去 1 秒或提交请求的数量等于该参数值。
建议
MINCOMMIT 的缺省值为 1。如果多个读/写应用程序通常请求并发数据库提交,则从缺省值开始递增该参数值。这将产生更有效率的日志文件 I/O,因为使用日志文件 I/O 的次数比较少,而每次使用日志文件 I/O 时所写的日志记录比较多。如果您认为缺省值不够大,那么建议您从 3 开始进行调整,在 3 的附近尝试以查看性能对工作负载的影响。您还可以对每秒钟的事务量进行采样,并调整该参数以适应每秒钟的峰值事务量(或者采用它的某个较大的百分比)。适应峰值活动使得在重负载期间写日志记录的开销减到了最低。
如果增大 MINCOMMIT,可能还需要增大 LOGBUFSZ 参数以避免在这些重负载期间强制将已满的日志缓冲区写入磁盘。在这种情况下,LOGBUFSZ 应该等于:
下面介绍了如何使用数据库系统监视器帮助您调优该参数的一些方法:
· 计算每秒钟的峰值事务数:
通过采用典型一天中的监视器样本,可以确定重负载时期。它的一种实现方法是:
1. 在测量开始时,发出下面这个命令:
MINCOMMIT * (log space used, on average, by a transaction)
(这不会使高水位的计数器复位。)
2. 在测量完毕后,发出下面这个命令:
3. 使用以下输出来计算事务的峰值:
db2 -v reset monitor for database db_name
db2 -v get snapshot for database on db_name
让 totalTransactions等于“commit statements attempted”和“rollback statements attempted”的总和。
让 totalElapsedTime(单位为秒)等于“Last reset timestamp”和“Snapshot timestamp”的差。如下计算每秒事务数:
Last reset timestamp = 06-12-2001 14:51:43.786876
Snapshot timestamp = 06-12-2001 14:56:27.787088
Commit statements attempted = 1011
Rollback statements attempted = 10
Log space used by the database (Bytes) = 3990
· 计算每个事务所使用的日志空间:
用类似的方式,通过在一段时间内对一些事务使用抽样技术,可以通过下面这个监视器元素: log_space_used(所使用的工作日志空间单元)计算出使用的日志空间的平均值。
1. 在测量开始时使用下面���个命令将感兴趣的数据库的监视器复位:
2. 在测量完毕后使用下面这个命令获取快照:
3. 产生如上所示的输出。
4. 可以使用下面这个公式计算出每个事务所使用的日志空间:
NumOfTransPerSecond = totalTransactions / totalElapsedTime
如何更改该参数
使用下面的命令更改 MINCOMMIT 值:
db2 -v reset monitor for database db_name.
db2 -v get snapshot for database on db2_name.
回页首
结束语
本文描述了一些 DB2 性能方面的基本要素、调优技巧和技术以及可能影响 OLTP 性能的一些主要的 DB2 配置参数。通过按照这里所描述的一些简单步骤,可以设置、监控和调优 DB2 数据库系统。我们希望本文所提供的指导能帮助您实现最优化 DB2 应用程序性能的目标。
参考资料
· 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
· IBM DB2 Universal Database, Administration Guide: Performance V7SC09-2945-00
· DB2 UDB V7.1 Performance Tuning Guide,红皮书,SG24-6012-00
· B2 Universal Database Performance Tuning and Monitoring Workshop,IBM Learning Services
· DB2 UDB EEE for UNIX Performance Monitoring and Tuning Workshop,IBM Learning Services。
转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/0107anshum/0107anshum.html#3