6.4. MariaDB クラスターでのデータベースレプリケーションのパフォーマンスのテスト

MariaDB Galera Cluster のパフォーマンスを確認するには、特定の wsrep データベース変数をチェックして、クラスターのレプリケーションスループットでベンチマークテストを実行します。

これらの変数の 1 つのクエリーを行うたびに、FLUSH STATUS コマンドは変数の値をリセットします。ベンチマークテストを行うには、複数のクエリーを実行し、差異を分析する必要があります。この差異は、Flow Control がクラスターのパフォーマンスにどの程度影響を及ぼしているかを判断するのに役立ちます。

Flow Control は、クラスターがレプリケーションを制御するのに使用するメカニズムです。ローカルの受信キューが一定のしきい値を超えると、キューのサイズが減少するまで、Flow Control はレプリケーションを一時停止します。Flow Control の詳細は、Galera Cluster の Web サイトで Flow Control を参照してください。

手順

  • 以下のコマンドを実行します。その際、<variable> を確認する wsrep データベース変数に置き換えます。

    $ sudo podman exec galera-bundle-podman-0 sudo mysql -B --password="[MYSQL-HIERA-PASSWORD]" -e "SHOW STATUS LIKE <varible>;"

以下の表には、データベースレプリケーションのパフォーマンスをテストするのに使用できるさまざまな wsrep データベース変数をまとめています。

表6.3 データベースレプリケーションのパフォーマンスを確認するためのデータベース変数

変数概要使用方法

wsrep_local_recv_queue_avg

最後のクエリー後のローカル受信 Write Set キューの平均サイズ

値が 0.0 を超えていれば、ノードが受信速度に対応して Write Set を適用できないことが分かります。この場合、レプリケーションのスロットリングがトリガーされます。このベンチマークの詳しい情報は、wsrep_local_recv_queue_minwsrep_local_recv_queue_max を確認してください。

wsrep_local_send_queue_avg

最後のクエリー後の送信キューの平均長さ

値が 0.0 を超えていれば、レプリケーションのスロットルおよびネットワークスループットの問題の可能性が高いことが分かります。

wsrep_local_recv_queue_min および wsrep_local_recv_queue_max

最後のクエリー後のローカル受信キューの最小/最大サイズ

wsrep_local_recv_queue_avg の値が 0.0 を超える場合、これらの変数を確認してキューサイズの範囲を判断することができます。

wsrep_flow_control_paused

最後のクエリー以降、Flow Control がノードを一時停止した時間の割合

値が 0.0 を超えていれば、Flow Control がノードを一時停止したことが分かります。一時停止の時間を把握するには、wsrep_flow_control_paused の値をクエリー間の秒数で乗算します。可能な限り 0.0 に近い値が最適値です。

以下に例を示します。

  • 最後のクエリーから 1 分後の wsrep_flow_control_paused の値が 0.50 の場合、Flow Control は 30 秒間ノードを一時停止しています。
  • 最後のクエリーから 1 分後に wsrep_flow_control_paused の値が 1.0 の場合、Flow Control はその 1 分間にわたってノードを一時停止します。

wsrep_cert_deps_distance

並行して適用することのできるシーケンス番号 (seqno) の最小値と最大値の差の平均

スロットリングおよび一時停止の場合、この変数は並行して適用することのできる Write Set 数の平均を示します。この値を wsrep_slave_threads 変数と比較して、実際に同時に適用することのできる Write Set の数を確認します。

wsrep_slave_threads

同時に適用することのできるスレッドの数

この変数の値を増やして、より多くのスレッドを同時に適用することができます。これにより、wsrep_cert_deps_distance の値も増加します。wsrep_slave_threads の値は、ノードの CPU コア数よりも大きくすることはできません。

たとえば、wsrep_cert_deps_distance の値が 20 の場合は、wsrep_slave_threads の値を 2 から 4 の値を増やして、ノードを適用することができる write set の量を増やすことができます。

問題のあるノードの wsrep_slave_threads の値が既に最適値である場合、接続性の問題を調査する際に、ノードをクラスターから除外することができます。