最近、職場で slony (バージョン 2.0.2) をインストールする必要がありました。すべて正常に動作しますが、私の上司はレプリケーション中にスレーブ ノードの CPU 使用率を下げたいと考えています。ネットで検索しても、これに対するあからさまな答えは見つかりません。CPU 使用率を減らす (または更新を長期間にわたって分散させる) のに役立つ提案は、非常に高く評価されます!
3 に答える
ここで一般的な PostgreSQL のチューニングを調べましたか? サーバーは、処理するのに十分なリソースが与えられておらず、デフォルトの構成が非常に小さい場合、冗長な作業を行うために多くの CPU サイクルを浪費する可能性があります。 PostgreSQL サーバーのチューニングはここで役立つガイドです。shared_buffers と checkpoint_segments は、スレーブ上で大幅に改善される可能性がある 2 つのパラメーターです (残りの多くは、クエリ時間の改善にのみ役立ちます)。
Magnus は正しいかもしれません。これは、データベースのトラフィックが非常に多いという事実の兆候にすぎない可能性があります。Slony は、特定の DML 操作のリソース使用量を効果的に増やします。データがレプリケーション マスターに CRUD されるだけでなく、それが発生するたびに、Slony トリガー (変更リスナーと考えてください) が同一のトランザクションを生成し、クラスターの他のメンバーでそれを実行する Slon プロセス。
ただし、この問題には他に 2 つの説明/解決策が考えられます。
考えられる解決策は、データベース ホストとは別のマシンで slon プロセスを実行することです。単一マスター/単一スレーブのレプリケーション スキームを使用している場合でも、物理的に異なるハードウェア セット (同じサーバー上) で slon レプリケーション デーモンを実行することは、安定性、役割分離、およびパフォーマンス (それはあなたです) の点で有利です。理想的には LAN セグメント)。Slony については、特定のデータベース ホストと同じマシンで実行する必要があると言うものはありません。そのため、別の場所 (「トラフィック コントローラー」と考えてください) に配置すると、データベース ホストのリソース負荷が軽減される可能性があります。これは、マシンの安定性とスケーラビリティの両方の点でも優れています。
これは、最近 Slony を使い始めたことによる一時的な問題である可能性もあります。新しいノードをレプリケーション セットに最初にサブスクライブすると、そのノード (および、ある程度その親) は、サブスクリプション プロセス中に非常に高い CPU 負荷 (および場合によってはディスク負荷も) を経験します。内部でどのように機能するかはわかりませんが、サブスクライブされたノードにすでにどれだけのデータがあったかに応じて、Slony はマスターのデータを、複製されたテーブル内のスレーブに存在するすべてのデータに対してチェックします。データが欠落しているか異なる場合は、データをスレーブにコピーします。これらは、潜在的に CPU を集中的に使用する操作です。特に大規模なデータベースでは、サブスクリプションのプロセスに非常に長い時間がかかることがあります (私の場合は 1 日以上かかりましたが、データベースは 20GB を超えています)。この間、CPU 負荷は非常に高くなります。Slony が何をしようとしているのかを確認する簡単な方法は、pgAdmin の Server Status viewerは、制限されていますが、ここで役立つ情報を提供します。CPU 負荷が高いノードで、「レプリケーションのためのテーブルの準備」または「レプリケーション後のテーブルのクリーンアップ」操作が多数進行中の場合、サブスクリプションが完了していない可能性があります。ただし、pgAdmin のステータス ビューアはあまり有益ではありません。Slony を直接使用してサブスクリプションの進行状況を確認する、より信頼性の高い方法があります。Slonyログ分析ドキュメントのセクション4.7.6.4は、SUBSCRIBE SETのドキュメントを読むのと同じように、それを助けるかもしれません(ボックス化された警告メッセージと「危険/非直感的な動作」セクションに特に注意してください。セットがまだサブスクリプションのプロセスにあるかどうかを判断するための簡単で決定的なハックは、MERGE SET を実行し、それを空 (または空でない) 他のセット. サブスクリプションがまだ実行中の場合、MERGE SET は「サブスクリプションが進行中です」というエラーで失敗します. ただし、そのハックは Slony 2.1 では機能しません. MERGE SET はサブスクリプションが終了するまで待つだけです.
CPU 使用率を減らす最善の方法は、データベースに入れるデータを減らすことです:-)
それ以外は、sync_intervalを試すことができます。それはあなたが探しているものかもしれません。