SQL Database v12 のリソース調整設定を確認できそうな、sys.dm_user_db_resource_governance という DMV があったので内容を確認したところ、パフォーマンスレベルに応じたリソース調整の設定を確認することができそうでした。 # S2 以上でないと DMV から情報を取得することができませんでしたが。 2015/3/16 に確認したところ、S1未満でも情報が取得できるようになっていました。
DTU の正体はこの辺のリソース調整なのかもしれないですね。
この DMV を使用すると以下のような情報が取得することができます。
下表は Basic ~ P3 までのデータベースで、冒頭で紹介した DMV の内容を取得したものになります。
わかりやすい設定となると、min_cores / max_dop になるでしょうか。
SQL Database v12 では、並列クエリを実行することが可能となりましたが、並列クエリについては、Premium の P2 以上でないと使用することができません。
S2~P3 の CPU の設定を抜粋してみると下表のようになります。
S2 | S3 | P1 | P2 | P3 | |
min_cpu | 0 | 0 | 0 | 0 | 0 |
max_cpu | 100 | 100 | 100 | 100 | 100 |
cap_cpu | 100 | 100 | 100 | 100 | 100 |
min_cores | 1 | 1 | 1 | 2 | 8 |
max_dop | 1 | 1 | 1 | 2 | 8 |
P2 以上が min_cores / max_dop の設定が 1 ではないことが確認できます。
P2 の場合は 2 / P3 の場合は 8 が設定されており、これが各パフォーマンスレベルの並列度の上限となります。
S2 でも cap_cpu については 100 となっているので、割り当てられているコア (min_cores) の上限までは CPU が使用できる設定となっているようですね。
メモリ系については、「max_db_memory」により制御が行われているのではと思います。
S2 で試したところ、実際に 2.3 GB 程度のデータはキャッシュすることができていたため、バッファキャッシュのメモリサイズの指標としてこの設定値を使うことができそうでした。
P3 になると、最大で 47GB 程度使用することができるようですね。
S2 | S3 | P1 | P2 | P3 | |
max_db_memory | 2,306,868 | 5,610,496 | 5,610,496 | 11,692,032 | 47,710,208 |
ディスク系については以下の項目から判断することができそうです。
複数の I/O 制御の項目を持っているようですが、I/O 数 / ログの書き込みレート / チェックポイント時のページ制限等はパフォーマンスレベルに応じたものが設定されているようです。
S2 | S3 | P1 | P2 | P3 | |
primary_group_min_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
primary_group_max_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
primary_max_idle_credit_io | 80 | 160 | 160 | 160 | 160 |
primary_checkpoint_page_limit | 80 | 160 | 1,600 | 3,200 | 12,800 |
secondary_group_min_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
secondary_group_max_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
secondary_max_idle_credit_io | 80 | 160 | 160 | 160 | 160 |
secondary_checkpoint_page_limit | 80 | 160 | 1,600 | 3,200 | 12,800 |
govern_background_io | 0 | 0 | 1 | 1 | 1 |
primary_max_log_rate | 1,048,576 | 1,310,720 | 3,145,728 | 6,291,456 | 25,165,824 |
primary_min_log_rate | 0 | 0 | 0 | 0 | 0 |
primary_log_commit_fee | 3,000 | 3,000 | 3,000 | 3,000 | 3,000 |
secondary_max_log_rate | 1,048,576 | 1,310,720 | 3,145,728 | 6,291,456 | 25,165,824 |
secondary_min_log_rate | 0 | 0 | 0 | 0 | 0 |
secondary_log_commit_fee | 3,000 | 3,000 | 3,000 | 3,000 | 3,000 |
slo_violation_io_min_iops | 64 | 128 | 1,280 | 2,560 | 10,240 |
slo_violation_log_min_rate | 838,860 | 1,048,576 | 2,516,582 | 5,033,164 | 20,132,659 |
VolumeLocalIOPS | 200 | 320 | 1,760 | 3,520 | 14,080 |
VolumeManagedXstoreIOPS | 200 | 320 | 2,750 | 5,500 | 22,000 |
VolumeExternalXstoreIOPS | 200 | 320 | 2,750 | 5,500 | 22,000 |
S3 と P1 では DTU は両方とも 100 となっています。
ただし、Standard は分レベルのトランザクションレート / Premium は秒あたりのトランザクションレートを定めています。
主要な性能に影響する値を抜粋したものが下表となります。
S2 | S3 | P1 | P2 | P3 | |
min_cpu | 0 | 0 | 0 | 0 | 0 |
max_cpu | 100 | 100 | 100 | 100 | 100 |
cap_cpu | 100 | 100 | 100 | 100 | 100 |
min_cores | 1 | 1 | 1 | 2 | 8 |
max_dop | 1 | 1 | 1 | 2 | 8 |
max_db_memory | 2,306,868 | 5,610,496 | 5,610,496 | 11,692,032 | 47,710,208 |
max_sessions | 1,200 | 2,000 | 2,400 | 4,800 | 19,200 |
primary_group_max_workers | 120 | 200 | 200 | 400 | 1,600 |
secondary_group_max_workers | 120 | 200 | 200 | 400 | 1,600 |
primary_group_min_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
primary_group_max_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
primary_max_idle_credit_io | 80 | 160 | 160 | 160 | 160 |
primary_checkpoint_page_limit | 80 | 160 | 1,600 | 3,200 | 12,800 |
secondary_group_min_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
secondary_group_max_io | 80 | 160 | 1,600 | 3,200 | 12,800 |
secondary_max_idle_credit_io | 80 | 160 | 160 | 160 | 160 |
secondary_checkpoint_page_limit | 80 | 160 | 1,600 | 3,200 | 12,800 |
primary_max_log_rate | 1,048,576 | 1,310,720 | 3,145,728 | 6,291,456 | 25,165,824 |
primary_log_commit_fee | 3,000 | 3,000 | 3,000 | 3,000 | 3,000 |
secondary_max_log_rate | 1,048,576 | 1,310,720 | 3,145,728 | 6,291,456 | 25,165,824 |
slo_violation_io_min_iops | 64 | 128 | 1,280 | 2,560 | 10,240 |
slo_violation_log_min_rate | 838,860 | 1,048,576 | 2,516,582 | 5,033,164 | 20,132,659 |
VolumeLocalIOPS | 200 | 320 | 1,760 | 3,520 | 14,080 |
VolumeManagedXstoreIOPS | 200 | 320 | 2,750 | 5,500 | 22,000 |
VolumeExternalXstoreIOPS | 200 | 320 | 2,750 | 5,500 | 22,000 |
CPU / メモリの調整に関しては S3 / P1 ともに同じです。
セッション数については多少 P1 のほうが多いようですね。
大きく異なるのはディスク系の調整かと思います。
「primary_max_idle_credit_io」については S3/P1 ともに 「160」となっています。
待機状態で担保されている I/O についてはどちらも変わらないのかもしれないですね。
しかし最大の I/O についてはリミットが変わっています。
S3 では、I/O 関連の制御は一律で 160 程度なっていますが、P1 では「1,600」と 10 倍の値となっています。
また、ログの書き込みレートも S3 では「1,310,720」となっていますが、P1 では「3,145,728」と設定が異なっています。
このあたりの違いが、分単位の性能保証と秒単位の性能保証の違いとして表れてきているのかと。
性能の指標や、リソースの上限に達した場合にどのパフォーマンスレベルに移行すればよいかの検討としてこれらの情報は有益そうですね。