2017-06-30 15 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個のバッファを使用してテーブルのいずれかを示しました。これは、data_mainテーブルでINSERTに続いてSELECTとUPDATEが行われたときです。

 relname  | buffers 
    ------------------+--------- 
    data_main   | 6594 
    objt_main   | 1897 
    objt_access  |  788 
    idx_data_mai  |  736 

私はまた、約50のエントリを示した "汚いですpg_buffercache SELECT * FROM" 走りました。

これらの数字はどのように解釈する必要がありますか?私が拡張機能を作成してから、または最近のものを作成して以来、バッファカウントはすべてのトランザクションに対応していますか?適切な量​​のバッファを使用して私の特定の操作を調べるにはどうすればよいですか?

# show shared_buffers; 
    shared_buffers 
    ---------------- 
    1GB 

# show work_mem; 
    work_mem 
---------- 
    128kB 
# show maintenance_work_mem; 
    maintenance_work_mem 
    ---------------------- 
    64GB 

そして現在の空きMEM(私はこのマシンで64GMメモリを持っている):

は、ここに私の設定です。そして、私はINSERTのピリオドバーストとたくさんの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"、 "create pg_buffercache"となります。

  2. クエリを実行するのと同じです。

  3. データベースを再起動すると、クエリがクリアされます。

関連する問題