松本美穂と松本崇博が執筆した SQL Server 2014 自習書シリーズの「No.5 Microsoft Azure SQL Database 入門」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。[2015年12月29日]
Azure SQL Database では、DTU(Database Throughput Unit:データベース スループット ユニット)という単位で、パフォーマンス レベルを定義しています。
DTU は、データベース エンジンのパフォーマンスを表す指標で、CPU やメモリ、書き込み速度、読み取り速度の測定値を組み合わせて(マイクロソフトによって)算出されたものになっています。単純な DTU 比較で考えると、P1 は「100」、P3 は「800」なので、P3 は P1 よりも 8倍速く処理ができる(もちろん処理内容によって変化)、と捕らえることができるようになっています。
DTU は、マイクロソフトのベンチマーク ツールを利用して、基本的な OLTP ワークロードを実行・算出した結果になっていて、詳しくは、オンライン ブックの次のページに記載されています。
Azure SQL データベースのサービス階層とパフォーマンス レベル
https://msdn.microsoft.com/library/azure/dn741336.aspx
このページでは、次のように DTU についてもう少し詳しく記載されています。
この表では、最大ワーカースレッド数や、最大セッション数、利用したベンチマーク ツールで、1秒あたりにどれぐらいのトランザクションを実行できたのかなどが記載されています。実際にどれぐらいの差が出るのかについては、後述します。
Azure SQL Database の性能を、筆者がテストした結果になりますが、次のような実行性能を確認にすることができました。
クエリ A、B、C の 3種類を試しましたが、Premium エディション(P1、P2、P3)は、さすがに価格相応の非常に良い性能が出ることを確認できました。これに比べて、S3(執筆時点では、プレビュー版)は、CPU に関しては P1 に近い性能を得られますが、書き込み性能に関しては Premium に大きく劣るということを確認できました。Premium エディションは、高速ストレージを利用しているので、書き込みおよび読み取り(ディスク I/O)が伴う処理にも強いことが分かりました。
一方で、Basic や S0 は、非常に大きな性能制限を受けていることが分かりました。特に CPU に関する制限が大きく、価格が安い分だけ、大きな制限を受けています。
冒頭の DTU 値と、DTU の差(S0 に比べて何倍か)、クエリ A の実行時間および実行時間の差をまとめると、次の表のようになります。
S0 と P3 は、DTU 的には 80倍の差ですが、クエリA では 64.7倍の差を確認することができ、その他もだいたい DTU 通りの性能差を確認することができました。S3 と P1 は、DTU 的には同じ値ですが、クエリC のように更新系の処理の場合には、Premium エディションの高速ストレージの恩恵によって、大きな差が出ることが分かりました。
次のグラフは、筆者のお客様のデータベース(4億件のデータ、8.2GB分)を利用して、SELECT INTO ステートメントでデータのコピーを作成したときの実行時間を比較したものです。
P1 は、S3 よりも 2.5倍も速く処理することができ、P2 なら 4.9倍、P3 なら 11.5倍ものスピードで処理できることを確認できました。SELECT INTO では、最初のフェーズでコピー元のデータを読み取って、読み取った後は、ひたすら書き込んでいく、という動作になるので、Premium エディションの高速ストレージの恩恵をより受けることができます。
また、P2 や P3 では、次のように並列 INSERT 処理も行われるので、より高速に処理ができることを確認できました。
次のグラフは、上記と同様、4億件のデータに対して、集計処理を行うクエリを実行したときの実行時間を比較したものです。
このクエリは、CPU 負荷が中心で、実行時間のうちのほとんどが CPU 時間になるのですが、P1 と比べると、P2 は 2倍、P3 は 8.1倍で処理できることを確認できました。P2 と P3 では、並列クエリ(複数の CPU コアを利用したパラレル処理)が効果的に働くことで、このような性能差になりました。
P1、P2、P3 は、DTU の 100、200(2倍)、800(8倍)という数値の通り、このクエリのように CPU 負荷が中心であれば、並列クエリの恩恵によって、2倍、8倍で処理ができることが分かりました。
また、上のグラフでは、P3 でインメモリの列ストア インデックスを作成したときの結果も掲載していますが、これを利用すれば 185倍もの性能向上を実現できています。前の Step で説明したように、列ストア インデックスは、Premium エディションでのみ利用できる機能で、大量データに対する集計処理が得意なカラム指向のインデックスです。
以上のように、DTU は、あくまでも性能のおおまかな指標になるものなので、速くしたい処理が CPU 負荷中心なのか、ストレージ処理中心なのか、メモリを多く必要としている処理なのか、などによって、パフォーマンス レベルを選択する形になります。
また、列ストア インデックスを利用するには、Premium エディションが必要であることや、Standard エディションと Premium エディションでは、性能面だけでなく、復元ポイントが異なったり(Standard は 14日、Premium は 35日)、ジオ レプリケーション(データセンターをまたがったデータベースの複製)でのアクティブ セカンダリ(読み取り可能なセカンダリ)が作成できるかどうかなどが変わったりするので、そういった部分も加味して、エディションおよびパフォーマンス レベルを選択していく形になります。
Azure SQL Database では、パフォーマンス レベルを柔軟に変更することができます(24時間の間に最大 4回まで変更することができます)。
パフォーマンス レベルの変更は、次のように[データベースの構成]ブレードで、[価格層]をクリックすることで行えます。
[価格レベルの変更]ブレードが表示されたら、変更したいパフォーマンス レベルを選択して、[選択]ボタンをクリックします。
変更にかかる時間は、データベースのサイズによっても異なり、サイズが小さければ数分~数十分で完了しますが、データベース サイズが大きい場合には数時間かかる場合もあります。変更中は、次のように[通知]ブレードにメッセージが表示されます。
変更中は、[データベースの構成]ブレードの[価格層]パネルが「更新中...」と表示されますが、更新が完了すると、次のように新しいパフォーマンス レベルが表示されます。
パフォーマンス レベルの変更中は、変更が終わるまで、完全にデータベースが利用できなくなるわけではなく、変更中でも、ほとんどの時間を継続利用することができます(変更中でも、変更前のパフォーマンス レベルの性能で、通常と同じように操作することができます。課金についても、変更が完了するまでは、元のパフォーマンス レベルでの課金になります)。変更の最終フェーズでは、パフォーマンス レベルの切り替えが行われるのですが、そのタイミングのときのみデータベースへのアクセスができなくなります(接続が切れる形になります)。
なお、データベースのパフォーマンス レベルは、[SQL データベース]ブレードでまとめて確認することもできます。
パフォーマンス レベルの変更や、価格の考え方などに関しては、「SQL Database 料金」ページ(以下の URL)の「FAQ」セクションも参照しておくことをお勧めします。
http://azure.microsoft.com/ja-jp/pricing/details/sql-database/
第60回:SQL Server 2017 自習書 No.3「SQL Server 2017 Machine Learning Services」のご案内
第59回:SQL Server 2017 自習書 No.2「SQL Server 2017 on Linux」のご案内
第58回:SQL Server 2017 自習書 No.1「SQL Server 2017 新機能の概要」のご案内
第57回:SQL Server 2017 RC 版とこれまでのドキュメントのまとめ
第56回:「SQL Server 2016 への移行とアップグレードの実践」完成&公開!
第55回:書籍「SQL Server 2016の教科書 開発編」(ソシム)が発刊されました
第54回:「SQL Server 2016 プレビュー版 Reporting Services の新機能」自習書のお知らせ
第 53 回:SQL Server 2016 Reporting Services の新しくなったレポート マネージャーとモバイル レポート機能
第 52 回:SQL Server 2016 の自習書を作成しました!
第 51 回:PASS Summit と MVP Summit で進化を確信!
第 50 回:新しくなった Power BI(2.0)の自習書を作成しました!
第49 回:Excel 2016 の Power Query を使う
第 48 回:新しくなった Microsoft Power BI ! 無料版がある!!
第 47 回:「Microsoft Azure SQL Database 入門」 完成&公開!
第 46 回:Microsoft Power BI for Windows app からの Power BI サイト アクセス
第 45 回:Power Query で取得したデータを PowerPivot へ読み込む方法と PowerPivot for Excel 自習書のご紹介
第44回:「SQL Server 2014 への移行とアップグレードの実践」ドキュメントを作成しました
第43回:SQL Server 2014 インメモリ OLTP 機能の上級者向けドキュメントを作成しました
第42回:Power Query プレビュー版 と Power BI for Office 365 へのクエリ保存(共有クエリ)
第41回:「SQL Server 2014 CTP2 インメモリ OLTP 機能の概要」自習書のお知らせです
第40回: SQL Server 2012 自習書(HTML版)を掲載しました
第39回: Power BI for Office 365 プレビュー版は試されましたか?
第38回: SQL Server 2014 CTP2 の公開
第37回: SQL Server 2014 CTP1 の自習書をご覧ください
第36回: SQL Server 2014 CTP1 のクラスター化列ストア インデックスを試す
第35回: SQL Server 2014 CTP1 のインメモリ OLTP の基本操作を試す
第34回: GeoFlow for Excel 2013 のプレビュー版を試す
第33回: iPad と iPhone からの SQL Server 2012 Reporting Servicesのレポート閲覧
第32回: PASS Summit 2012 参加レポート
第31回: SQL Server 2012 Reporting Services 自習書のお知らせ
第30回: SQL Server 2012(RTM 版)の新機能 自習書をご覧ください
第29回: 書籍「SQL Server 2012の教科書 開発編」のお知らせ
第26回: SQL Server 2012 の Power View 機能のご紹介
第25回: SQL Server 2012 の Data Quality Services
第24回: SQL Server 2012 自習書のご案内と初セミナー報告
第23回: Denali CTP1 が公開されました
第22回 チューニングに王道あらず
第21回 Microsoft TechEd 2010 終了しました
第20回 Microsoft TechEd Japan 2010 今年も登壇します
第19回 SQL Server 2008 R2 RTM の 日本語版が公開されました
第18回 「SQL Azure 入門」自習書のご案内
第17回 SQL Server 2008 自習書の追加ドキュメントのお知らせ
第16回 SQL Server 2008 R2 自習書とプレビュー セミナーのお知らせ
第15回 SQL Server 2008 R2 Reporting Services と新刊のお知らせ
第14回 TechEd 2009 のご報告と SQL Server 2008 R2 について
第13回 SQL Server 2008 R2 の CTP 版が公開されました
第12回 MVP Summit 2009 in Seattle へ参加