-- perform a sequential scan over a large table
EXPLAIN (ANALYZE, BUFFERS) SELECT count(1) FROM ring_buffer_test;
这样就会显示缓冲区信息: Buffers: shared read=127285 ,而非缓存命中数。后续我会单独发布一篇文章,讲解如何解读执行计划中的缓冲区相关数据。
-- on dedicated servers with large RAM, 40% can work well
-- but always leave room for OS cache and other processes
ALTER SYSTEM SET shared_buffers = '8GB';
PostgreSQL 需要了解这个合并缓存以便进行查询规划。这就是effective_cache_size发挥作用的地方——它告诉规划师在估算成本时应假设多少总缓存(共享缓冲区+操作系统)。
-- estimate of total cache available (shared + OS)
SHOW effective_cache_size;
复制
值越高,规划者会倾向于支持索引扫描,假设数据可能被缓存在某处,即使不在共享缓冲区中。