让 PostgreSQL 运行测试来调整成本参数有多难?

Dav*_*vid 4 postgresql performance

通过使用 EXPLAIN 可以看到运行查询的成本。成本以人工单位为单位,它们基于预定义的参数。我相信,1 是一个磁盘提取,一个 CPU 周期是 0.01 个单位。我的问题是为什么 PostgreSQL 在安装时不会自动运行测试以确定基于硬件的实数?这不应该是一个明显的快速胜利吗?

Bil*_*hor 5

如果成本不变,可能会有边际收益。由于各种资源不可互换,因此单位必须是人工的。即使在同一系统上,成本也可能在不同时间有所不同。

  • 如果 CPU 满载,那么 CPU 周期会变得更加昂贵。
  • 在多核系统上,CPU 成本可能低于通过测试一个 CPU 观察到的成本。
  • 如果磁盘变得繁忙,磁盘访问的成本就会增加。
  • 系统可能具有不同性能(读取成本)的不同磁盘。成本将根据数据所在的磁盘或磁盘子系统而有所不同。
  • 跨磁盘的数据分布不同可能会导致性能不同。
  • 索引和数据的不同放置可能会导致性能不同。
  • 跨不同性能的磁盘放置数据将导致磁盘 I/O 具有多种成本,具体取决于正在访问的数据。
  • 不同类型的查询(批处理与 OLTP)可能具有不同的适当成本分布。

一旦创建了数据库,就有可能从数据库中确定更好的指标。使用更新的指标可能会改变负载而不是使其无效。存在一定的余量,超出该余量,行为变得相对不可预测并且可能会严重降级。