本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「トランザクションログファイルが肥大化したトラブルの解決策」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
トラブルの実例:1日に1回再起動するシステムで、システムドライブ枯渇のアラートが上がった。
トランザクションログが肥大化したことでサーバのストレージを圧迫していることは分かったが、なぜ肥大化したのかが分からない。
サーバのWindowsエクスプローラから、SQL ServerのModelデータベースのトランザクションログファイルが肥大化していることを確認できました。しかし、このシステムでModelデータベースに対する変更は長らく行っていません。なぜ肥大化してしまうのか、この原因を探りましょう。
トランザクションログファイルは、データベースに対する変更履歴を記録する重要なファイルです。ただModelデータベースは、ユーザーデータベースの元になるデータベースなので、通常は変更が行われるものではありません。
今回は「DBCC LOG(*)」と呼ばれるコマンドを使い、トランザクションログの中を調査してみます。文法は「DBCC LOG(‘データベース名’)」です(図1)。
(*)注:DBCC LOGは一般には公開されていないコマンドのため、サポートの対象外になります。利用時にはテスト環境で動作確認をしてください
DBCC LOGの出力結果によって、まず、トランザクションログには「CHECKPOINT」の記録があることが分かりました。CHECKPOINTとは、SQL Serverがバッファー上のデータをデータファイルに書き出すことによってデータの整合性を保つための処理のことです。そして、このCHECKPOINTはSQL Serverが再起動されたタイミングで発生していました。
一方、Modelデータベースの復旧モデルは、規定では完全です(図2)。完全復旧モデルのデータベースは、一度完全バックアップを取得すると、その後トランザクションログはトランザクションログのバックアップをしない限り履歴を記録し続けます。
つまり、今回のトラブルは次の2つの条件が重なったことで発生していました。
Copyright © ITmedia, Inc. All Rights Reserved.