PostgreSQL“ pg_prewarm”缓冲区大小

orders总共包含1,500,000张表彰。重新启动系统后,我运行以下查询:

SELECT pg_prewarm('orders'); EXPLAIN (ANALYZE,BUFFERS) SELECT * FROM orders WHERE o_totalprice < 100

哪个给出了以下缓冲区输出:

Buffers: shared hit=15768 read=10327

select语句不返回任何记录。

现在我的问题是,PostgreSQL如何计算缓冲区中需要15768个块?

sarah928 回答:PostgreSQL“ pg_prewarm”缓冲区大小

您的shared_buffers设置为128MB,对吧?

128 MB的共享缓冲区在缓存中转换为16384个8KB的块。

因此,当您运行pg_prewarm('orders')时,PostgreSQL将把整个表读入共享缓冲区。现在该表大于您的shared_buffers,因此读取最后一个块时,第一个块会再次“掉出”缓存,因为shared_buffers无法容纳所有块。

如果要在缓存中存储整个表,请增加shared_buffers

本文链接:https://www.f2er.com/3169644.html

大家都在问