2

insert sql のみを生成する製品ログ データベースがあります. しかし, autovacuum プロセスは非常に多くのメモリを消費することがわかりました. ピーク時は約 16 GB かかります. そして約 2 か月ごとに発生します. 以下は詳細情報です. 任意の 1 つそれを知っている?

そして、テーブル skytf.urs_user_log_201105 には挿入操作のみがあり、更新、削除操作はありません。したがって、テーブルにはデッドタプルがないと思います! しかし、自動バキューム プロセスがテーブルで大量のメモリを消費するのはなぜでしょうか?

--top detail 
top - 16:39:46 up 225 days,  1:12,  1 user,  load average: 1.29, 1.51, 1.52
Tasks: 341 total,   2 running, 339 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.8%us,  5.3%sy,  0.0%ni, 85.5%id,  4.1%wa,  0.0%hi,  0.4%si,  0.0%st

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
29267 postgres  14  -1 27.0g  16g 2928 S  1.0 72.2 199:59.74 postgres: autovacuum launcher process  

上記から、autovacuum プロセスに約 16 GB かかることがわかります。

--current sql
postgres=# select datname, current_query from pg_stat_activity where current_query !='<IDLE>';
 datname  |                                    current_query                                    
----------+-------------------------------------------------------------------------------------
 skytf   | autovacuum: VACUUM skytf.urs_user_log_201105 (to prevent wraparound)




--table size
 skytf=> \dt+ urs_user_log_201105
                          List of relations
 Schema |        Name         | Type  | Owner  | Size  | Description 
--------+---------------------+-------+--------+-------+-------------
 skytf | urs_user_log_201105 | table | skytf | 62 GB | 
(1 row)

--memory state
postgres@logdb-> free -m
             total       used       free     shared    buffers     cached
Mem:         24104      24028         75          0          4       5545
-/+ buffers/cache:      18479       5625
Swap:        16386       8824       7561
4

2 に答える 2

4

これを見ると:

autovacuum: VACUUM skytf.urs_user_log_201105 (to prevent wraparound)

これは通常の自動バキュームではありません。トランザクションのラップアラウンドを防ぐために実行されています。この種の自動バキュームは、トランザクション ID が 20 億を超える前に実行する必要があります。ここで詳細を読む: http://www.postgresql.org/docs/8.3/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

vacuum_freeze_min_age、でその動作を制御できますvacuum_freeze_max_ageautovacuum無効にしているかどうかに関係なく、この種を無効にすることはできませautovacuumん。

于 2012-07-30T04:15:48.673 に答える
1

挿入操作のみがあり、更新、削除操作はありません。したがって、テーブルにはデッドタプルがないと思います!

メモリが機能する場合、autovacuum は実際に次の 2 つのことを行います。

  • 真空
  • 分析する

インサートしか得られない場合、最初のものは機能しません。しかし、PGが統計が少し変わったかもしれないと考えるとき、2番目はそうし続けます.

于 2011-06-15T10:58:03.047 に答える