Configuration Manager ReportServer データベースのトランザクションログ肥大化への対策

Last Update:

こんにちは。Configuration Manager サポートチームです。

本ポストでは、Configuration Manager の ReportServer データベースのトランザクションログ肥大化への対策をご紹介いたします。

Configuration Manager でレポート機能を利用されている環境で、ReportServer データベースのトランザクションログファイルが肥大化し、ディスクが逼迫したというお問い合わせをよくいただきます。
これは SQL Server Reporting Services (SSRS) の ReportServer データベースを完全復旧モデルで運用されていて、トランザクションログの切り捨てを実行していない環境で発生します。

Configuration Manager で使用する SSRS のデータベースは、破損しても基本的にレポーティングサービスの役割を再構築することで復旧はできますので、普段の運用ではバックアップもあまり必要なく復旧モデルも単純で問題ありません。(カスタムレポートを利用している場合は、バックアップが重要です。文末の参考情報をご参照ください。)

もしも、ご利用の環境で ReportServer データベースが肥大化してディスク容量が逼迫する問題が生じた場合には、以下にご紹介する SQL Server Management Studio を用いた、単純モデルへの変更および、圧縮方法をご利用ください。

データベース復旧モデルの変更手順

1. 復旧モデルの変更

  1. SQL Server Management Studio で 対象の SQL Server に接続します。

  2. 左上の “新しいクエリ” ボタンを押し、クエリ入力画面を開きます。

  3. 現在のトランザクションログサイズと使用率を確認します。肥大化していると対象のデータベースは、トランザクションログファイルが大きく使用率が高いことが確認いただけます。

    1
    2
    dbcc sqlperf(logspace);  
    go
  4. データベース復旧モデルを「単純」に変更します。

    1
    2
    3
    use master  
    go
    alter database <データベース名> set recovery simple;

例: データベース名が ReportServer の場合

1
2
3
4
use master;  
go
alter database ReportServer set recovery simple;
go

上記の実行により、復旧モデルの変更とチェックポイントが実行されます。単純復旧モデルとなりチェックポイントが実行されますと、トランザクションレコードを切り捨て、空き領域となります。
復旧モデルの変更は、対象データベースがトランザクション実行中でも、使用中のユーザーがいても実行できます。変更に伴い、再起動なども必要ありません。
ここで再び、上記 3. の dbcc sqlperf(logspace) を実行しますと、ファイルサイズは同じでも使用率が減少していると思います。

2. トランザクションログの縮小

  1. トランザクションログファイルの論理名とサイズを確認します。論理名の欄には、ReportServer_log と出力されます。

    1
    2
    3
    Use <データベース名>  
    Go
    select file_id,name [論理名] ,CAST(size as BIGINT)*8192/1024/1024 [LogSize(MB)],physical_name from sys.database_files where type_desc = 'log';
  2. トランザクションログを圧縮します。トランザクションログファイルの論理名、圧縮後のサイズ(ターゲットサイズ)を指定し、圧縮を実行します。
    ※トランザクションログに空きがあるにも関わらず指定したターゲットサイズまで圧縮されないことがあります。

    1
    2
    3
    4
    Use <データベース名>;  
    Go
    dbcc shrinkfile('論理名',ターゲットサイズ(MB));
    go

例: 論理名が ReportServer_log、圧縮後のサイズを 1 GB とする場合

1
2
3
use ReportServer;  
go
dbcc shrinkfile('ReportServer_log', 1024); go

トランザクションログファイルは、内部的に仮想ログ ファイルに分割されています。並び順が後ろの方の仮想ログを現在使用中の場合には、その位置までしか圧縮できず、十分に圧縮されない場合があるためです。この場合には、しばらく時間を空け、対象データベースに対してチェックポイントを実行後に、圧縮を再度実行して下さい。

1
2
3
4
use <データベース名>;  
go
checkpoint;
go

手順は以上となります。

参考情報

復旧モデルと、ログ管理の詳細については、以下の技術文書もよろしければご参照ください。

Title: 単純復旧モデルでのバックアップ
URL: https://learn.microsoft.com/ja-jp/previous-versions/sql/sql-server-2008/ms191164(v=sql.100)?redirectedfrom=MSDN

Title: 完全復旧モデルでのバックアップ
URL: https://learn.microsoft.com/ja-jp/previous-versions/sql/sql-server-2008/ms190217(v=sql.100)?redirectedfrom=MSDN

Title: トランザクション ログの管理
URL: https://learn.microsoft.com/ja-jp/previous-versions/sql/sql-server-2008/ms345583(v=sql.100)?redirectedfrom=MSDN

Title: トランザクション ログのバックアップ
URL: https://learn.microsoft.com/ja-jp/previous-versions/sql/sql-server-2008/ms190440(v=sql.100)?redirectedfrom=MSDN

Title: HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法
URL: https://learn.microsoft.com/ja-jp/archive/blogs/jpsql/howto-management-studio-ldf

Reporting Services の定義済みのレポートを変更した場合や、カスタム レポートを作成した場合は、レポート サーバー データベース ファイルのバックアップを取ることが重要です。以下のページもご確認ください。

Title: カスタム レポートをバックアップする
URL: https://learn.microsoft.com/ja-jp/mem/configmgr/core/servers/manage/backup-and-recovery#back-up-custom-reports

免責事項

このドキュメントは現状有姿で提供され、 このドキュメントに記載されている情報や見解 (URL 等のインターネット Web サイトに関する情報を含む) は、将来予告なしに変更されることがあります。 お客様は、その使用に関するリスクを負うものとします。