「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は「トレースフラグ2312の詳細と使い方」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブル対策を踏まえた「SQL Serverのトレースフラグ」の使いこなしTipsを紹介していきます。
今回は「トレースフラグ2312」の詳細と使い方を解説します。
トレースフラグ2312は、互換性レベルが110以下の場合、互換性レベル120の基数推定モデルを使用する設定です。SQL Server 2014以降に対応します。
SQL Serverの各バージョンではそれぞれのバージョンに対応する互換性レベルが存在します。互換性レベルを最新にすることで、最新の機能が使用できるようになりますが、アプリケーションの制約などにより互換性レベルを下げた設定で運用しなければならない場合があります。SQL Server 2014の互換性レベル120からは、基数推定の機能に大きな修正が入ったため、それまでの互換性レベルで作成した実行プランと大きく異なることが多々ありました。
互換性レベルが110以下の場合、基数推定モデルは70を使用します。互換性レベル120では基数推定モデルも120を使用します。互換性レベル110以下のデータベースでトレースフラグ2312を有効にすると、基数推定モデルだけ120を使用して、実行プランを作成します。
以下に、関連するMicrosoftのドキュメントを挙げます。以下のドキュメントではクエリの結果に含まれる行の数を予測する基数推定という意味で、カーディナリティ推定という用語を使っています。
設定方法 | 可/不可 | 要/不要 |
---|---|---|
スタートアップ | ○ | − |
グローバルスコープ | ○ | − |
セッションスコープ | ○ | − |
クエリスコープ | ○ | − |
トレースフラグ 3604/3605 | − | 不要 |
実行プランの中に含まれているCardinalityEstimationModelVersionを見ることで、実際に使用する基数推定モデルを確認できます。
SQL Server 2016の互換性レベル130を設定したデータベースで実行プランを作成すると、基数推定モデルは130でした(図1)。互換性レベルを110に変更すると基数推定モデルは70になりました(図2)。互換性レベルを110に保ったままトレースフラグ2312を有効にすると、基数推定モデルが120に変わりました(図3)。
トレースフラグ2312と似た機能としてFORCE_DEFAULT_CARDINALITY_ESTIMATIONというクエリヒントがあります。こちらはトレースフラグなどで強制的に下げられた基数推定モデルをデータベースの互換性レベルと同じ基数推定モデルに戻す機能です。従って、トレースフラグ2312とは動作が異なります。
ユニアデックス株式会社 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.