数据库性能调优是一个持续性挑战,尤其在您没有最新的、功能最强大的硬件的时候。您需要最大限度地发挥您所拥有的系统的最大性能。从有限的资源获得最佳性能是最近的Fastest Informix DBA竞赛的主题,该竞赛在堪萨斯市举行的2011 IIUG Informix Conference上举办。
今年我们扩大了基准数据库的规模和会话数量,模拟了1,000个用户。与前一次竞赛相同,我们使用了开源OLTP 基准BenchmarkSQL,它类似于针对OLTP的TPC-C标准,模拟会话,执行插入、更新和删除操作的组合。AGS 是 Server Studio 的创建者,它转换了BenchmarkSQL,使其能够与Informix共同运行,我们将数据库转换成了 Informix。
我们要求参赛者在10 分钟的基准测试中获得每分钟的最多事务处理。但是,今年,我们使用的服务器与去年相同,拥有4个内核、6GB 的内存和两个缓慢的磁盘,并增加了10%的数据库大小和会话数量。在现实世界里,您并不总是拥有最新的硬件。让我们看看参赛者如何应对这个挑战,我们能够学习到什么知识。
内存和缓冲
将尽可能多的数据输入内存,同时不会导致操作系统将内存交换到磁盘,并能够实现最佳性能。影响内存的关键ONCONFIG 参数是BUFFERPOOL和SHMVIRTSIZE。
数据库大小为80GB,基准测试程序在所有数据之间创建随机事务。速度最快的参赛者Dmitry Kasyanenko将尽可能多的内存用于数据缓冲,他分配了2 K页面的3,000,000个缓冲区。服务器只有6GB的内存,因此他将所有的内存都用于缓冲。Dmitry还将其他内存参数设置得比大多数其他参赛者都要小。因为没有将内存浪费在本次基准测试不使用的特性上,所以Dmitry交付了比其他参赛者更佳的性能,其他参赛者将更少的内存分配给数据缓冲,将更多的内存分配给了SHMVIRTSIZE。
LRU队列
第二个主要区别在于Dmitry管理最近使用频率最低的(LRU) 队列。内存中的缓冲区被划分为队列,一个独立的线程管理一个队列。LRU线程管理哪些缓冲区保存在内存中、哪些最近使用频率最低,在需要新缓冲区时可以丢弃。保持过多的队列会创建额外的线程,而额外的线程又会消耗CPU循环,但是如果线程过少,则会造成需要访问缓冲区的会话出现瓶颈。
Informix使用LRU_MAX_DIRTY和LRU_MIN_DIRTY参数确定缓冲页写入磁盘的时间。这两个参数的默认值是LRU_MAX_DIRTY=60%和LRU_MIN_DIRTY=50%,表示当LRU队列中60%的页面变脏时,Informix就会开始将它们写入磁盘。当脏页面的数量下降到50%时,写入磁盘的操作就会停止,直到出现检查点,此时,所有的脏页面都已写出。
对于基准硬件上的慢磁盘来说,50%的6GB意味着大量数据,使每个检查点都成为一个瓶颈。在版本 11中,Informix推出了自动LRU调优,可以改变并调整LRU_MAX_DIRTY和LRU_MIN_DIRTY参数,这些操作都是基于磁盘I/O。这是一个伟大的新特性,大部分时间都能良好运行,然而,在我们规定的10分钟的时间段内,它的启动速度不够快。
因此,每个参赛者都遇到缓慢磁盘硬件所导致的较长的检查点时间问题。然而,Dmitry 的LRU_MAX_DIRTY=2%和LRU_MIN_DIRTY=1% 设置使得页面被连续写入磁盘。出现检查点时,要写到磁盘的数据就会少很多。Dmitry是惟一一个更改LRU参数的参赛者,我认为这样更改使得他更有优势。
检查点间隔
检查点是一个事件,内存(缓冲区)中的所有页面都被写入磁盘。多个事件可能导致一个检查点。其中您能够配置的一个事件是ONCONFIG 参数CKPTINTVL(默认值为 5 分钟)。间隔时间越长,在发生崩溃的情况下,丢失的东西就可能越多,崩溃后恢复所需的时间也就越久。包括Dmitry在内的几位参赛者将间隔设置为大于10分钟,这样,在有时间限制的竞赛过程中不会出现CKPTINTVL检查点。
CPU和VPCLASS
基准测试设备有一个带有 4 个内核的处理器,因此它有4个CPU。ONCONFIG参数VPCLASS用来设置 Informix执行处理和数据输入输出所用的CPU数量。这决定了Informix将运行的oninit流程的数量,以及oninit流程将执行的任务。ONCONFIG条目VPCLASS cpu,num=1,noage告知Informix启动一个CPU(一个oninit流程)执行处理操作,条目VPCLASS aio,num=2告知Informix启动两个oninit流程来执行磁盘异步I/O (AIO) 处理。大多数参赛者使用VPCLASS cpu,num=4,noage启动了4个CPU进行处理。Dmitry仅使用了一个CPU,这让我感到非常惊讶。我需要进行一些测试,以验证只使用一个CPU对性能是否有所帮助。
了解您的硬件
性能调优与系统密切相关。我在几个不同的服务器和配置上运行了BenchmarkSQL,因此无法采用一个配置,但期望它在所有的服务器上的性能都完全相同。请了解您的Informix服务器的硬件配置,并进行相应的调整。
祝贺在这方面努力工作的所有DBA,特别祝贺本次竞赛的获奖者。
40 多人已经下载了以 OLTP 为重点的测试数据库和基准测试代码,我们在 2010 年便开始用上述各项举办竞赛。我希望这种趋势能够继续,希望能够聆听大家的体验。
即将推出:更多的 Informix 性能测试
Informix 11.70.XC3在我撰写本专栏的一周前已发布,我们一直使用BenchmarkSQL对其进行测试。这一新版本好像再次提高了Informix数据库服务器的性能。在以后的专栏中,我将提供更多关于我们所进行的测试的信息。
作者介绍:Lester Knutsen——Advanced DataTools Corp总裁。
本文转自《IBM信息管理月刊2012年第二期》