В SQL Server 2008 R2 у меня есть база данных, в которой каждую ночь создаются полные резервные копии, а каждые десять минут - журналы транзакций. База данных находится в режиме полного восстановления.
Проблема в том, что файлы резервных копий для журналов транзакций имеют размер в сотни мегабайт, но определенно не должны быть такими. В базе данных нигде нет такого действия. Каждое резервное копирование длится всего десять минут. Они такие большие, что через пару дней жесткий диск полностью заполнится.
Есть идеи, из-за чего резервные копии становятся такими большими и как исправить?
Чтобы было ясно, что мы на одной странице, вы говорите, что каждый размер резервной копии журнала составляет сотни МБ, а не то, что файлы журнала (LDF) большие. Последнее обычно объясняется закреплением журнала репликацией, зеркалированием, забытой активной пользовательской транзакцией или чем-то еще, как указано в sys.databases.log_reuse_wait_desc
. Однако я понимаю, что это не так. Если каждое из резервных копий журналов, выполняемых каждые 10 минут, имеет сотни МБ, это означает, что за последние 10 минут должны быть сотни МБ. Возможно, постоянно происходит какая-то деятельность, о которой вы не подозреваете?
Конечно, я предполагаю, что вы не используете WITH NO_TRUNCATE
или WITH COPY_ONLY
синтаксис задачи резервного копирования журнала.
Следующие 3 запроса должны дать вам представление о том, чем заполнен журнал:
use [<myproblemdb>];
go
select count(*) as CountLogRecords,
sum([Log Record Length]) [Total Log Length]
from fn_dblog(null, null);
select count(*) as CountTransactionRecords,
sum([Log Record Length]) [Transaction Log Length],
[Transaction ID]
from fn_dblog(null, null)
group by [Transaction ID]
order by 2 desc;
select count(*) as CountLogOperations,
sum ([Log Record Length]) as [Operation Log Length],
[Operation]
from fn_dblog(null, null)
group by [Operation]
order by 2 desc;
Возможно, у вас слишком много VLF. Запустите DBCC LOGINFO и посмотрите, сколько строк возвращается. Если их много, рассмотрите возможность сокращения журнала транзакций базы данных и увеличения его за один шаг до подходящего размера.
Сколько данных находится в файле журнала транзакций до создания резервной копии? Вы можете увидеть это с помощью DBCC LOGINFO или просмотрев отчет о дисковом пространстве в SQL Server Management Studio. Насколько велики резервные копии журналов?