SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

I/O 性能の検証のために SQL Database のキャッシュをクリアする

leave a comment

データベースの I/O 性能の検証をする際には、検証前に一度データのキャッシュをクリアして、初期のデータ読み込みからディスク I/O を発生させるというケースがあるかと思います。

通常の SQL Server の場合は、DBCC DROPCLEANBUFFERS を実行してキャッシュをクリアすることができます。
しかし、SQL Database の場合はこの DBCC コマンドを利用することができません。

しかし、工夫すると SQL Database でもキャッシュをクリアする方法があったので少しまとめてみたいと思います。

テスト用のデータを INSERT した直後の状態では、INSERT したデータがキャッシュに載った状態となります。
新しいパフォーマンスレベルのデータベースを使用している場合、 sys.dm_db_resource_stats の avg_memory_percent から確認することができます。

以下は実際に取得したデータとなります。
この環境は P1 で取得したものですが、テスト用のテーブルに 100,000 件を INSERT した場合のメモリ使用状況になります。
image

データを INSERT したことでメモリの 1.24% が利用されているという情報を取得することができます。
この状態では INSERT したデータがキャッシュに載っていますので、対象のデータを SELECT した場合はキャッシュからのヒットとなり、物理 I/O が抑制された状態となります。
# Physical Read / Read-Ahead Read が発生しておらず、Logical Read のみとなっています。

image

SQL Database で、この状態からキャッシュをクリアしたい場合は、スケールからスケールを変更して、
image

[拡張操作が進行中です] の表示が出た場合には、キャッシュをクリアすることができます。

image

スケールを変更しても上記のメッセージが出ないことがあるのですが、その場合はキャッシュの状態は引き継がれたままでスケール変更が行われているようです。

拡張操作が進行中が表示された場合は、リソースの再配置のような動作が行われているようでそれまでキャッシュしていたデータがクリアされた状態となります。
# データのキャッシュだけでなくクエリのキャッシュもクリアされているようです。

image

この状態であれば、先ほどと同じクエリを実行した場合に、最初から物理 I/O を発生させることができます。
image

注意点としては、SQL Database のスケールの変更は 24 時間以内に 4 回までという制限がかかっていることでしょうか。
Azure SQL Database: New Service Tiers Q&A

Changing the edition or performance level of a database should be done as a considered and deliberate action. Customers are allowed up to 4 changes in a 24 hour period that alter the service tier or performance level of a database.

 

SQL Database の料金詳細

データベースのエディションまたはパフォーマンス レベルを変更できる回数はどのくらいですか?

データベースのエディションまたはパフォーマンス レベルの変更は、十分に検討したうえで慎重に実行する必要があります。データベースのエディションまたはパフォーマンス レベルの変更は、24 時間に 4 回まで許容されます。ただし、Web Edition と Business Edition を切り替える場合には、この上限は適用されません。

データベースのサービス階層とパフォーマンス レベルの変更

合計で最大 4 個のデータベースを 24 時間以内に変更 (サービス階層またはパフォーマンス レベル) できます。

 

読み込まれるページのサイズを事前に把握しておけば具体的なディスク I/O に置き換えることも可能かと。
この辺のお話を SQL Server 収穫祭 でさせていただこうかと思いせっせとデータを取得中だったりします。

Share

Written by Masayuki.Ozawa

9月 25th, 2014 at 11:35 pm

Posted in SQL Database

Tagged with

Leave a Reply