読み取り専用レプリカを使用して読み取り専用クエリ ワークロードを負荷分散する (プレビュー)Use read-only replicas to load balance read-only query workloads (preview)

読み取りスケールアウトでは、1 つの読み取り専用レプリカの処理能力を使用して、Azure SQL Database の読み取り専用ワークロードを負荷分散できます。Read Scale-Out allows you to load balance Azure SQL Database read-only workloads using the capacity of one read-only replica.

Premium 階層 (DTU ベースの購入モデル) または Business Critical 階層 (仮想コアベースの購入モデル) の各データベースは、可用性 SLA をサポートするために、複数の Always ON レプリカによって自動的にプロビジョニングされます。Each database in the Premium tier (DTU-based purchasing model) or in the Business Critical tier (vCore-based purchasing model) is automatically provisioned with several AlwaysON replicas to support the availability SLA.

読み取り専用レプリカ

これらのレプリカは、通常のデータベース接続で使用される読み取り/書き込みレプリカと同じコンピューティング サイズでプロビジョニングされます。These replicas are provisioned with the same compute size as the read-write replica used by the regular database connections. 読み取りスケールアウト機能では、読み取り/書き込みレプリカを共有する代わりに、読み取り専用レプリカのいずれか 1 つの処理能力を使用して SQL Database の読み取り専用ワークロードを負荷分散できます。The Read Scale-Out feature allows you to load balance SQL Database read-only workloads using the capacity of one of the read-only replicas instead of sharing the read-write replica. これにより、読み取り専用のワークロードは、メインの読み取り/書き込みワークロードから分離され、パフォーマンスに影響を及ぼすことはありません。This way the read-only workload will be isolated from the main read-write workload and will not affect its performance. この機能は、分析などの論理的に分離された読み取り専用ワークロードを含むアプリケーションを対象としています。そのため、余分なコストをかけることなく、この追加の処理能力を使用してパフォーマンス上の利点を得ることが可能です。The feature is intended for the applications that include logically separated read-only workloads, such as analytics, and therefore could gain performance benefits using this additional capacity at no extra cost.

特定のデータベースで読み取りスケールアウト機能を使用するには、データベースを作成するときに明示的に有効にするか、PowerShell を使用して Set-AzureRmSqlDatabase または New-AzureRmSqlDatabase コマンドレットを呼び出すか、Azure Resource Manager REST API からデータベース - 作成または更新メソッドを使用して構成を変更し、後から明示的に有効にする必要があります。To use the Read Scale-Out feature with a particular database, you must explicitly enable it when creating the database or afterwards by altering its configuration using PowerShell by invoking the Set-AzureRmSqlDatabase or the New-AzureRmSqlDatabase cmdlets or through the Azure Resource Manager REST API using the Databases - Create or Update method.

データベースの読み取りスケールアウトが有効になると、そのデータベースに接続するアプリケーションが、アプリケーションの接続文字列で構成されている ApplicationIntent プロパティに応じて、データベースの読み取り/書き込みレプリカまたは読み取り専用レプリカにリダイレクトされます。After Read Scale-Out is enabled for a database, applications connecting to that database will be directed to either the read-write replica or to a read-only replica of that database according to the ApplicationIntent property configured in the application’s connection string. ApplicationIntent プロパティの詳細については、「アプリケーションの目的を指定する」を参照してください。For information on the ApplicationIntent property, see Specifying Application Intent.

読み取りスケールアウトが無効の場合またはサポートされていないサービス レベルで ReadScale プロパティを設定した場合、ApplicationIntent プロパティとは関係なく、すべての接続が読み取り/書き込みレプリカにリダイレクトされます。If Read Scale-Out is disabled or you set the ReadScale property in an unsupported service tier, all connections are directed to the read-write replica, independent of the ApplicationIntent property.

注意

プレビュー中は、読み取り専用レプリカでのクエリ データ ストアと拡張イベントはサポートされません。During preview, Query Data Store and Extended Events are not supported on the read-only replicas.

データの一貫性Data consistency

