Payal Singh:Postgres 战争故事 第1部分:非Postgres错误导致的Postgres故障

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

本文讨论了Postgres在大规模生产环境中遇到的问题,指出这些问题主要源于依赖的工具和操作系统,而非Postgres本身。提到fsync()的错误处理、glibc 2.28导致的索引问题,以及透明大页(THP)对性能的影响。建议禁用THP以避免性能下降,并强调在数据库日志正常时应关注底层系统问题。

🎯

关键要点

  • Postgres在大规模生产环境中遇到的问题主要源于依赖的工具和操作系统,而非Postgres本身。
  • fsync()的错误处理导致数据未能正确写入磁盘,Postgres在PG 11及以上版本中通过在fsync()失败时强制恢复来解决此问题。
  • glibc 2.28引入的排序问题导致索引错误,影响了查询结果,社区已增加检测机制以应对这一问题。
  • 透明大页(THP)在Postgres中可能导致性能下降,建议禁用THP以避免后台进程冻结。
  • Postgres信任其底层系统,若数据库日志正常但仍有问题,应关注底层系统的潜在错误。

延伸问答

Postgres在生产环境中遇到的问题主要源于什么?

Postgres在生产环境中遇到的问题主要源于依赖的工具和操作系统,而非Postgres本身。

fsync()的错误处理对Postgres有什么影响?

fsync()的错误处理导致数据未能正确写入磁盘,Postgres在PG 11及以上版本中通过在fsync()失败时强制恢复来解决此问题。

glibc 2.28引入了什么问题?

glibc 2.28引入的排序问题导致索引错误,影响了查询结果,社区已增加检测机制以应对这一问题。

为什么建议禁用透明大页(THP)?

建议禁用THP以避免性能下降,因为THP可能导致后台进程冻结,影响数据库的响应时间。

Postgres如何处理fsync()失败的情况?

Postgres在PG 11及以上版本中通过强制恢复WAL来处理fsync()失败的情况,而不是依赖操作系统重试。

在Postgres中,如何确认THP是否启用?

可以通过命令cat /sys/kernel/mm/transparent_hugepage/enabled来确认THP是否启用。

➡️

继续阅读