文章摘要
作者在失业期间突发奇想,尝试通过调整Postgres的配置文件参数,使其查询处理速度尽可能变慢,而非通常的优化提速。这一挑战要求所有改动仅限于postgresql.conf中的参数,且数据库仍需能在合理时间内处理至少一个事务,避免完全停滞。这一实验展示了在Postgres中故意降低性能的难度,因为系统本身设计旨在防止此类低效配置。
文章总结
标题:让Postgres变慢42,000倍,因为我失业了
主要内容:
通常,人们都在思考如何让Postgres更快、更高效,但很少有人考虑如何让它变慢。作者在撰写一篇关于Postgres调优的指南时,突发奇想,决定尝试创建一个让Postgres查询处理速度尽可能慢的配置。尽管作者并不确定这样做的意义,但他还是进行了实验。
实验设置:
作者使用TPC-C基准测试,通过Benchbase工具模拟128个仓库,100个连接,每个连接尝试每秒处理10,000个事务。测试环境为Postgres 19devel,运行在Linux 6.15.6系统上,硬件配置为Ryzen 7950x处理器、32GB内存和2TB SSD。每个测试持续120秒,分为预热和实际测量两个阶段。
基线测试:
在默认配置下,Postgres的TPS(每秒事务数)为7082。接下来,作者通过调整postgresql.conf中的参数,试图让Postgres变慢。
缓存优化(反向):
Postgres通过缓存来提高读取效率,但作者希望强制所有查询使用最慢的读取方式。通过将shared_buffers从10GB降低到8MB,Postgres的速度降至原来的1/7。进一步将缓存降至2MB后,TPS降至500以下。
后台任务优化:
Postgres的自动清理(autovacuum)任务通常用于减少存储碎片,但作者通过调整相关参数,使其频繁运行,从而拖慢性能。通过设置autovacuum_vacuum_insert_threshold为1,autovacuum_naptime为1秒等,Postgres的速度降至原来的1/20。
WAL配置优化:
Postgres的WAL(Write-Ahead Logging)用于在提交更改前记录日志。作者通过调整WAL的刷新频率、检查点间隔等参数,进一步降低了性能。最终,Postgres的TPS降至两位数,仅为原来的1/70。
索引优化(反向):
虽然不能直接删除索引,但作者通过调整random_page_cost和cpu_index_tuple_cost参数,使得Postgres几乎不使用索引,从而进一步降低性能。最终,Postgres的TPS降至1以下,比默认配置慢了7,000多倍。
I/O单线程化:
通过将io_method设置为worker,并将io_workers设置为1,作者将所有I/O操作限制在一个线程中,最终使Postgres的TPS降至0.1以下,比最初慢了42,000倍。
总结:
通过调整32个参数,作者成功将Postgres的性能降至极低水平。虽然这一实验看似无意义,但它展示了Postgres配置对性能的巨大影响。作者还提供了详细的参数配置,供有兴趣的读者尝试。
最终感想:
在完成这篇文章后,作者感到腰酸背痛,决定出去走走。
评论总结
评论内容总结:
正面评价:
- 创意与幽默:多位评论者赞赏内容的创意和幽默感。例如,vichyvich提到“I love this! It would be great to have follow-ups and series of books about how to make things worse, as a way to learn to make things better.”(我喜欢这个!如果能有一系列关于如何把事情搞糟的书,作为学习如何把事情做好的方式,那就太好了。)
- 写作风格:sastraxi称赞了作者的写作风格和表达清晰度:“Great writing style and articulation of thought! That was a fun read”(写作风格很棒,思维表达清晰!读起来很有趣。)
建议与改进:
- 速度与效率:snickerdoodle12提出了对速度的期望:“Excellent. Now do 42,000x faster please.”(很棒。现在请做得快42,000倍。)
- 反向思维的价值:gerdesj认为反向思维有助于优化:“If you are ever going to get to grips with optimizing something, why not do the opposite first or as a foil?”(如果你想掌握优化某件事的方法,为什么不先做相反的事情或作为对照?)
其他观点:
- 类比与引用:shmerl将内容与《A Ticket to Tranai》相提并论:“Reminds A Ticket To Tranai.”(让我想起了《A Ticket to Tranai》。)
- 默认设置的反向思考:Waterluvian认为从默认设置的反方向出发有助于理解其重要性:“Honestly, walking away in the wrong direction from default settings seems like a great way to really get a feel for their weight.”(老实说,从默认设置的反方向出发似乎是真正感受其重要性的好方法。)
总结:评论者普遍对内容的创意、幽默和写作风格表示赞赏,同时也提出了对速度和反向思维价值的建议。部分评论者还提到了与其他作品的类比以及对默认设置的反向思考的认可。