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

弱い整合性読み取りの設定
ヒントによる設定
OceanBaseのSQLでは、弱い整合性読み取りヒント/*+READ_CONSISTENCY(WEAK)*/が提供されています。このhintをSQLに追加することで、弱い整合性読み取り機能を有効にできます。
select /*+READ_CONSISTENCY(WEAK)*/ * from t1;
構成パラメータによる設定
ヒントを使用する方法では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つのポリシーは、ビジネスシナリオに応じて選択する必要があります