Azure SQL Database Read Scale-Out

Microsoft Japan Data Platform Tech Sales Team

大林裕明

Azure SQL Database に Read Scale-Out の機能が追加されました。(4/17 現在はプレビューです)

■ Use read-only replicas to load balance read-only query workloads (preview) 英語

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-read-scale-out

この機能が利用できるのは購入モデルが DTU の場合は Premium 、新しく追加された vCoreモデルでは Business Critical になります。

上記のサービス階層では、可用性の SLA を担保するため、AlwaysOn のレプリカを自動的にプロビジョニングしています。

このレプリカは通常使用されるデータベースと同じパフォーマンスレベルで準備されています。

Read Scale-Out 機能ではこのレプリカを Read Only(読み取り専用)の処理に使うことで、Read/Write のデータベースから負荷を分離することができます。

image

例えば、売上伝票の入力などのデータの追加/更新系の処理は通常のデータベースに接続し、帳票や分析処理など検索系の処理は読み取り専用レプリカに接続することで負荷の高い検索が行われても、売上伝票の入力には影響を与えないシステムが構築できます。

またレプリカ間では若干の遅延が生じる可能性がありますが、常にトランザクション的には一貫した状態にあります。

さらにお得なのは追加コストなしで使うことができることです。

では、早速使ってみましょう。

Read Scale-Out の機能を使えるようにするには、PowerShell もしくは REST API を使って行います。

今回は PowerShell で実行したいと思います。

※ PowerShell は 2016/12 以降にリリースされたバージョンをご利用ください。

Azure のアカウントにログインし、下記のコマンドを発行します。

Set-AzureRmSqlDatabase -ResourceGroupName <resourcegroup> -ServerName <server> -DatabaseName <database> -ReadScale Enabled

<resourcegroup> :対象の Azure SQL Database のリソースグループ

<server> :対象の Azure SQL Database の SQL Server のサーバー名をドメイン(database.windows.net) なしで指定

<database> :対象の Azure SQL Database のデータベース名

-ReadScale :Enabled で機能オン、Disabled で機能オフ

■ 実行例

image

これで Read Scale-Out 機能が利用できます。

では実際にデータベースに接続して使ってみましょう。

Read Only データベースへの接続は ApplicationIntent = ReadOnly を接続文字列に追加します。

Read/Write のデータベースへの接続は、接続文字列に ApplicationIntent = ReadWrite を指定するか、ApplicationIntent を書かなかった

ときに接続されます。

■ Read only データベースへの接続文字列

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

■ Read/Write データベースへの接続文字列

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;

SQL Server Management Studio から Read Only データベースに接続する方法

サーバへの接続のオプションをクリック

image

オプション画面の「追加の接続パラメータ」のタブをクリックし、追加の接続文字列パラメーターとして「ApplicationIntent = ReadOnly」を追加します。

image

これで接続すれば Read Only データベースに接続されます。

では Read Only になっているか試しに INSERT文を投げてみましょう。

image

Read Only データベースだとエラーが返されました。

この Read Only の接続で負荷のかかる検索を実行してみました。

image

Azure Portal のメトリックで監視する DTU の使用状況は 0% のままで、Read/Writeのデータベースには影響が出ていないことが分かります。

※このメトリックは Read/Write のデータベースのリソースのみを表示しています。image

Read/Write の接続で同じ検索をすると DTU が 100% になります。

image

※ 現在は、Read Only のメトリックは確認することはできません。

今まで Premium が高いということで Standard を選択されていた方も、Premium では 追加コストなしで読み取りの処理がオフロードできるということにメリットを感じて使っていただければと思います。