SE の雑記

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

SQL Database Advisor の PARAMETERIZE QUERIES recommendations を試してみる

leave a comment

先日、General availability: SQL Database Advisor and Performance dashboard でアナウンスされましたが、SQL Database アドバイザーに、PARAMETERIZE QUERIES recommendations (in preview) という機能が追加されたようなので軽くためしてみました。

Parameterize queries recommendations には、以下のように記載されています。

Parameterize queries recommendations appear when the SQL Database service detects that you have one or more queries that are constantly being recompiled but end up with the same query execution plan. This opens up an opportunity to apply forced parameterization, which will allow query plans to be cached and reused in the future improving performance and reducing resource usage.

同一のクエリが複数回実行され、クエリのコンパイルが発生している場合に、パラメーター化の推奨をアドバイスする機能となっています。

SQL Database アドバイザーは、クエリストアによって取得されたQuery Performance Insight の情報を元に、アドバイスしているんだろうなと思い、アドホックなクエリを複数回実行するようなスクリプトを数日間実行したままにしてみました。

While($true){
$query ="select * FROM TestTable WHERE Col1 = {0} or Col1 = {1}" -f [int]((Get-Random) / 1000000), [int]((Get-Random) / 1000000)
1..30 | %{Invoke-Sqlcmd -ServerInstance "ほげほげ.database.windows.net" `
-Username "ログイン" -Password "パスワード" -Database testdb `
-Query $query > $null}
Start-Sleep -Seconds 1
}

これにより、アドバイス情報が提示され、以下のような情報の出力を確認できました。image

「スクリプトの表示」をクリックすることで、アドバイスによる設定変更のクエリが表示されます。

image

これ、DB に対してパラメーターの強制化のオプションを有効にするんですね。

強制パラメータ化

クエリストアでどのようにパラメーター化クエリの推奨アドバイスを実装するのだろうと、疑問に思っていたのですが、特定のクエリに対しての設定ではなく、DB 全体として、アドホックなクエリをパラメーター化にするための設定を変更するというような実装を行うようです。

クエリストアについては、以下の情報が参考になりますので、これらの情報からどのようなクエリの情報が取得できるかを考えてみると、今後アドバイザーに新しい推奨が追加された場合も、取得方法の想像ができそうですね。

クエリのストアを使用した、パフォーマンスの監視

Monitoring Performance By Using the Query Store

Best Practice with the Query Store

Query Store Usage Scenarios

Share

Written by Masayuki.Ozawa

5月 14th, 2016 at 12:57 pm

Posted in SQL Database

Tagged with

Leave a Reply