1

在使用 Apache Derby DB 进行性能测试时,我注意到一些奇怪的行为:

我为性能测试做了五次测试。在每次运行之前,我都会在表中插入一些数据,这样我就可以进行第一次运行,例如在表中使用 500k 元组,第二次运行 1000k,第五次运行 2500k 元组。

查询的执行时间是这样的:200ms、450ms、700ms、500ms、550ms

也就是说,第四次运行比第三次运行快,尽管在第四次运行中必须扫描和获取更多数据。这很奇怪。

我能想象的唯一原因是,Derby 会不时优化一些内部结构或物理布局,或者一旦表中的数据超过某个阈值。无论如何,可以手动触发此优化以获得单调不递减的执行时间测量吗?

或者您知道这种行为的确切原因吗?

提前致谢!

4

1 回答 1

1

您可能必须学习如何阅读查询计划输出来弄清楚发生了什么,但我还是大胆猜测一下:当向表中添加行时,Derby 服务器会定期注意到该表的大小发生了很大变化,并且它会自动重新计算优化器用于查询计划的统计信息,这可能会导致完全不同的查询计划。

为了确认这一点,您可以尝试在每次数据加载后自己重新计算统计信息,看看是否可以获得最佳查询计划:http ://db.apache.org/derby/docs/10.8/tuning/ctunperfstatistics.html

于 2012-07-26T03:03:52.150 回答