The real cost of random I/O
3 months ago
- #Query Optimization
- #PostgreSQL
- #Database Performance
- PostgreSQL中默认的`random_page_cost`值设为4.0,这个约25年前引入的数值可能已无法反映现代存储设备的实际情况。
- 实验表明,SSD上随机I/O的实际成本(约25-35)显著高于默认值,这与建议降低该值的观点相矛盾。
- 成本估算与实际耗时的差异可能导致次优查询计划,特别是在顺序扫描与索引扫描的选择性交叉区间。
- 位图扫描通过使访问更趋顺序化并支持I/O预取,缓解了部分低效问题,但当前成本模型并未考虑这些优化。
- 虽然随机I/O的实际成本更高,但在缓存命中率较高的场景或为避免性能陡降时,降低`random_page_cost`仍具合理性。
- 未来改进方向包括:将非I/O成本从`random_page_cost`分离、优化缓存数据统计估算、以及将预取机制纳入成本计算模型。