2009-06-13 6 views
3

データベースのメンテナンススクリプトを作成していて、ポストグルの中でそれを決める方法はありますか?postgresqlで真空/再インデックスが必要なテーブルを自動的に決定する方法

私はこのような注意を必要とするテーブルを分類する:インデックスの再作成必要

  • テーブルを掃除する必要が

    • テーブルを

    は、私が何かを参照してください(私たちは、これは、パフォーマンスに大きな違いが見つけます。)おおよその約束here

  • 答えて

    4

    あなたは自動真空を再発明しようとしているようです。どんな理由でも、それを有効にして仕事をさせることはできないのですか?あなたがしたい実際の情報については

    は、pg_stat_all_tablespg_stat_all_indexesを見てください。

    データの使い方の良い例は、自動真空源を見てください。ビューに直接照会するのではなく、その情報を使用します。

    +2

    haha​​、あなたの誠意のおかげで、私たちは過去に自動真空を使用していましたが、途中で止まっていました。私は、私たちの最も忙しい時間の真ん中で空を始めるのではなく、ダウンタイムを利用することを好みます。これは私が最後にそれを見たときよりも設定可能でない限り。 –

    +0

    これはしばらく前からのようです。あなたは解決策を考案しましたか?私はまた、私たちの使用に欠けている自動真空を発見しました。 –

    +0

    @ samyiまだ何もありません。オートバキュームにはまだ忙しい時間を避けるためのパラメータがないことがわかります。 –

    0

    私はあなたが本当に自動真空を検討すべきだと思います。テーブルごとに

    • (あなたはどのように多くのテーブルを持っていますか?)のcriteriasを定義します。ただし

      、私は右のニーズを理解しなかった場合、それは私がやるものですたとえば、

    、talbe「fooが」それを行うための独自のアプリケーションを書くREINDEXすべてのX新しいレコードも、すべてのXの更新を真空、

    • を削除または挿入する必要があります。

    毎日、テーブルの状態を確認し、ログに保存して(時間差による行の違いを比較する)、一致するテーブルを再インデックス/空白化します。

    は少しハッキングをね、しかし、私はすべてのテーブルへのCRUDアクションの後に実行する同じトリガ機能を追加することについてどのようにcustom-autovacuum-with-custom-'triggers'-criteria

    0

    を行うには良い方法だと思います。

    この関数はテーブル名を受け取り、テーブルの状態をチェックし、そのテーブルに対してvacuumまたはreindexを実行します。十分な長さ

    は「シンプル」PL/SQLトリガーにする必要がありますが、それらは簡単なことはありません...

    また、あなたのDBマシンが十分に強力であれば、そしてあなたのダウンタイム、ちょうど毎晩スクリプトを実行します。すべてを再インデックス化し、それをすべて真空にしてください...あなたの基準がテスト時(夜間)に満たされていなくても、それが近くにあっても(基準を下回るレコードはほとんどありません)、次の問題は発生しませんそれが基準に達する日...

    関連する問題