2017-08-20 6 views
3

私たちのpostgresデータベースで大量の行を削除し、後でvacuum分析を実行しました。ポストグルでスペースを解放しない行を大量に削除した後の真空解析

ディスク使用量がAWS RDSコンソールであまり動かなかったことに気付きました。

テーブルサイズがあまり動かなかったことに基づいてクエリを実行しようとしました。

SELECT *, pg_size_pretty(total_bytes) AS total 
    , pg_size_pretty(index_bytes) AS INDEX 
    , pg_size_pretty(toast_bytes) AS toast 
    , pg_size_pretty(table_bytes) AS TABLE 
    FROM (
    SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (
     SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME 
       , c.reltuples AS row_estimate 
       , pg_total_relation_size(c.oid) AS total_bytes 
       , pg_indexes_size(c.oid) AS index_bytes 
       , pg_total_relation_size(reltoastrelid) AS toast_bytes 
      FROM pg_class c 
      LEFT JOIN pg_namespace n ON n.oid = c.relnamespace 
      WHERE relkind = 'r' 
) a 
) a order by total_bytes desc; 

これは正常ですか?またはディスクスペースがまったく再生されていませんか?

答えて

7

VACUUMは、デッドタプルで占有されているストレージを再利用します。つまり、再利用可能なテーブルファイルとインデックス内のスペースをマークしますが、ディスクスペースを解放しません。

私が望むのは、実際に存在するデータだけを保持しながら、テーブル全体とインデックス全体を書き換えるコマンドだと思います。これは、CLUSTER、VACUUM FULL、またはテーブルの書き換えを必要とするALTER TABLEの形式のいずれかです。特定の順序でクラスタリングすることでパフォーマンスが向上する場合は、今すぐに実行するのがよいでしょう。

テーブルをロックするので、テーブルが小さく、数秒のダウンタイムで暮らすことができない限り、中断のないアクセスが必要なライブサーバーでは実行しないでください。

関連する問題