Azure SQL Database の DTU (Database Throughput Unit)て知ってます?

Microsoft Azure SQL Databaseの提供形態が変わろうとしています。
これまでは、使用領域に応じた課金でしたが、今後はパフォーマンスと機能に応じた課金に変わります。

image

パフォーマンスをベースにした課金になりますが、パフォーマンスとはどういった定義なのでしょうか?その話をすると出てくるのが、次の2つの概念です。

  • Database Throughput Unit – DTU
  • Azure SQL Database Benchmark – ASDB

Database Throughput Unit – DTU

データベースにアサインする性能に関係するリソースに相当します。
CPU、メモリ、Read、Writeを混ぜ合わせて計測します。
そして、性能レベルを比較します。
これが性能について話をするのに話が早くなります。(IOPSと%を比較することを想像してください)

image

詳細は、MSDNライブラリ「Azure SQL データベースのサービス階層とパフォーマンス レベル」を参照してください。

Azure SQL Database Benchmark – ASDB

OLTPのワークロードです。
常に提供されているメモリよりも大きくてさまざまなテーブルサイズのテーブル6つを使用します。
9種類のトランザクションをしようします。
SELECT、DELETE、INSERT、UPDATEなど複数のトランザクションを使用しています。
詳細は:MSDNライブラリ「Azure SQL データベースのベンチマークの概要」を参照

image

image

提供されるサービス帯による性能比較

トランザクション数は、あくまでも例。DBトランザクション制限をハードで入れているわけではない。

サービス階層/パフォーマンス レベル DTU 最大 DB サイズ 最大 ワーカー スレッド 最大 セッション ベンチマーク トランザクション率 予測可能性

Basic

1

2 GB

20

100

3,467 トランザクション/時間

良い

Standard/S1

5

250 GB

50

200

283 トランザクション/分

Standard/S2

25

250 GB

100

500

1,470 トランザクション/分

Premium/P1

100

500 GB

200

2,000

98 トランザクション/秒

最高

Premium/P2

200

500 GB

400

4,000

192 トランザクション/秒

最高

Premium/P3

800

500 GB

1,600

16,000

730 トランザクション/秒

最高

パフォーマンスレベルの変更方法

image

PowerShellの「Set-AzureSqlDatabase」を使用するか、TSQLの「ALTER Database」を使用するか、管理ポータルで操作するか、REST APIたたくか、.NETでたたくかですね。

モニタリング方法

Azureポータルでスケールアップすべきかどうか、スケールダウンさせるべきかどうかを見れるようになります。
master.sys.resource_statsでも提供されます。5分の平均値を取得しています。

image

クエリチューニング

  • sys.dm_exec_query_stats
  • sys.dm_exec_query_sql_text()
  • sys.dm_exec_query_plan
  • sys.dm_exec_requests
  • sys.dm_exec_sessions

Designing Modern Apps using New Capabilities in Microsoft Azure SQL Database, Deep Diveを基にした投稿です