「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は「トレースフラグ2528の詳細と使い方」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブル対策を踏まえた「SQL Serverのトレースフラグ」の使いこなしTipsを紹介していきます。
今回は「トレースフラグ2528」の詳細と使い方を解説します。
トレースフラグ2528は、DBCC CHECKDBのパラレル実行を抑制し、シングルスレッド実行に変更する設定です。SQL Serverの全バージョンに対応します。
データベースに格納されたオブジェクトの整合性を確認するためのDBCC CHECKDBというコマンドがあります(SQL Serverトラブルシューティング(14))
既定動作では、DBCC CHECKDBが必要に応じて自動的にパラレル実行されます。しかし、パラレル実行された場合、予想以上にスレッドやCPUリソースを消費する可能性があります。
例えばバッチ処理実行時間と重複するように、または前後するようにデータベースの整合性チェックなどを実行すると、バッチ処理も整合性チェックも処理終了までに通常以上の時間を要する、といったことが考えられます。
これを回避するためにトレースフラグ2528はDBCC CHECKDBにおける処理をシングルスレッドで動くように動作変更をします。サーバオプションのmax degree of parallelismを1にすることでもシングルスレッド動作に変更可能ですが、DBCC CHECKDB以外のユーザー処理も全てシングルスレッドの動作になってしまいます。なおDBCC CHECKDBのサブセットでもあるDBCC CHECKFILEGROUP、DBCC CHECKTABLEでも同様にシングルスレッド動作に変わります。
トレースフラグ2528にはデメリットもあります。もともとパラレル実行されていたDBCC CHECKDBをシングルスレッド実行に変更することで、終了までの時間が長くなる可能性があります。リソース消費のデメリットとDBCC CHECKDBの実行時間が長くなること、どちらがシステムに対して適切なのかを状況に合わせて判断する必要があります。
なお、SQL Server 2014 SP2以降ではDBCC CHECKDBの実行オプションにMAXDOPが実装されました。トレースフラグを使わなくても制御が可能となりました。
設定方法 | 可/不可 | 要/不要 |
---|---|---|
スタートアップ | ○ | − |
グローバルスコープ | ○ | − |
セッションスコープ | ○ | − |
クエリスコープ | − | − |
トレースフラグ 3604/3605 | − | 不要 |
以下ではDBCC CHECKDBの実行状態の違いを見てみましょう。トレースフラグ2528が無効になっているときと有効になっているときの違いを図1と図2に示しました。
図1ではトレースフラグが無効(off)になっており、パラレル実行している様子が見て取れます。パラレルかどうか調べるため、sys.sysprocessesというシステムビューを用いました。spidを見て、同一IDの行が複数出力されているため、パラレル実行だと判断しました。
図2ではトレースフラグが有効になっており、シングルスレッドの動作になっていることが分かります。
ユニアデックス株式会社 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.