3

問題があり、アドバイスが必要です。私は普段は開発者ですが、会社での最近の人事異動により、IT 担当者は私だけになりました。そのため、多くの未知の領域に分岐する必要があり、本当に助けが必要です。

postgres 8.3 を実行しています。データベースは、トランザクション ID のラップアラウンドを防ぐために、ラージ オブジェクト テーブル (pg_catalog.pg_large_object) で AUTO_VACUUM を実行しようとしています。基本的な意味は理解できたと思います。問題は、このテーブルが 750G で 4 億 5200 万行あることです。AUTO_VACUUM はディスクに大量の書き込みを行っており、ディスク領域を食い尽くしています (昨日、1TB の最後の 250GB を消費しました)。緊急停止の後、1100 GB のスペースと 100 GB の空き容量でバックアップして実行しています。ただし、postgres がバックアップされて実行されると、AUTO_VACUUM プロセスが再び開始されました。トランザクションを強制終了すると (これはお勧めできません)、再起動するだけです。

だからここに私の質問があります:

1) そのテーブルの場合、AUTO_VACUUM プロセスを完了するにはどのくらいのスペースが必要ですか? これはどうやって判断するのですか?

2) この状況を処理するようにサーバーを構成するより良い方法はありますか?

3) 2 に「いいえ」の場合、この問題をどのように修正することを提案しますか?

私は DBA ではなく、Linux サーバーの管理経験もありません。開発者として多くの帽子をかぶるよう求められているだけです。DBA コンサルタントに問題の解決を依頼しようとしていますが、会社は反対しています。私の最善の努力にもかかわらず、彼らは問題の深刻さを理解していないようです.

提案?コメント? アドバイスやガイダンスをいただければ幸いです。さらに情報が必要な場合は、お知らせください。

4

2 に答える 2

3

この問題を早急に解決しないと、データの破損を防ぐためにデータベースが緊急シャットダウンされ、txid ラップアラウンド vaccuum が完了するまでバックアップの開始が拒否されます。ログをチェックして、この時点にどれだけ近づいているかを確認します。次のようなメッセージが表示されます。

WARNING:  database "mydb" must be vacuumed within 177009986 transactions 
HINT:  To avoid a database shutdown, execute a database-wide VACUUM in "mydb". 

掃除機を殺して問題を後回しにしないでください。計画外のダウンタイムを許容できない限り、これを解決する必要があります。

大量のディスク容量を消費している理由は、おそらく、自動管理された freespacemap 設定を持たない古いバージョンを使用しており、max_fsm_pagesおよび/またはmax_fsm_relations. ログを確認してください。これらに関するメッセージが表示される場合があります。

残念ながら、事後的にこれらのパラメーターを上げることはできません。この古い PostgreSQL のインストールでは、テーブル内の空き領域に関する情報が失われています。適切なクリーンアップとリカバリにはCLUSTER、少なくともテーブル + インデックスのサイズと同じ空き領域が必要なテーブルが必要であり、実行中はテーブルを排他ロックする必要があります

pg_reorg強制的な txid ラップアラウンド防止に近づいているため、あまり侵入的でない緩和オプションのほとんどは、もはや利用できません。あなたの最善の策は、自動バキュームにジョブを完了するために必要なスペースを与えることです。または、ダウンタイムに対処してからCLUSTERテーブルVACUUM FREEZEを処理して、プロセスをより速く完了させます。

回復したら、大幅に増やして十分な大きさにmax_fsm_pagesすることをお勧めします。max_fsm_relationsこれらの古いバージョンのチューニングに関するアドバイスはたくさんあります。検索してください。

9.2 へのアップグレードを計画してください。これは、フリースペース マップを自動管理し (8.4 以降のバージョンと同様)、あらゆる種類の autovac 拡張機能を備えているため、最初からこれらのピクルスに陥るのを防ぐことができます。

この状況が絶望的な場合は、専門の PostgreSQL サポート プロバイダーに連絡することを検討してください。(適切な開示: 私は、リストされているプロバイダーの 1 つである 2ndQuadrant で働いています)。

于 2013-04-13T02:12:22.090 に答える
2

FreeNode の #postgresql (IRC) でのリアルタイム サポートは素晴らしいものです。多くの場合、目を覚まし、DBA/開発の詳細について話すことができる知識豊富な人々がいます。あまりお勧めできません。

于 2013-04-12T13:28:16.493 に答える