2017-01-10 19 views
0

私はPostgreSQL 8.2でテーブルのデッドタプルとライブタプルを見つけたいと思っています。 PostgreSQL 8.2をベースにしたGreenplum MPP Databaseシステムを始めました。PostgreSQL 8.2(Greenplum用)のデッドタプル(断片化)を見つけるには?

デフォルトのMVCCアーキテクチャのため、テーブルの不完全なタプルを見つけて、それをVACUUMにする必要があります。

PostgreSQLの新しいバージョンでは、デッドタプルを見つける方法を知っています。私はすでにこれについて2つの記事を共有しています。

PostgreSQL: How to check Table Fragmentation using pgstattuple module

PostgreSQL: Script to find total Live Tuples and Dead Tuples (Row) of a Table

いずれかがこの上で私を助けることができますか?

ありがとうございます!

+1

それはPostgreSQLの8.2に基づいている場合、それは自動バキュームを持っている必要があります。あなた自身でそれを理解しようとするのではなく、それを使用してください。 –

+0

返信ありがとうございます、はいautovacuumがありますが、私は多くのテーブルを持っており、それぞれのサイズは約150GBです。だから、手作業も必要です。 – Anvesh

+0

なぜですか?あなたが必要とするように自動バキュームを設定できませんか? –

答えて

3

オートバイを使用しないでください。 GreenplumはPostgreSQLではなく、自動バキュームはデータベースでは機能しません。 PostgreSQLでGreenplumの投稿にタグを付けないことを強くお勧めします。誤った情報が得られる可能性が高いからです。それは、OSXとBSDにタグを付けることについての質問を投稿するようなものです。肥大化して

真空ヒープ・テーブル:

psql -t -A -c "SELECT E'VACUUM \"' || bdinspname || E'\".\"' || bdirelname || E'\";' FROM gp_toolkit.gp_bloat_diag WHERE bdinspname <> 'pg_catalog'" | psql -e 

しかし、ほとんどのGreenplumであなたのテーブルのすべての可能性が高いMVCCを使用して、代わりに短いため、「アペンド最適化された」またはAOを使用して、ヒープベースではありません。可視性マップを使用して、削除された行を非表示にし、ファイルはより小さく、より速くなります。また、表を圧縮して列指向にすることもできます。

AOテーブルもメンテナンスが必要ですが、ヒープテーブルと異なり、gp_appendonly_compaction_threshold GUCによって制御された圧縮しきい値が組み込まれています。隠し行の割合が10%を超えると、すべてのAOテーブルとデータベースがテーブルを自動的に再構築します。

GreenplumはまだPostgreSQLから継承されたフリーズ時代の問題を抱えています。このスクリプトは通常、行を返しませんが、非常に長い時間触れていないテーブルを使用している古いインストールでは、テーブルを空にすることがあります。

vacuum_freeze_min_age=$(psql -t -A -c "show vacuum_freeze_min_age;") 
psql -t -A -c "SELECT E'VACUUM \"' || n.nspname || E'\".\"' || c.relname || E'\";' FROM pg_class c join pg_namespace n ON c.relnamespace = n.oid WHERE age(relfrozenxid) > $vacuum_freeze_min_age AND c.relkind = 'r'" | psql -e 

あなたがいる間に、分析されたbを定期的にすべてのテーブルを分析するようにスケジュールする必要があります。例:

analyzedb -d gpadmin -s tpcds 

はカタログを忘れないでください!

psql -t -A -c "SELECT E'VACUUM ANALYZE \"' || n.nspname || E'\".\"' || c.relname || E'\";' FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'pg_catalog' AND c.relkind = 'r'" | psql -e 

このカタログはインデックスを再度インデックスを付け:

reindexdb -s 
+2

質問が投稿された直後にPostgresタグを削除しましたが、Anveshがそれを再び追加しました。編集戦を開始したくありませんでした。 –

+0

Jonさんに感謝します。 postgresqlタグも削除されました。 – Anvesh