2017-07-10 9 views
2

私のプロジェクトでAzure SQLデータベースを使用しており、同じクエリセットが頻繁に実行されています。 最近、私はパフォーマンスの推奨を受けました - Non-Parameterized queries are causing performance issues。私のデータベースで次のステートメントを実行するように提案しています。SQL Azureからの強制パラメータ化推奨

ALTER DATABASE [TestDB] SET PARAMETERIZATION FORCED

私は強制パラメータ化は、クエリのコンパイルおよび再コンパイルの頻度を減らすことによって、特定のデータベースのパフォーマンスを向上させることを知るようになりました。 また、ストアドプロシージャは実行可能なコードであり、自動的にキャッシュされ、ユーザー間で共有され、再コンパイルを防止できることが知られています。

下記の質問にお手伝いください。

1)データベースを強制的にに変換すると、パラメータがと頻繁に使用されるクエリをストアドプロシージャにするよりもうまくいくでしょうか?

2)私のデータベースにForced Parameterizationオプションを実行するのは安全ですか?

答えて

1

それ以上のテストをしなくてもうまくいくかどうかは分かりませんが、アドバイザーがパラメーター化を有効にするとパフォーマンスが向上すると言っている場合は、間違いなく試してみるべきです。理由:

「適用」コマンドをクリックすると、この推奨事項をすばやく簡単に適用できます。この推奨を適用すると、 が数分以内にデータベース内で強制的にパラメータ化され、 の監視プロセスが約24時間持続します。 この期間を過ぎると、 の推奨が適用される前後24時間前に、データベースのCPU使用率が であることを示す検証レポートが表示されます。 SQLデータベースアドバイザーには、パフォーマンス回帰が検出された場合に適用された推奨を自動的に元に戻すメカニズムがあります( )。ここ

さらに詳しい情報:

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-advisor#parameterize-queries-recommendations

1

1)強制PARAMETERIZATIONにデータベースを回して、ストアドプロシージャに頻繁に使用されるクエリを作るよりも良い仕事でしょうか?

いいえ強制パラメータ化は、クエリを適切にパラメータ化しないアプリケーションの回避策です。頻繁に実行されるクエリや、個々の値に基づいてプランを作成するハードコーディングされた値のパラメータを使用する方がよいでしょう。

EG

select * 
from Orders 
where CustomerId = @customerID 
and Active = 1 
関連する問題