連載
» 2017年09月19日 05時00分 公開

SQL Serverトラブルシューティング(59):1日に1回再起動するシステムでトランザクションログファイルが肥大化した(ファイル管理トラブル) (1/2)

本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「トランザクションログファイルが肥大化したトラブルの解決策」を解説します。

[内ヶ島暢之,ユニアデックス株式会社]

連載バックナンバー

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

トラブル 48(カテゴリー:ファイル管理トラブル):トランザクションログファイルの肥大化

 「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。

トラブルの実例:1日に1回再起動するシステムで、システムドライブ枯渇のアラートが上がった。

 トランザクションログが肥大化したことでサーバのストレージを圧迫していることは分かったが、なぜ肥大化したのかが分からない。

トラブルの原因を探る

 サーバのWindowsエクスプローラから、SQL ServerのModelデータベースのトランザクションログファイルが肥大化していることを確認できました。しかし、このシステムでModelデータベースに対する変更は長らく行っていません。なぜ肥大化してしまうのか、この原因を探りましょう。

 トランザクションログファイルは、データベースに対する変更履歴を記録する重要なファイルです。ただModelデータベースは、ユーザーデータベースの元になるデータベースなので、通常は変更が行われるものではありません。

 今回は「DBCC LOG(*)」と呼ばれるコマンドを使い、トランザクションログの中を調査してみます。文法は「DBCC LOG(‘データベース名’)」です(図1)。

(*)注:DBCC LOGは一般には公開されていないコマンドのため、サポートの対象外になります。利用時にはテスト環境で動作確認をしてください



photo 図1 SQL Server Management Studioからトランザクションログの内容を確認する「DBCC LOG」を実行。LOP_BEGIN_CKPTとLOP_END_CKPTがチェックポイントの開始と終了を記録している

 DBCC LOGの出力結果によって、まず、トランザクションログには「CHECKPOINT」の記録があることが分かりました。CHECKPOINTとは、SQL Serverがバッファー上のデータをデータファイルに書き出すことによってデータの整合性を保つための処理のことです。そして、このCHECKPOINTはSQL Serverが再起動されたタイミングで発生していました。

 一方、Modelデータベースの復旧モデルは、規定では完全です(図2)。完全復旧モデルのデータベースは、一度完全バックアップを取得すると、その後トランザクションログはトランザクションログのバックアップをしない限り履歴を記録し続けます。

photo 図2 Modelデータベースは通常、完全復旧モデルである

 つまり、今回のトラブルは次の2つの条件が重なったことで発生していました。

  1. Modelデータベースに対して「完全バックアップ」をしたことがある
  2. 再起動を繰り返す運用ルーティンによって、トランザクションログファイルにCHECKPOINTが記録される
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。