ApsaraDB RDS は、プライマリインスタンスと読み取り専用インスタンス間でバイナリログをリアルタイムに転送します。通常の条件下では、読み取り専用インスタンスからの読み取り操作により、現在のデータが返されます。ただし、MySQL のレプリケーションには固有の制限があり、バイナリログの適用に時間がかかりすぎると、レプリケーションラグが蓄積し、読み取り専用インスタンスが遅れてしまうことがあります。この制限は、データベースエンジンレベルでは解消できません。
バイナリログの適用時の同期遅延を最小限に抑えるためには、プライマリインスタンスと同等またはそれ以上の仕様の読み取り専用インスタンスをご利用ください。
レイテンシーしきい値の動作仕組み
ApsaraDB RDS では、読み書き分離に対して レイテンシーしきい値 を設定できます。読み取り専用インスタンスがこのしきい値を超えた場合、以下の動作が発生します:
ApsaraDB RDS は、当該インスタンスへの読み取りリクエストのルーティングを停止します。
すべての読み取り専用インスタンスがしきい値を超えた場合、ApsaraDB RDS は、プライマリインスタンスの読み取り重みがゼロでない設定であっても、すべてのリクエストをプライマリインスタンスにルーティングします。
この動作により、レプリケーションが遅延した際にアプリケーションが古いデータを読み取ってしまうことを防ぎます。
プライマリインスタンスへの強制読み取りの実施タイミング
リアルタイム性が必須のクエリについては、読み書き分離プロキシをバイパスして、直接プライマリインスタンスへルーティングするためのヒントワード /*FORCE_MASTER*/ をクエリに追加してください:
/*FORCE_MASTER*/ SELECT * FROM table_name;