web-dev-qa-db-ja.com

Postgresqlデータベースの自動バキューム

Postgresql 9.5データベースで自動バキュームを設定しようとしていますが、テーブルの統計にはその証拠がありません。

Postgresql.confでは、自動バキュームはすでに有効になっています。

autovacuum = on

設定に加えて、私は(select * from pg_settings where category like 'Autovacuum'

autovacuum  on
autovacuum_analyze_scale_factor 0.1
autovacuum_analyze_threshold    50
autovacuum_freeze_max_age   200000000
autovacuum_max_workers  3
autovacuum_multixact_freeze_max_age 400000000
autovacuum_naptime  60
autovacuum_vacuum_cost_delay    20
autovacuum_vacuum_cost_limit    -1
autovacuum_vacuum_scale_factor  0.2
autovacuum_vacuum_threshold 50

このクエリを実行すると:

SELECT schemaname, relname, 
last_vacuum       , 
last_autovacuum   , 
last_analyze      ,
last_autoanalyze  
FROM pg_stat_all_tables
where schemaname = 'cdi'

私はこの結果を得る:

 relname last_vacuum last_autovacuum last_analyze last_autoanalyze 
 aa 11/11/2017 05:56 04/11/2017 03:24 13/11/2017 23:25 
 bb 09/10/2017 15:01 04/11/2017 03:55 09/10/2017 15:01 
 cc 13/09/2017 13:23 04/11/2017 03:55 11/11/2017 04:12 
 dd 14/09/2017 10:27 04/11/2017 03:55 12/11/2017 17:09 
 ee 14/09/2017 10:32 04/11/2017 03 :00
ff 11/10/2017 09:20 04/11/2017 03:48 13/11/2017 22:19 gg 04/11/2017 03:55
hh 04/11/2017 03:55
ii 04/11/2017 03:16 11/11/2017 06:51 ll 04/11/2017 03:16
mm 2017年4月11日03:55
nn 04/11/2017 03:55
oo 04/11/2017 03:55
pp 2017年4月11日03:00

効率的な自動真空があるようには見えません

誰かが自動真空を発生させる方法を教えてもらえますか?

これは私のテーブルです:

シーケンシャルスキャン156 
シーケンシャルタプルの読み取り5448762930 
インデックススキャン802121339750 
インデックスタプルのフェッチ800736733206 
タプルの挿入21907385 
タプルの更新6190 
タプル削除190337 
タプルHOT更新3958397 
ライブタプル59641911 
デッドタプル703334 
ヒープブロック読み取り13685226418 
ヒープブロックヒット786803454925 
インデックスブロックの読み取り5104418623 
インデックスブロックの読み取り3208275818736 
トーストブロックの読み取り0 
トーストブロックの読み取り0 
トーストインデックスブロックの読み取り0 
トーストインデックスブロックが0にヒット
最後のバキューム2017-10-1109:20:22.358935 + 02 
最後の自動バキューム
最後の分析2017-11-0403:48:49.753917 +01 
最後の自動分析2017-11-1322:19:08.47618 + 01 
バキュームカウンター1 
自動バキュームカウンター0 
分析カウンター10 
カウンター3の自動分析
テーブルサイズ6778MB 
トーストテーブルサイズ8192バイト
インデックスサイズ3969MB 
1

自動バキュームは、必要な場合にのみ実行されます。

  • 変更または削除された行が多すぎる場合は、最後のVACUUMを実行します。

  • トランザクションカウンターのラップアラウンドによるデータ損失を防ぐために「凍結」する必要があるほど古い行がある場合。

詳細については、 ドキュメント を参照してください。

一部のテーブルで自動バキュームが実行されなかった場合は、まだ実行する理由がなかった可能性もあります。

2
Laurenz Albe