我正在使用postgres-9.3(在CenOS 6.9中)並試圖理解pg_buffercache表輸出。閱讀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。