性能调优

上述问题引发的原因是当大量数据插入时系统会非常耗时,造成其他操作的等待。现在要考虑的是如何通过工具对系统进行优化从而缩短执行时间。

每次操作均在执行插入形如(1,1)的16777216条数据同时在另一个会话处执行插入形如(1,1)的33554432条数据的操作。

注解

  • 以下过程需开启诊断统计时间:ENABLE_TIME_STAT。
  • 插入多条数据的语句格式为:insert into shi select * from shi。
  • 为了排除其它影响,每次测试均使用新建的数据库。

环境准备

Microsoft Windows XP Professional 32位机

双核CPU

2G内存

创建表

create table shi(a int,b int);

insert into shi values(1,1);

原始环境测试

表格 20-10原始环境测试

测试条件 执行时间(s)
插入条数 16777216 33554432
版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:100M 自动扩展:20M 临时文件大小:100M 日志文件大小:100M 63.439 173.730

运行上述操作后查看运行时诊断工具建议报告如图:

../../../../../../_images/image1392.png

图20-27建议报告功能图

说明在上述操作过程中数据文件和临时文件扩展的频率很大,因此第一步调优可以采取增大临时文件和数据文件初始大小和自动扩展值。

数据文件扩展测试

表格 20-11数据文件扩展

测试条件 执行时间(s)
插入条数 16777216 33554432
版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:2G 自动扩展:100M 临时文件大小:300M 日志文件大小:100M 52.917 154.945

继续增大数据库文件大小与临时文件大小,发现执行时间反增大。故当前条件下为较优,不用再通过该方面进行考虑。而通过查看运行时诊断工具的系统等待事件选项卡(图20-22等待事件功能图)发现LogExtendWait事件等待的时间也很长,故下一步调优可通过调整日志文件的大小来进行调优。

../../../../../../_images/image1402.png

图20-28等待事件功能图

日志文件扩展测试

表格 20-12日志文件扩展

测试条件 执行时间(s)
插入条数 16777216 33554432
版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:2G 自动扩展:100M 临时文件大小:300M 日志文件大小:4G 46.110 134.101

执行时间减少。再调整日志文件的大小发现反而会使时间增长。故不再调整。而通过查看运行时诊断工具的系统等待事件选项卡(图20-23等待事件功能图)发现LogForceFlushWait与LogWriteWait事件等待的时间也很长,调整日志写缓冲区测试。

../../../../../../_images/image1413.png

图20-29等待事件功能图

调整日志写缓冲区测试

表格 20-13调整日志写缓冲区

测试条件 执行时间(s)
插入条数 16777216 33554432
版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:2G 自动扩展:100M 临时文件大小:300M 日志文件大小:4G 43.975 126.986

日志写缓冲区再增大会造成数据库无法启动,减小会使执行时间增大,故本次调整过程结束。