レプリカのメリットの 1 つは、レプリカが常にトランザクション上一貫性が保たれた状態となることですが、さまざまな時点で異なるレプリカ間に短い待機時間が発生する可能性があります。One of the benefits of replicas is that the replicas are always in the transactionally consistent state, but at different points in time there may be some small latency between different replicas. 読み取りスケールアウトは、セッション レベルの一貫性をサポートしています。Read Scale-Out supports session-level consistency. そのため、レプリカが使用できないことが原因で接続エラーが発生した後に読み取り専用セッションが再接続された場合、読み取り/書き込みレプリカを使用して 100% 最新ではないレプリカにリダイレクトされる可能性があります。It means, if the read-only session reconnects after a connection error caused by replica unavailability, it can be redirected to a replica that is not 100% up-to-date with the read-write replica. 同様に、アプリケーションが読み取り/書き込みセッションを使用してデータを書き込み、読み取り専用セッションを使用してすぐに読み取る場合、最新の更新がすぐに表示されない可能性があります。Likewise, if an application writes data using a read-write session and immediately reads it using a read-only session, it is possible that the latest updates are not immediately visible. これは、レプリカへのトランザクション ログの再実行が非同期であるためです。This is because the transaction log redo to the replicas is asynchronous.

注意

領域内のレプリケーションの待機時間は短く、このような状況はまれです。Replication latencies within the region are low and this situation is rare.

読み取り専用レプリカに接続するConnect to a read-only replica

データベースの読み取りスケールアウトを有効にすると、クライアントによって提供された接続文字列の ApplicationIntent オプションにより、接続が書き込みレプリカと読み取り専用レプリカのどちらにルーティングされるかが指定されます。When you enable Read Scale-Out for a database, the ApplicationIntent option in the connection string provided by the client dictates whether the connection is routed to the write replica or to a read-only replica. 具体的には、ApplicationIntent 値が ReadWrite (既定値) の場合、接続はデータベースの読み取り/書き込みレプリカにリダイレクトされます。Specifically, if the ApplicationIntent value is ReadWrite (the default value), the connection will be directed to the database’s read-write replica. これは、既存の動作と同じです。This is identical to existing behavior. ApplicationIntent 値が ReadOnly の場合、接続は読み取り専用レプリカにルーティングされます。If the ApplicationIntent value is ReadOnly, the connection is routed to a read-only replica.

