検索
連載

【トレースフラグ 2390】──昇順のキー列に関わらず統計情報範囲外の検索があった場合に、現在の最大値の統計情報を追加するSQL Serverトレースフラグレファレンス(36)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は「トレースフラグ2390の詳細と使い方」を解説します。

Share
Tweet
LINE
Hatena

SQL Serverトレースフラグレファレンス一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブル対策を踏まえた「SQL Serverのトレースフラグ」の使いこなしTipsを紹介していきます。

 今回は「トレースフラグ2390」の詳細と使い方を解説します。

 トレースフラグ2390は、昇順のキー列に関わらず統計情報範囲外の検索があった場合に、現在の最大値の統計情報を追加する設定です。SQL Server 2012 SP1以降に対応します。

 前回紹介したトレースフラグ2389は、昇順のキー列に対して統計情報範囲外の検索があった場合に、現在の最大値を含めた統計情報を追加して、効率的な実行プランを作成しました。

 しかしSQL Serverが昇順のキー列だと認識するには、統計情報の更新で対象の列が3回連続、増加している必要がありました。これに対してトレースフラグ2390は、昇順キー列だと判断されなくても現在の最大値を含めた統計情報を一時的に作成し、実行プランを作成します。

設定可能なスコープ

トレースフラグ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)。

図1
図1 統計情報範囲外のデータを検索しているため、予測行数が1となった

 トレースフラグ2389では統計情報を4回更新し、キー列が昇順であるとSQL Serverが認識する必要がありました。今回は統計情報を3回しか更新していないため、キー列が昇順であるとSQL Serverは認識できていません。しかしトレースフラグ2390が有効な場合は昇順の認識に関わらず、統計情報範囲外のデータを検索しても、現在の最大値を使用した統計情報を一時的に追加するため、より精度の高い予測行数を算出します(図2)。

図2
図2 統計情報範囲外のデータを検索しているが、トレースフラグ2390が有効なため、予測行数が100となった

 クエリ実行時に追加の統計情報を作成するオーバーヘッドの他、実行プランの差異により実行プランが変化する可能性があります。このため、トレースフラグ2390を実装する際には検証環境で十分なテストが必要です。

 互換性レベルが120以上の場合は、予測行数のアルゴリズムが変わっており、行数予測の精度が向上しています。この場合、トレースフラグ2390を適用しても動作変更はありません。

 ※本Tipsは、Windows Server 2012 R2上に「SQL Server 2016 SP1 CU3」をインストールした環境で解説しています。

筆者紹介

内ヶ島 暢之(うちがしま のぶゆき)

ユニアデックス株式会社 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.

ページトップに戻る