MySQL 9.
MySQL Group ReplicationのFlow Controlの仕組みについては過去の記事も参考にしてください。
コンポーネントが提供するステータス変数
コンポーネントをインストールすると、以下の4つのグローバルステータス変数が追加されます。
| 変数名 | 説明 |
|---|---|
Gr_ |
現在throttleされているトランザクション数 |
Gr_ |
throttleされたトランザクションの累計数 |
Gr_ |
最後にthrottleが発生した日時 |
Gr_ |
throttleによる遅延の累計時間 |
変数はperformance_またはSHOW GLOBAL STATUS LIKE 'Gr\_flow\_control%'で参照します。
インストールと依存関係
group_プラグインが起動済みであることが前提です。プラグインが存在しない状態でインストールしようとすると、依存解決エラーになります。
INSTALL COMPONENT 'file://component_group_replication_flow_control_stats';
mysql> INSTALL COMPONENT 'file://component_group_replication_flow_control_stats'; ERROR 3534 (HY000): Cannot satisfy dependency for service 'group_replication_flow_control_metrics_service' required by component 'mysql:group_replication_flow_control_stats'.
また、コンポーネントがインストールされている状態ではUNINSTALL PLUGIN group_は失敗します。先にコンポーネントをアンインストールしてからプラグインを削除する必要があります。
mysql> UNINSTALL PLUGIN group_replication; ERROR 1883 (HY000): Plugin 'group_replication' cannot be uninstalled now. Please uninstall the component 'component_group_replication_flow_control_stats' and then UNINSTALL PLUGIN group_replication.
UNINSTALL COMPONENT 'file://component_group_replication_flow_control_stats';
UNINSTALL PLUGIN group_replication;
検証
検証環境
MySQL 9.
Single-Primaryモードでの検証
node1がPRIMARY、node2/super_のため、インストールには一時的な解除が必要です。
フロー制御を強制発動させる設定
閾値を極端に小さくして、少数のトランザクションでもthrottleが発生するようにします。
SET GLOBAL group_replication_flow_control_certifier_threshold = 1;
SET GLOBAL group_replication_flow_control_applier_threshold = 1;
SET GLOBAL group_replication_flow_control_max_quota = 1;
検証結果
PRIMARY
mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------------------+----------------------------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 84 | | Gr_flow_control_throttle_last_throttle_timestamp | 2026-06-12 10:02:44.969563 | | Gr_flow_control_throttle_time_sum | 79905449 | +--------------------------------------------------+----------------------------+
mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------------+-------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 0 | | Gr_flow_control_throttle_last_throttle_timestamp | | | Gr_flow_control_throttle_time_sum | 0 | +--------------------------------------------------+-------+
throttleの統計はthrottleが発生したPRIMARYにのみ記録されます。SECONDARYはトランザクションを受信・
メトリクスのライフサイクル
STOP GROUP_を実行してもメトリクスの値は保持されます。START GROUP_でGRを再起動するとメトリクスはリセットされます。そのため、メトリクスは直前のGR起動からの累積値です。
mysql> STOP GROUP_REPLICATION; Query OK, 0 rows affected (3.03 sec) mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------------------+----------------------------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 84 | | Gr_flow_control_throttle_last_throttle_timestamp | 2026-06-12 10:02:44.969563 | | Gr_flow_control_throttle_time_sum | 79905449 | +--------------------------------------------------+----------------------------+
mysql> START GROUP_REPLICATION; Query OK, 0 rows affected (2.85 sec) mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------------+-------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 0 | | Gr_flow_control_throttle_last_throttle_timestamp | | | Gr_flow_control_throttle_time_sum | 0 | +--------------------------------------------------+-------+
Multi-Primaryモードでの検証
検証環境
node1、node2を書き込みノードとし、node3をリードノードとするMulti-Primaryモードで検証します。Multi-Primaryモードでは全ノードがPRIMARYとなりsuper_がOFFになるため、各ノードで直接コンポーネントをインストールできます。
検証結果
node1、node2それぞれから50件のINSERTを並列実行した後のステータスです。
mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------------------+----------------------------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 43 | | Gr_flow_control_throttle_last_throttle_timestamp | 2026-06-12 10:04:47.860489 | | Gr_flow_control_throttle_time_sum | 41122039 | +--------------------------------------------------+----------------------------+
mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------------------+----------------------------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 40 | | Gr_flow_control_throttle_last_throttle_timestamp | 2026-06-12 10:04:46.940424 | | Gr_flow_control_throttle_time_sum | 34275139 | +--------------------------------------------------+----------------------------+
mysql> SHOW GLOBAL STATUS LIKE 'Gr_flow_control%'; +--------------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------------+-------+ | Gr_flow_control_throttle_active_count | 0 | | Gr_flow_control_throttle_count | 0 | | Gr_flow_control_throttle_last_throttle_timestamp | | | Gr_flow_control_throttle_time_sum | 0 | +--------------------------------------------------+-------+
Multi-Primaryモードでは各PRIMARYが独立してthrottleメトリクスを記録します。書き込みを行ったnode1、node2はそれぞれ自身の統計を持ち、書き込みのなかったnode3は0のままとなっています。
| 観点 | Single-Primary | Multi-Primary |
|---|---|---|
| throttleが記録されるノード | PRIMARY のみ | 書き込みを行ったnodeごと |
| コンポーネントインストール | SECONDARYはsuper_解除が必要 |
全ノードで直接実行可 |
| GR再起動後のリセット | リセットされる | リセットされる |
まとめ
従来ではCOUNT_component_を利用することで、フロー制御の発生頻度や遅延時間を定量的に把握できるようになりました。
- フォーマンス低下の原因特定
- 書き込み速度が低下したとき、
throttle_やcount throttle_を確認することでFlow Controlが原因かどうかを即座に判断できます。time_ sum - 監視・
アラートへの組み込み throttle_の増加量やcount throttle_を定期収集し、閾値を超えた場合にアラートを出す運用が可能です。time_ sum - インフラ改善の判断材料
throttle_の累積値からどの程度の書き込み遅延が発生しているかを定量化でき、スペックアップや閾値調整の根拠として活用できます。time_ sum
Single-PrimaryではPRIMARY 1点の監視で足りますが、Multi-Primaryでは各書き込みノードのメトリクスを個別に収集する必要があります。メトリクスはGR起動ごとにリセットされるため、継続的な監視には外部ツールで定期的に取得する運用が必要です。
