あけましておめでとうございます。2022 年最初の投稿ですね。
今年は SQL Server のクエリオプティマイザ周りのスキルを延ばそうと思っているのですが、その中で、どのようなドキュメントを最初に確認したほうが良いのかを軽くまとめてみました。
SQL Server のクエリ実行についてはざっくりと書くと、
- Algebrizer によるクエリの解析とクエリプロセッサツリー (論理操作) / クエリハッシュの出力
- クエリオプティマイザによる物理操作の選択と最適化
- クエリ実行
というようなステップが踏まれると思いますが、これらのクエリ実行の流れの動作を把握するために一読しておいたほうが良いドキュメントを箇条書きでまとめたものとなります。
アーキテクチャガイド
- SQL Server のクエリ実行のアーキテクチャについての解説
- クエリ処理アーキテクチャ ガイド
- SQL Server のインデックスのアーキテクチャとデザイン ガイド
クエリ
- クエリ
- SELECT (Transact-SQL)
- SELECT の処理順序について記載
- 結合 (SQL Server)
- 結合の種類と動作について解説
- 外部入力 / 内部入力、ビルド入力 / プローブ入力についての解説も含まれている
- サブクエリ (SQL Server)
実行プラン
- 実行プラン
- プラン表示の論理操作と物理操作のリファレンス
- 実行プランの各種操作 (各アイコン) の内容についてのリファレンス
- 論理操作と物理操作の違いについても記載されている。
- メモリ最適化テーブルのクエリ処理のガイド
- ディスクベーステーブルについての解説も行われている
- Algebrizer についても本情報に記載がある
- 本情報 / クエリ処理アーキテクチャ ガイド / クエリ プランの種類について説明する が Algebrizer について記載があるドキュメントとなる
- Algebrizer については、What is role of Algebrizer process ‘Object Binding’? のスレッドも参照
- Showplan Schema
- 実行プランの XML スキーマの定義情報がコメント付きで公開されている
クエリコンパイル
- 実行プランのキャッシュと再利用
- ストアド プロシージャの再コンパイル
- コンパイル ロックによるブロックの問題のトラブルシューティング
- SP:Recompile イベント クラス
- 再コンパイルが発生する事象についての記載
- 上記情報は Profiler の情報となるため、「select * from sys.dm_xe_map_values where name = ‘statement_recompile_cause’」で拡張イベントの最新の情報を取得可
統計情報
- 統計
- 統計情報の自動更新についても本情報に記載されている
- How to generate a script of the necessary database metadata to create a statistics-only database in SQL Server
- 統計情報をスクリプト化して、統計情報のみのデータベースを作成する方法 (クローンデータベースの作成方法)
- DBCC CLONEDATABASE (Transact-SQL) を使用して作成することも可能
- カーディナリティ推定 (SQL Server)
- 統計情報を基にして、クエリで取得される件数の推定
- Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator
- SQL Server 2014 の基数推定の変更点
Query Optimizer Internal
- Query Optimizer Deep Dive – Part 1
- SQL Server Execution Plans, Third Edition
- Redgate の e-Book については、SQL Books から取得することができます