2017-09-06 17 views
0

Greenplumでいくつかのテーブルを作成し、挿入の更新と削除操作を実行しました。定期的に私は真空操作も行っています。私はそれに膨らみが見つかりました。膨らみを取り除くための解決策https://discuss.pivotal.io/hc/en-us/articles/206578327-What-are-the-different-option-to-remove-bloat-from-a-tablegreenplumテーブルからbloatを削除する

ただし、テーブルを切り捨ててデータを再挿入すると、膨らみが取り除かれます。テーブルからデータを切り捨てるのは良い方法ですか?

答えて

0

ヒープテーブル(デフォルトの記憶域)でUPDATEおよびDELETEステートメントを実行しており、定期的にVACUUMを実行している場合は、デザインによって膨らんでしまいます。デフォルトのPostgreSQLストレージメカニズムに似ているヒープストレージは、MVCC(Multi-Version Concurrency Control)を使用してリード一貫性を提供します。

レコードを更新または削除すると、古い値がテーブルに残っていて、UPDATEまたはDELETEコマンドを発行する前に実行中で、開始されたトランザクションでも読み取ることができます。これにより、テーブルに読み取りの一貫性が提供されます。

VACUUMステートメントを実行すると、データベースは古い行を上書き可能としてマークします。ファイルを縮小しません。上書きできるように行をマークするだけです。次にINSERTまたはUPDATEを実行すると、古いデータを新しいデータに使用できるようになりました。

したがって、実行中のVACUUM間でテーブルの10%を更新または削除すると、おそらく約10%の膨れがあります。

Greenplumには、MVCCを使用せず、代わりに可視性マップを使用するAppend-Optimized(AO)ストレージもあります。ファイルも少し小さくなっているので、パフォーマンスが向上します。失効した行は可視性マップで隠され、gp_appendonly_compaction_thresholdの割合に達するまでVACUUMは何もしません。デフォルトは10%です。 AOテーブルに10%の膨らみがあり、VACUUMを実行すると、テーブルが自動的に再構築されます。

下位互換性の理由から、Append-Optimizedは「appendonly」と呼ばれますが、UPDATEとDELETEは許可されています。 AOテーブルの例を次に示します。

CREATE TABLE sales 
(txn_id int, qty int, date date) 
WITH (appendonly=true) 
DISTRIBUTED BY (txn_id); 
関連する問題