読み書き分離とは、プライマリサーバーでデータを変更すると、その変更がスタンバイサーバーに同期される仕組みです。スタンバイサーバーはデータの読み取りのみを提供し、書き込みはできません。これにより、バックアップを実現すると同時に、データベースのパフォーマンス最適化とサーバーのセキュリティ向上が図られます。MySQLなどの単一マシンデータベースでは、読み書き分離とは書き込みリクエストをプライマリサーバーに、読み取りリクエストをスタンバイサーバーに送信することを指します。 OceanBaseデータベースでは、読み書き分離をサーバーレベルからテーブルのパーティションレベルまで実現しており、これはOceanBase分散データベースならではの強みです。
読み書き分離機能を利用すると、読み取りリクエストをスタンバイレプリカに送信し、プライマリレプリカの負荷を軽減できます。
注意
読み書き分離を使用した後、読み取りリクエストが最新のデータを読み取れる保証はありません。時間差は通常数百ミリ秒です。
読み書き分離の設定
読み書き分離を使用するには、以下の2つの設定が必要です:
- SQL文を弱い読み取りに設定する:弱い読み取りとは、読み取りリクエストが最新のデータを読み取ることを要求しないことを指します。通常のSQLは強い読み取りです。弱い読み取りを使用するには、特定の設定が必要です。
- ルーティングポリシーを変更する:以下の図のpartition1を例にすると、3つのレプリカすべてが弱い読み取りサービスを提供できます(プライマリレプリカも読み取りサービスを提供できます)。ルーティングポリシーを設定することで、スタンバイレプリカを優先的に選択できます。

弱い読み取りの設定
Hintによる設定
OceanBaseのSQLでは、弱い読み取りのhint /*+READ_CONSISTENCY(WEAK)*/ が提供されています。SQLにこの hint を追加することで、弱い読み取り機能を有効にできます。
select /*+READ_CONSISTENCY(WEAK)*/ * from t1;
構成パラメータによる設定
Hintを使用する方法ではSQLを変更する必要があり、場合によってはSQLの変更が面倒になることがあります。構成パラメータ obproxy_read_consistency の値を変更することで設定できます。
OBProxy管理者アカウントでデータベースにログインする
構成パラメータを変更する
alter proxyconfig set obproxy_read_consistency = 1;
説明
この構成パラメータの値は0と1です。デフォルトは0で、強い読み取り(最新のデータを読み取る必要がある)を表します。1は弱い読み取りを表します。
ルーティングポリシーの変更
ODPは構成パラメータ proxy_route_policy によってルーティングポリシーを変更します。follower_first と follower_only に設定することで、弱い読み取りリクエストをスタンバイレプリカに優先的に送信できます。これら2つの意味は以下のとおりです:
- follower_first:スタンバイレプリカを優先的に選択します。スタンバイレプリカがすべて利用不可の場合、プライマリレプリカを選択します。
- follower_only:スタンバイレプリカを選択します。スタンバイレプリカがすべて利用不可の場合、クライアントとの接続を切断します。 上記の2つのポリシーは、ビジネスシナリオに応じて選択する必要があります。