Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

SQL Server2022_PSPoptimization_pub.pdf

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 7 Publicité

Plus De Contenu Connexe

Similaire à SQL Server2022_PSPoptimization_pub.pdf (20)

Plus par Oda Shinsuke (20)

Publicité

Plus récents (20)

SQL Server2022_PSPoptimization_pub.pdf

  1. 1. SQL Server 2022 PSP 最適化の ご紹介 第12回 関西DB勉強会 2023/01/21 @shinsukeoda
  2. 2. SQL Server 2022 GA してます 色んな機能が追加/強化されています 今日は PSP 最適化について取り上げます Parameter Sensitive Plan optimization - SQL Server | Microsoft Learn
  3. 3. PSP(Parameter Sensitive Plan) SQL Server はクエリプランをキャッシュする 初回実行のクエリはコンパイル結果をクエリプランキャッシュとして保持 初回実行時のパラメータ値によって、クエリプランが変わることがある クエリ実行時にクエリプランのキャッシュが ある時:キャッシュされたプランで、今回のパラメータ値を渡して実行 ない時:↑で書いたように今回のパラメータ値でコンパイル、出来たプラン をキャッシュ (当然作ったプラン/今回のパラメータで実行) 初回のパラメータが多く利用するパラメータ値では無かったら? あまり使われないパラメータ値に最適なクエリプランをキャッシュ 多く利用するパラメータ値で最適なクエリプランとは限らない PSP 問題=> パラメータに依存するプランの問題!!!!
  4. 4. 同一/異なるクエリプランになる例 同一の例 exec sp_executesql N'select * from [Tbl] where [Id] = @p1', N'@p1 int’, 1 exec sp_executesql N'select * from [Tbl] where [Id] = @p1', N'@p1 int’, 2 ※パラメータの値が違う(1 と 2) が、同じプランで実行される 異なる例 exec sp_executesql N'select * from [Tbl] where [Id] = @p1', N'@p1 int’, 1 exec sp_executesql N'select * from [Tbl] where [Id] = @p2', N’@p2 int’, 1 ※パラメータの値が同じだが、パラメータ名が違うので異なるプランになる
  5. 5. 雑な例 インデックス列が条件で 1件しかマッチしないパラメータ値の場合 => index seek 全体の8割がマッチするパラメータ値の場合 => table scan 初回が8割マッチの値、直後に1件マッチの値で実行されると… 初回:キャッシュにないので、8割マッチの値でプラン作成 => table scan 直後:キャッシュにプランがあるので、そのプランで1件マッチの値で実行 => table scan 1件マッチの値なので、index seek になって欲しい…
  6. 6. 別の名前で呼ばれてなかった? パラメータスニッフィング (Parameter Sniffing) プランの後退 (Plan regression) よくある対処方法は? キャッシュされている該当のプランをキャッシュから削除する 再度コンパイルされるように クエリにリコンパイルオプションを設定する 常にコンパイルされるように クエリストアから最適なプランに戻す クエリストアに最適なプランがあるなら 自動チューニング プランの自動修正
  7. 7. PSP 最適化 パラメーターに依存するプランの最適化 - SQL Server | Microsoft Learn プランを幾つか用意してデータの分布によって使い分けたら良いん じゃね? 低、中、高 で最大3つの実行プランが作られ、実行時パラメータによって、 Dispatcher が最適なプランを使うように振り分ける https://learn.microsoft.com/ja-jp/sql/relational- databases/performance/media/parameter-sensitivity-plan- optimization/parameter-sensitive-plan-boundaries.png?view=sql-server-ver16

×