2017-06-30 95 views
0

我正在使用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。

回答

0

我做了一些閱讀和測試,這是我發現的。在這裏找到一個有用的查詢:How large is a "buffer" in PostgreSQL

以下是其他人有類似問題的幾個注意事項。

  1. 您需要爲每個數據庫創建擴展名。因此「\ c db_name」然後「創建擴展pg_buffercache」。

  2. 與運行查詢相同。

  3. 重新啓動數據庫會清除查詢。