0

約 6 か月間、いくつかのデータベースをログ配布してきましたが、現在のサイズは 20 ~ 60 GB です。ログは 5 分ごとに配布され、保持期間は 3 日間です。これらのログは、5 分ごとに約 18KB から 5MB まで変化します (小さい方が多くなります)。

MSDBData データベースが非常に大きくなっていることに気付きました (30GB)。これは正常ですか?

先日、(テスト) ログ配布データベースを削除するようになったとき、一見ログ配布履歴を削除しようとしている間に、30 分以上かかりました。ログ配布タスクを有効にすると、非常に高い IO が発生するようになりました。

sp_cleanup_log_shipping_history を実行してみました。これをスケジュールする必要があるのか​​、それとも自動的に実行するのか (?) は明確ではありませんが、数時間大量の IO が発生しましたが、MSDB のサイズは減少しませんでした (ディスクで使用される物理スペースではなく、テーブル サイズを調べます)。いくつかの行が削除されたようです。

私の知る限り、ログ配布にかかる時間は主に、問題を引き起こしているこの SP への呼び出しです。

現在、log_shipping_monitor_error_detail テーブルには 15293932 行があり、log_shipping_monitor_history_detail には 15350276 行があります。エラーは、後でログを削除する権限が不十分であったことが原因でした。

これをさらに診断する方法、「通常の」動作はどうあるべきか、これを再び発生させるためのメンテナンス タスクとして何をスクリプト化できるかについて、誰か提案はありますか?

(これがここに投稿されたものか、ServerFault に投稿されたものかはわかりませんが、ログ配布に関する質問が他にもありました!)

4

1 に答える 1

0

その期間に頻繁にログを配布している場合、30 GB は適切な球場にあります。

どのテーブルが最悪の犯罪者であるかを調べます。これは、どこから片付けを開始するかについてのヒントになります。次の SQL は、どのテーブルがどのスペースを消費しているかの詳細を示します。

create table #RawData (name varchar(100), rows varchar(20), reservedKB varchar(20), dataKB varchar(20), index_sizeKB varchar(18), unusedKB varchar(18))
create table #Data (name varchar(100), rows int, reserved float, data float, index_size float, unused float)
exec sp_msforeachtable 'insert into #RawData exec sp_spaceused ''?'''
INSERT INTO #Data
SELECT name, rows, 
CONVERT(float, REPLACE(reservedKB, ' KB', ''))/1024, 
CONVERT(float, REPLACE(dataKB, ' KB', ''))/1024, 
CONVERT(float, REPLACE(index_sizeKB, ' KB', ''))/1024, 
CONVERT(float, REPLACE(unusedKB, ' KB', ''))/1024 
FROM #RawData
select *, data+index_size as used from #Data order by data+index_size desc
drop table #RawData
drop table #Data
于 2013-09-12T12:41:28.587 に答える