私はGreenplumにテーブルを作成し、そこに挿入更新更新操作を実行しました。私はテーブル上でvacuumコマンドを実行し、正常に実行されたことを示しています。 しかし、私はコマンドselect * from gp_toolkit.gp_bloat_diag;
を実行します。同じテーブル名を表示します。 真空を繰り返し実行した後も、コマンドselect *からgp_toolkit.gp_bloat_diagのリストにテーブル名を表示します。 テーブルに盛り上がりがなく真空が適切であることを確認する方法を教えてください。greenplumの真空テーブルにアクセスできない
答えて
これはDifferent option to remove bloat from a table
VACUUMが肥大化が、VACUUM FULL意志を削除しないことを知っているを参照してください。例の下
表作成のチェック:
DROP TABLE IF EXISTS testbloat;
CREATE TABLE testbloat
(
id BIGSERIAL NOT NULL
, dat_year INTEGER
)
WITH (OIDS = FALSE)
DISTRIBUTED BY (id);
挿入1Mレコードをテーブルに:
INSERT INTO testbloat (dat_year) VALUES(generate_series(1,1000000));
テーブルのサイズを確認します。サイズは43メガバイト
SELECT 'After Inserting data',pg_size_pretty(pg_relation_size('testbloat'));
を更新した後、テーブルのサイズを確認するテーブル
UPDATE testbloat
SET dat_year = dat_year+1;
内のすべてのレコードを更新しています。サイズは85MBです。それが原因VACUUM後のテーブルのサイズを確認するテーブル
Vacuum testbloat;
に真空を適用するため、更新操作
SELECT 'After updating data',pg_size_pretty(pg_relation_size('testbloat'));
で引き起こされた鼓脹症の増加しています。サイズはまだ85MBです。
Vacuum FULL testbloat;
は、VACUUM FULLの後にテーブルのサイズを確認するテーブルの上にFULL VACUUMを適用
SELECT 'After Vacuum', pg_size_pretty(pg_relation_size('testbloat'));
。サイズはまだ43MBです。テーブルの肥大化が明確にするため
SELECT 'After Vacuum FULL ', pg_size_pretty(pg_relation_size('testbloat'));
ではなかったとして、それが小さくてしまった:
VACUUMは、膨張(表中の死んだタプル)を削除し、スペースは新しいタプルで再利用することがことができます。
VACUUMとVACUUM FULLの違いは、FULLがrelfiles(テーブルストレージ)を再書き込みし、OSの領域を再利用することです。
gp_toolkit.gp_bloat_diagはすぐには更新されませんが、テーブルの統計情報が更新されたときにANALYZEの直後に更新されます。
テーブルが非常に小さい場合や、システムカタログテーブルが大きく成長していて、たくさんのオプションがない場合は、VACUUM FULLを実行することをお勧めします。
VACUUM FULLは非常に高価です。 非常に大きなテーブルでは、予期しない実行時間が発生する可能性があり、この実行中にテーブルが排他ロックされます。
一般的に、頻繁なVACUUMはテーブルが不必要に大きくならないように保存します。死んだタプルは削除され、スペースは再利用されます。
あなたは重要な肥大化し、デッドスペースの多い大規模なテーブルを持っている場合、あなたはおそらく再編成することになるでしょう - スペースを再利用するための安価な方法です。
alter table <table_name> set with (reorganize=true) distributed (randomly -- or -- by (<column_names1>,<column_names2>....)
真空が期限切れの行が占有するスペースではなく、それはそれらのスペースが同じテーブル自体への新しい行の後の挿入のために再利用されるようにマークリリースはありません。したがって、あなたがvacuumを実行した後でさえ、テーブルのサイズは下がらないでしょう。代わりに、完全な真空使用の
、CTASを使用し、それは完全な真空よりも高速で、真空フルとは違ってそれはpg_classのテーブルのロックを保持していません。
CTAS操作の後、テーブルの名前を古いテーブル名に変更します。
- 1. は写真にアクセスできない
- 2. PHP致命的なエラー:空のプロパティにアクセスできない
- 3. なぜデータセットのテーブルにテーブル名でアクセスできないのですか?
- 4. 空のコンテナサービスにデプロイされたWebアプリケーションにアクセスできない
- 5. greenplumテーブルからbloatを削除する
- 6. SQLiteのコマンドラインでテーブルにアクセスできない
- 7. MYSQLの一部のテーブルにアクセスできない
- 8. iOS Swift保存された写真のEXIFデータにアクセスできない
- 9. System.Windows名前空間にアクセスできない
- 10. System.Management名前空間にアクセスできない
- 11. ローカルページを指しているIframeが空でアクセスできない
- 12. System.IO名前空間でIsolatedStorageにアクセスできないのはなぜですか?
- 13. jQuery.Widgetsの名前空間にアクセスできないのはなぜですか?
- 14. サブクエリの派生テーブルがメインテーブルにアクセスできない
- 15. Ionic + sqlite:iosのsqliteテーブルにアクセスできない(cordova SQLite)
- 16. クエリでテーブルの列が空でない
- 17. GREENPLUMのlog_alert_ *テーブルのエントリを停止するには?
- 18. 入力が0のときにPHPが空要素にアクセスできない
- 19. Dreamfactoryで突然mysqlテーブルにアクセスできない
- 20. 真空後にSQLiteデータベースが大きくなる
- 21. 写真フレームワーククラッシュ: 'このアプリケーションは写真データにアクセスできません。'
- 22. greenplumのインクリメンタルロード
- 23. Hive内部テーブルにアクセスできない - AccessControlException
- 24. なぜ私のODBC dBaseテーブルにアクセスできないのですか?
- 25. shardTestFilesが真のときにonPrepareのbeforeLaunchに設定されたグローバル変数にアクセスできない
- 26. GreenPlumは外部テーブルをどのように実装していますか?
- 27. テーブルが空のときにテーブルを表示しない方法は?
- 28. どのようにデータフレーム(pythonで)からgreenplumテーブルにデータを挿入できますか?
- 29. オブジェクトにアクセスできない
説明のため、ありがとうございますVacuum FULL avee_dev.year1; avee_dev.year1とは何ですか? – vkumar
申し訳ありません。私はそれを変更しました –
大丈夫です。私はtalendジョブと1時間ごとにレコードを更新し、レコードを20個のテーブルに挿入して削除しています。テーブルを真空にしなければならない頻度は何でしょうか?挿入、更新、削除の直後、または1日に一度真空引きする必要がありますか? – vkumar