Postgres 的 David Rowley 进行了一项相当重大的更改,以提高该数据库服务器的性能并减少内存管理的开销。该更改将块头大小的大小从 16 个字节减少到 8 个字节,反过来,这项工作应该会导致更有效的内存使用。
此处所做的更改将我们所有 3 种内存上下文类型的块头大小减少到仅 8 个字节。对于中小型分配,这显着增加了我们可以在给定块上放置的块数,从而更有效地使用内存。
此外,此提交彻底改变了指向 palloc 内存的指针必须直接以指向拥有内存上下文的指针作为前缀的规则,相反,我们现在坚持它们直接以 8 字节值作为前缀,其中最不重要的 3 -bits 设置为一个值,以指示指针属于哪种类型的内存上下文。使用这 3 位作为索引(称为 MemoryContextMethodID)到存储每种内存上下文类型的方法的新数组,我们现在能够将给函数的指针传递给函数,例如 pfree() 和 repalloc()特定于该上下文实现,以允许他们设计自己的方法来查找拥有给定分配的内存块的内存上下文。
…
更多关于内存开销的 PostgreSQL 性能优化的详细信息可以通过这个提交找到。
早先关于减少 PostgreSQL 内存开销的讨论看到,Rowley 在 Ryzen Threadripper 工作站上的只读简单工作负载的吞吐量性能提高了 17%。
当它在稳定的 PostgreSQL 版本中首次亮相时,看看这种内存开销减少如何在现实世界中发挥作用肯定会很有趣。但是由于 PostgreSQL 15 已经在今年晚些时候发布之前进行了分支,因此预计这种变化要到 PostgreSQL 16 才能实现。
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun185906.html