たとえば、次の接続文字列はクライアントを読み取り専用レプリカに接続します (山かっこ内の項目は環境内の適切な値に置き換え、山かっこは削除します)。For example, the following connection string connects the client to a read-only replica (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

次の接続文字列はどちらもクライアントを読み取り/書き込みレプリカに接続します (山かっこ内の項目は環境内の適切な値に置き換え、山かっこは削除します)。Either of the following connection strings connects the client to a read-write replica (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

接続先が読み取り専用レプリカであることを確認するVerify that a connection is to a read-only replica

次のクエリを実行することにより、読み取り専用レプリカに接続しているかどうかを確認することができます。You can verify whether you are connected to a read-only replica by running the following query. 読み取り専用レプリカに接続している場合は、READ_ONLY が返されます。It will return READ_ONLY when connected to a read-only replica.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')

注意

ReadOnly セッションでアクセスできる AlwaysON レプリカは、どの時点においても 1 つのみです。At any given time only one of the AlwaysON replicas is accessible by the ReadOnly sessions.

読み取りスケールアウトの有効化と無効化Enable and disable Read Scale-Out

読み取りスケールアウトは、既定ではマネージド インスタンスの Business Critical レベルで有効になります。Read Scale-Out is enabled by default in Managed Instance Business Critical tier. 論理サーバーに配置されたデータベースの Premium および Business Critical 階層で明示的に有効にする必要があります。It should be explicitly enabled in database placed on logical server Premium and Business Critical tiers. ここでは、読み取りスケールアウトを有効または無効にする方法について説明します。The methods for enabling and disabling Read Scale-Out is described here.

PowerShell:読み取りスケールアウトの有効化と無効化PowerShell: Enable and disable Read Scale-Out

Azure PowerShell で読み取りスケールアウトを管理するには、2016 年 12 月以降のリリースの Azure PowerShell が必要です。Managing Read Scale-Out in Azure PowerShell requires the December 2016 Azure PowerShell release or newer. 最新の PowerShell リリースについては、Azure PowerShell に関するページを参照してください。For the newest PowerShell release, see Azure PowerShell.

Azure PowerShell で Set-AzureRmSqlDatabase コマンドレットを呼び出し、-ReadScale パラメーターに目的の値 (Enabled または Disabled) を渡して、読み取りスケールアウトを有効または無効にします。Enable or disable read scale-out in Azure PowerShell by invoking the Set-AzureRmSqlDatabase cmdlet and passing in the desired value – Enabled or Disabled -- for the -ReadScale parameter. または、New-AzureRmSqlDatabase コマンドレットを使用して、読み取りスケールアウトが有効になっている新しいデータベースを作成することもできます。Alternatively, you may use the New-AzureRmSqlDatabase cmdlet to create a new database with read scale-out enabled.

たとえば、既存のデータベースの読み取りスケールアウトを有効にするには、次のようにします (山かっこ内の項目は環境内の適切な値に置き換え、山かっこは削除します)。For example, to enable read scale-out for an existing database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Set-AzureRmSqlDatabase -ResourceGroupName <myresourcegroup> -ServerName <myserver> -DatabaseName <mydatabase> -ReadScale Enabled

既存のデータベースの読み取りスケールアウトを無効にするには、次のようにします (山かっこ内の項目は環境内の適切な値に置き換え、山かっこは削除します)。To disable read scale-out for an existing database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Set-AzureRmSqlDatabase -ResourceGroupName <myresourcegroup> -ServerName <myserver> -DatabaseName <mydatabase> -ReadScale Disabled

読み取りスケールアウトが有効になっている新しいデータベースを作成するには、次のようにします (山かっこ内の項目は環境内の適切な値に置き換え、山かっこは削除します)。To create a new database with read scale-out enabled (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

New-AzureRmSqlDatabase -ResourceGroupName <myresourcegroup> -ServerName <myserver> -DatabaseName <mydatabase> -ReadScale Enabled -Edition Premium

REST API:読み取りスケールアウトの有効化と無効化REST API: Enable and disable Read Scale-Out

読み取りスケールアウトが有効になっているデータベースを作成したり、既存のデータベースの読み取りスケールアウトを有効または無効にしたりするには、次の要求のサンプルのように readScale プロパティを Enabled または Disabled に設定して、対応するデータベース エンティティを作成または更新します。To create a database with read scale-out enabled, or to enable or disable read scale-out for an existing database, create, or update the corresponding database entity with the readScale property set to Enabled or Disabled as in the below sample request.

Method: PUT
URL: https://management.azure.com/subscriptions/{SubscriptionId}/resourceGroups/{GroupName}/providers/Microsoft.Sql/servers/{ServerName}/databases/{DatabaseName}?api-version= 2014-04-01-preview
Body:
{
   "properties":
   {
      "readScale":"Enabled"
   }
}

詳細については、「データベース - 作成または更新」を参照してください。For more information, see Databases - Create or Update.

geo レプリケートされたデータベースで読み取りスケールアウトを使用するUsing Read Scale-Out with geo-replicated databases

(フェールオーバー グループのメンバーなどとして) geo レプリケートされたデータベース上の読み取り専用ワークロードを、読み取りスケールアウトを使用して負荷分散する場合は、プライマリ データベース上および geo レプリケートされたセカンダリ データベース上の両方で、読み取りスケールアウトが有効になっていることを確認します。If you are using read scale-out to load balance read-only workloads on a database that is geo-replicated (e.g. as a member of a failover group), make sure that read scale-out is enabled on both the primary and the geo-replicated secondary databases. これにより、フェールオーバー後にアプリケーションが新しいプライマリに接続したときに、同じ負荷分散効果が保証されます。This will ensure the same load-balancing effect when your application connects to the new primary after failover. 読み取りスケールが有効な、geo レプリケートされたセカンダリ データベースに接続している場合、ApplicationIntent=ReadOnly が設定されたセッションは、プライマリ データベース上で接続をルーティングするのと同じ方法で、レプリカの 1 つにルーティングされます。If you are connecting to the geo-replicated secondary database with read-scale enabled, your sessions with ApplicationIntent=ReadOnly will be routed to one of the replicas the same way we route connections on the primary database. ApplicationIntent=ReadOnly が設定されていないセッションは、geo レプリケートされたセカンダリのプライマリ レプリカ (これも読み取り専用) にルーティングされます。The sessions without ApplicationIntent=ReadOnly will be routed to the primary replica of the geo-replicated secondary, which is also read-only. geo レプリケートされたセカンダリ データベースのエンドポイントは、プライマリ データベースとは異なります。そのため、これまでは、セカンダリにアクセスするために、ApplicationIntent=ReadOnly を設定する必要はありませんでした。Because geo-replicated secondary database has a different end-point than the primary database, historically to access the secondary it wasn't required to set ApplicationIntent=ReadOnly. 下位互換性を確保するため、sys.geo_replication_links DMV には、secondary_allow_connections=2 (すべてのクライアント接続を許可) が示されています。To ensure backward compatibility, sys.geo_replication_links DMV shows secondary_allow_connections=2 (any client connection is allowed).

注意

プレビューの間は、セカンダリ データベースのローカル レプリカ間でラウンド ロビンやその他の負荷分散ルーティングはサポートされていません。During preview, round-robin or any other load balanced routing between the local replicas of the secondary database is not supported.

次の手順Next steps