トラブル時に“どこを見るか”を知っておこう
SQL Serverの運用で避けて通れないのが障害調査(トラブルシューティング)です。
その第一歩となるのが、エラーログ(Error Log)とトレースフラグ(Trace Flag)の理解です。
これらは「なぜ問題が起きたのか」「どの設定が内部で有効になっているのか」を確認するための最重要情報源です。
本記事では、実務で押さえるべきログの見方・ローテーション管理・代表的トレースフラグをわかりやすく解説します。
目次
第1章 エラーログの概要と役割
SQL Server エラーログは、サーバー起動・停止、バックアップ、エラー、警告、接続履歴などを記録するテキストファイルです。
OSイベントログより詳細なDB内部情報が記録され、障害発生時の原因特定に欠かせません。
- サーバーの起動/停止ログ
- バックアップ・リストア履歴
- データベース状態・復旧メッセージ
- 重大エラー(例:デッドロック・I/Oエラー・リソース不足)
- トレースフラグや構成変更の有効化ログ
定期的にチェックすることで、潜在的なトラブルの早期発見につながります。
第2章 ログファイルの場所とローテーション
エラーログの既定保存場所は以下の通りです。
C:\Program Files\Microsoft SQL Server\MSSQLXX.<インスタンス名>\MSSQL\Log\ERRORLOG
既定では「現在のERRORLOG」と「過去6世代(ERRORLOG.1〜6)」が保持されます。
古いログは上書きされるため、必要に応じてバックアップや世代数の拡張を行います。
-- 保持するログファイル数を変更(例:12世代)
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'NumErrorLogs',
REG_DWORD,
12;
ローテーションは手動またはスケジュールジョブで切り替えることも可能です。
-- ログをローテーション(新しいERRORLOGを作成)
EXEC sp_cycle_errorlog;
毎週や月初に自動ローテーションを設定すると、ファイルサイズを抑制し調査性が向上します。
第3章 エラーログの確認方法(SSMS/T-SQL)
SSMSでは「SQL Server Agent → エラーログ」または「管理 → SQL Server ログ」からGUIで確認可能です。 T-SQLで直接読むこともできます。
-- 最新のエラーログを確認
EXEC xp_readerrorlog 0, 1, N'', N'', NULL, NULL, N'desc';
-- 特定キーワードを抽出(例:Deadlock)
EXEC xp_readerrorlog 0, 1, N'Deadlock';
引数の意味:
- 第1引数:ファイル番号(0=最新)
- 第2引数:ログタイプ(1=SQL Server、2=SQL Agent)
- 第3・4引数:検索キーワード
この方法なら、SSMSを開かずともスクリプトから定期解析が可能です。
第4章 トレースフラグの仕組みと有効化
トレースフラグ(Trace Flag)は、SQL Serverの内部動作を変更・調査するためのスイッチです。 主に以下の2つの用途があります。
- 障害調査・詳細ログ出力(例:デッドロック解析)
- 動作チューニング・互換モード制御(例:最適化動作変更)
有効化には「セッション単位」「サーバー全体」「起動時指定」の3種類があります。
-- セッション単位で有効化
DBCC TRACEON (1204, -1);
-- 現在有効なトレースフラグ一覧を確認
DBCC TRACESTATUS (-1);
起動時に自動有効化したい場合は、SQL Serverの起動パラメータに「-TXXXX」を追加します。
例:-T1222(デッドロック詳細ログ出力)
第5章 代表的トレースフラグと活用例
| 番号 | 概要 | 用途 |
|---|---|---|
| 1204 / 1222 | デッドロックの詳細をエラーログに出力 | デッドロック解析 |
| 1118 | TempDBの割り当て競合緩和(SQL2016以前) | TempDB最適化 |
| 4199 | 累積的なクエリ最適化修正を有効化 | 最新の最適化動作を反映 |
| 3226 | バックアップ成功ログを非表示 | ログ肥大防止 |
| 3605 | 診断情報をエラーログへ出力 | デバッグ・内部情報出力 |
特に1204/1222はデッドロック解析の定番です。 どちらもエラーログにXML形式でロック競合情報を出力します。
第6章 運用時の注意点とベストプラクティス
- トレースフラグの乱用禁止: 診断目的以外では慎重に。互換性や動作変更の影響に注意。
- ログの自動ローテーション設定: sp_cycle_errorlog を定期実行し、古いログは別途保管。
- 定期監視の仕組み化: IT0029で紹介したDatabase Mail+ジョブを組み合わせて、ERRORLOGに特定文字列(例:"Severity 20")が出たら通知するようにする。
- 再起動時の動作確認: 起動オプション(-Tフラグ)は再起動時に反映されるため、設定変更後は確実に確認。
-- トレースフラグ有効化確認
DBCC TRACESTATUS(-1);
GO
-- デッドロック関連ログ抽出ジョブ(通知用)
EXEC xp_readerrorlog 0, 1, N'Deadlock';
まとめ:トレースとログを“読む力”を身につけよう
SQL Serverの安定運用には、ログを読む力=内部の挙動を理解する力が欠かせません。
エラーログは日々の健康診断、トレースフラグは一時的なMRIのようなものです。
適切に使い分けることで、障害を未然に防ぎ、問題の根本原因を最短で突き止められます。
トラブルが起きたときに焦らず対応できるよう、これらの仕組みを普段から活用しておきましょう。
参考リンク(公式ドキュメント)

0 件のコメント:
コメントを投稿