【トレースフラグ 2390】──昇順のキー列に関わらず統計情報範囲外の検索があった場合に、現在の最大値の統計情報を追加する:SQL Serverトレースフラグレファレンス(36)
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は「トレースフラグ2390の詳細と使い方」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブル対策を踏まえた「SQL Serverのトレースフラグ」の使いこなしTipsを紹介していきます。
今回は「トレースフラグ2390」の詳細と使い方を解説します。
トレースフラグ2390は、昇順のキー列に関わらず統計情報範囲外の検索があった場合に、現在の最大値の統計情報を追加する設定です。SQL Server 2012 SP1以降に対応します。
前回紹介したトレースフラグ2389は、昇順のキー列に対して統計情報範囲外の検索があった場合に、現在の最大値を含めた統計情報を追加して、効率的な実行プランを作成しました。
しかしSQL Serverが昇順のキー列だと認識するには、統計情報の更新で対象の列が3回連続、増加している必要がありました。これに対してトレースフラグ2390は、昇順キー列だと判断されなくても現在の最大値を含めた統計情報を一時的に作成し、実行プランを作成します。
設定可能なスコープ
設定方法 | 可/不可 | 要/不要 |
---|---|---|
スタートアップ | ○ | − |
グローバルスコープ | ○ | − |
セッションスコープ | ○ | − |
クエリスコープ | ○ | − |
トレースフラグ 3604/3605 | − | 不要 |
動作例
Datetime2型の列に対して以下のようにデータを挿入し、統計情報を3回更新します。その後追加のデータを挿入しますが、統計情報は更新しません。
CREATE TABLE Table1 (Col1 DATETIME2) GO CREATE NONCLUSTERED INDEX Index1 ON Table1 (Col1) GO INSERT INTO Table1 VALUES ('2018-01-01') GO 100 UPDATE STATISTICS Table1 WITH FULLSCAN GO INSERT INTO Table1 VALUES ('2018-01-02') GO 100 UPDATE STATISTICS Table1 WITH FULLSCAN GO INSERT INTO Table1 VALUES ('2018-01-03') GO 100 UPDATE STATISTICS Table1 WITH FULLSCAN GO INSERT INTO Table1 VALUES ('2018-01-04') GO 100 INSERT INTO Table1 VALUES ('2018-01-05') GO 100
この状態で1月5日のデータを検索しても、統計情報には1月3日までのデータしか含まれていないため、実行プランでは予測行数が1です(図1)。
トレースフラグ2389では統計情報を4回更新し、キー列が昇順であるとSQL Serverが認識する必要がありました。今回は統計情報を3回しか更新していないため、キー列が昇順であるとSQL Serverは認識できていません。しかしトレースフラグ2390が有効な場合は昇順の認識に関わらず、統計情報範囲外のデータを検索しても、現在の最大値を使用した統計情報を一時的に追加するため、より精度の高い予測行数を算出します(図2)。
クエリ実行時に追加の統計情報を作成するオーバーヘッドの他、実行プランの差異により実行プランが変化する可能性があります。このため、トレースフラグ2390を実装する際には検証環境で十分なテストが必要です。
互換性レベルが120以上の場合は、予測行数のアルゴリズムが変わっており、行数予測の精度が向上しています。この場合、トレースフラグ2390を適用しても動作変更はありません。
筆者紹介
内ヶ島 暢之(うちがしま のぶゆき)
ユニアデックス株式会社 NUL System Services Corporation所属。Microsoft MVP for Data Platform(2011〜)。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を担当。2016年IoTビジネス開発の担当を経て、現在は米国シリコンバレーにて駐在員として活動中。目標は生きて日本に帰ること。
椎名 武史(しいな たけし)
ユニアデックス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- それでは“ダメ”な「トラブル対応例」
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、「SQL Serverで起こりがちなトラブル」を厳選して、具体的な対処方法を紹介していきます。第1回目は「トラブルを適切に対処するための考え方」を解説します。 - 「パラメータースニッフィング」によって、あるタイミングから処理が遅くなった(パフォーマンストラブル)
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「あるタイミングで処理遅延が発生し、それが継続して発生するようになってしまった場合の対処例.2」を解説します。 - I/Oボトルネックの病巣はこれで究明できる