性能调优¶
上述问题引发的原因是当大量数据插入时系统会非常耗时,造成其他操作的等待。现在要考虑的是如何通过工具对系统进行优化从而缩短执行时间。
每次操作均在执行插入形如(1,1)的16777216条数据同时在另一个会话处执行插入形如(1,1)的33554432条数据的操作。
注解
- 以下过程需开启诊断统计时间:ENABLE_TIME_STAT。
- 插入多条数据的语句格式为:insert into shi select * from shi。
- 为了排除其它影响,每次测试均使用新建的数据库。
创建表¶
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 |
运行上述操作后查看运行时诊断工具建议报告如图:
图20-27建议报告功能图
说明在上述操作过程中数据文件和临时文件扩展的频率很大,因此第一步调优可以采取增大临时文件和数据文件初始大小和自动扩展值。
数据文件扩展测试¶
表格 20-11数据文件扩展
| 测试条件 | 执行时间(s) | |
|---|---|---|
| 插入条数 | 16777216 | 33554432 |
| 版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:2G 自动扩展:100M 临时文件大小:300M 日志文件大小:100M | 52.917 | 154.945 |
继续增大数据库文件大小与临时文件大小,发现执行时间反增大。故当前条件下为较优,不用再通过该方面进行考虑。而通过查看运行时诊断工具的系统等待事件选项卡(图20-22等待事件功能图)发现LogExtendWait事件等待的时间也很长,故下一步调优可通过调整日志文件的大小来进行调优。
图20-28等待事件功能图
日志文件扩展测试¶
表格 20-12日志文件扩展
| 测试条件 | 执行时间(s) | |
|---|---|---|
| 插入条数 | 16777216 | 33554432 |
| 版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:2G 自动扩展:100M 临时文件大小:300M 日志文件大小:4G | 46.110 | 134.101 |
执行时间减少。再调整日志文件的大小发现反而会使时间增长。故不再调整。而通过查看运行时诊断工具的系统等待事件选项卡(图20-23等待事件功能图)发现LogForceFlushWait与LogWriteWait事件等待的时间也很长,调整日志写缓冲区测试。
图20-29等待事件功能图
调整日志写缓冲区测试¶
表格 20-13调整日志写缓冲区
| 测试条件 | 执行时间(s) | |
|---|---|---|
| 插入条数 | 16777216 | 33554432 |
| 版本:运行时诊断工具 日志写缓冲区: LOG_WRITE_BUFFER_PAGES=0X20000(默认) 数据库文件 大小:2G 自动扩展:100M 临时文件大小:300M 日志文件大小:4G | 43.975 | 126.986 |
日志写缓冲区再增大会造成数据库无法启动,减小会使执行时间增大,故本次调整过程结束。