我正在使用postgres-9.3(在CenOS 6.9中)并试图理解pg_buffercache表输出。
我跑了这个:
SELECT c.relname,count(*) AS buffers FROM pg_class c INNER JOIN
pg_buffercache b ON b.relfilenode=c.relfilenode INNER JOIN
pg_database d ON (b.reldatabase=d.oid AND
d.datname=current_database()) GROUP BY c.relname
ORDER BY 2 DESC LIMIT 5;
,下面的输出显示了一个使用6594缓冲区的表。这是在我有大量INSERT,然后在data_main表中使用SELECT和UPDATE的时候。
relname | buffers
------------------+---------
data_main | 6594
objt_main | 1897
objt_access | 788
idx_data_mai | 736
我还运行了“select * from pg_buffercache where dirty”,显示了大约50个条目。
我该如何解释这些数字?缓冲区计数是否与我创建扩展或最近的扩展后的所有事务相对应。如何使用适当数量的缓冲区查明我的具体操作?
这是我的设置:
# show shared_buffers;
shared_buffers
----------------
1GB
# show work_mem;
work_mem
----------
128kB
# show maintenance_work_mem;
maintenance_work_mem
----------------------
64GB
当前的免费mem(我在这台机器上有64GM内存)。我有一个混合工作负载机器,具有INSERTS周期性突发和大量SELECTS。目前,数据库和表格很小,但将增长到至少200万行。
$ free -m
total used free shared buffers cached
Mem: 64375 33483 30891 954 15 15731
/+ buffers/cache: 18097 46278
Swap: 32767 38 32729
基本上,我试图了解如何正确使用此pg_buffercache表。我应该定期运行此查询吗?我是否需要相应地更改我的shared_buffers。
答案 0 :(得分:0)
我做了一些阅读和测试,这就是我找到的。在此处找到了一个有用的查询:How large is a "buffer" in PostgreSQL
以下是其他有类似问题的注意事项。
您需要为每个数据库创建扩展名。所以" \ c db_name"然后"创建扩展pg_buffercache"。
运行查询相同。
重新启动数据库会清除查询。