2016-07-26 5 views
2

私はHeroku上のDevレベルデータベースが約63GBで、約990万行に達しています(この階層では1,000万に近い)。 Postgresのコントロールパネルで/ pginfo:table-sizeを使用すると、およそ470万行が表示されますが、まだ63GBになっています。私はサイズを減らす必要があるので、彼は次の層の限界です。ローを削除した後、Heroku Postgresデータベースのサイズが下がらない

私は掃除を試みましたが、pginfo:bloatは膨らみがわずか約3GBであると言いました。ここで何が起こっているのか?

答えて

1

[vacuum][1]テーブルを編集している場合は、サイズ1のディスクがまだ変更されていないことを心配しないでください。スペースは新しい行によって再利用可能とマークされています。したがって、さらに470万行も簡単に追加でき、ディスク上のサイズも増えません。

VACUUMの標準形式では、テーブル内のデッドローバージョンと、 インデックスが削除され、今後の再利用に使用できる領域が示されます。ただし、 は、 特別な場合を除いて、テーブルの末尾にある1つ以上のページが完全にフリーになり、排他的なテーブルロックを簡単に取得できる場合を除き、オペレーティングシステムにスペースを返しません。 対照的に、VACUUM FULLは、デッドスペースのないテーブルファイルの完全な 新しいバージョンを記述することによって、テーブルを積極的に圧縮します。これにより、テーブルのサイズが になりますが、時間がかかります。また、操作 が完了するまで、表の新しいコピーのために余分なディスク容量が でなければなりません。

あなたはディスク上のそれを縮小したい場合は、テーブルをロックし、動作中は、テーブルのサイズと同じくらいの余分なスペースを必要FULL真空にする必要があります。だから、これを試す前にあなたのクォータをチェックしなければならなくなり、あなたのサイトは応答しなくなります。

更新
あなたはこのようなのpg_classテーブルを照会することによって、ディスク上のデータのサイズに関する大まかなアイデアを得ることができます。

SELECT SUM(relpages*8192) from pg_class 

別の方法は、このような性質のクエリです:

SELECT pg_database_size('yourdbname'); 

このリンク:https://www.postgresql.org/docs/9.5/static/disk-usage.htmlは、ディスクの使用に関する追加情報を提供します。

+0

ありがとうございました。誰か他の解決策が出てくるかどうかを確認するために、これを1日ほど開いたままにしておきます。理想的にはテーブルのサイズを小さくしたいので、次の層にアップグレードするとDBの実際のサイズを見ることができます(64GBの制限に収まるように)ので、私のサイトを持つ余裕はありません応答しない。 – ntesler

+0

興味深い...その結果は約680億だった。そのバイトですか? – ntesler

+0

はい、元の列はページ内にあり、ページは8kですので、私は加算しました。もちろん、真空が完了するまで走った?このpg_class情報は、新しくvacuumされたテーブルに対してのみ正確です。 – e4c5

関連する問題