PostgreSQL性能测试 - 注意事项?

时间:2017-01-29 22:16:58

标签: database postgresql testing performance-testing

我对某些数据的索引结构进行了一些性能测试。我将并排比较两个索引(仍然没有决定我是否将使用2个VM)。我当然要求结果尽可能保持中立,所以我有这些问题我会很感激任何关于...的信息如何确保/控制影响测试的内容?例如,缓存效果/从一个测试到另一个测试的到达顺序将影响结果。我该如何衡量这些影响?如何制作合适的热身?或者我可以使用什么样的统计技术来消除这种影响(我不认为只有平均值就够了)?

2 个答案:

答案 0 :(得分:3)

开始之前:

  1. 确保您的表和索引刚刚新创建并填充。这避免了碎片方面的问题。否则,如果一个测试中的数据严重碎片化而另一个测试中没有,则您可能将苹果与苹果进行比较。
  2. 确保您的表格正确ANALYZEd。这可以确保查询计划程序在所有情况下都具有正确的统计信息。
  3. 如果您只想要比较,而不是在实际使用下进行测试,我只会这样做:

    1. 冷启动(虚拟)机器。等待一段合理但固定的时间(假设5分钟,或者系统的任何合理时间),以便所有启动过程都发生并且不会干扰数据库的执行。
    2. 使用index1执行测试,并测量时间(这是您没有数据库和操作系统缓存任何内容的时间)。
    3. 如果您对缓存效果感兴趣:再次执行测试10次(或合理的任意次数)。每次测量,以考虑VM上运行的其他进程导致的可变性以及其他意外情况。

    4. 重新启动计算机,并重复test2的整个过程。有清除OS缓存的方法;但它们非常依赖于系统,并且您无法清理数据库缓存。查看See and clear Postgres caches/buffers?

    5. 如果您在没有缓存效果时真的(或大部分)对性能感兴趣,您应该多次执行整个过程。这是缓慢而乏味的。如果您只对(很可能)缓存效果的情况感兴趣,则无需再次重新启动。

    6. 执行ANOVA(或您认为更合适的任何其他统计假设检验),以确定您的平均时间是否有统计学差异。

    7. 您可以在question about NOT NULL versus CHECK(xx NOT NULL).

      的答案中看到执行多项测试的示例

答案 1 :(得分:0)

尽可能保持中立,然后在数据库管理系统的同一实例上创建两个数据库,然后使用一个实例上的索引而不是另一个实例创建具有数据的相同表空间。

VM的挑战是您已经仲裁了对磁盘资源的访问权限(除非您将每个VM固定到特定的接口和磁盘集)。因此,您的仲裁模型可能因测试而异。删除仲裁的最中立的做法是在物理硬件上....在两种情况下都使用相同的硬件。