2015-11-09 6 views
2

В настоящее время я просматриваю 70 проектов с общим объемом около 2 миллионов строк кода. Все прошло хорошо, пока несколько недель назад меня не уведомили, что несколько проектов потерпели неудачу, потому что у нас закончилось место на жестком диске на сервере SonarQube. Я был уверен, что у нас было более чем достаточно места в соответствии с требованиями HW/SW. Я прочитал, что перезапуск службы сервера Sonarqube очищает временные файлы, но после этого несколько раз что-то все еще елит больше места. Виновником приходит от сервера SQL:База данных SonarQube, использующая слишком много места (60+ ГБ)

...\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\sonarqube_log.ldf

размер этого файла в настоящее время составляет 66,8 ГБ. Кто-нибудь знает, могу ли я просто усечь материал там, узнать какие-либо рекомендации по уменьшению размера этого файла и сохранить размер во время будущих сканирований?

+0

Какая [модель восстановления] (https://msdn.microsoft.com/en-us/library/ms189275 (v = sql.110) .aspx) вы используете? Если это полный или массовый журнал, как часто вы создаете резервные копии журналов транзакций? –

+0

Используется «Простой», я не думаю, что любые резервные копии также принимаются. – Paul

+0

Простым восстановлением не требуется резервное копирование журнала транзакций. При полном или полном заполнении журналов журналы сохраняются только при резервном копировании, но Simple должен периодически обновляться. Что означает 'DBCC SQLPERF (logspace)' say - это используемое процентное пространство журнала? Я предполагаю, что он либо очень высокий (95% +), либо очень низкий (<5%). Если он очень высок, каков результат 'select name, log_reuse_wait, log_reuse_wait_desc из sys.databases' для базы данных SonarQube? –

ответ

2

OK, если для восстановления базы данных установлено значение «Полный», и вы не создаете резервные копии журналов транзакций, это проблема.

Если вы хотите помочь понять различия между моделями восстановления, то start here. Краткая версия - это то, что полное восстановление позволяет восстановить точную дату (ака, точку отказа), что означает, что вы можете восстановить БД до момента, когда возникла проблема. Недостатком полного восстановления является то, что вы должны создать резервные копии журналов транзакций или эта точная проблема: журналы растут бесконечно. Простое восстановление устраняет необходимость в резервных копиях журналов транзакций (действительно, я не думаю, что вы можете делать резервную копию журнала транзакций в базе данных Simple), но ограничивает восстановление базы данных тем, что было, когда вы в последний раз выполняли резервное копирование базы данных. Обратите внимание, что простое восстановление по-прежнему использует журналы транзакций! Система просто периодически сбрасывает их.

Итак, вам нужно будет сделать одну из двух вещей: использовать полное восстановление и резервное копирование журналов транзакций (я видел системы, которые делают это каждый час или даже каждые 15 минут для систем с высоким трафиком), или переключитесь на Простое восстановление. Это ваши единственные реальные варианты.

Независимо от того, что вы делаете, переход на простой или резервное копирование журналов приведет к сбою журналов транзакций. Вы можете проверить это с помощью DBCC SQLPERF(logspace). Однако вы заметите, что sonarqube_log.ldfне изменит размер вообще. Он по-прежнему будет 66,8 ГБ. Это по дизайну. В правильно управляемой системе журналы транзакций достигнут того размера, который им требуется для работы, а затем резервные копии и простые флеши будут поддерживать постоянный размер. Файл журнала будет правильным размером для запуска системы, поэтому ему никогда не придется расти (что дорого) и никогда не закончится в пространстве (что приведет к сбою всех транзакций).

«Итак, как я могу вернуть свое дисковое пространство?» ты спрашиваешь. «Я исправил проблему, поэтому файл журнала будет на 95% потерян».

Что вам нужно сделать, это сжать файл журнала. Это то, что вы часто увидите в письменном виде, которого вы никогда не должны делать. И, я согласен, в правильно управляемой системе вам никогда не придется это делать. Однако ваша система работала неправильно. Файлы журналов находились в бегстве. В общем, однако, вам никогда не придется это делать.

Во-первых, возьмите полную резервную копию базы данных. Повторяю: сделайте полную резервную копию своей базы данных. Это не должно вызывать никаких проблем, но вы не хотите делать такие вещи без новой резервной копии.

Затем вам нужно найти идентификатор файла для файла журнала для данной базы данных.Вы можете сделать это так:

select d.name, mf.file_id 
from sys.databases d 
join sys.master_files mf 
    on d.database_id = mf.database_id 
where mf.type = 1 
    and d.name = 'SonarQube' 

The mf.type = 1 возвращает файлы журнала транзакций только. Используйте имя вашей базы данных, если это не SonarQube.

--Switch to the SonarQube database. If you're not in the right context, you'll shrink the wrong file. 
use [SonarQube]; 

--Do a checkpoint if you're on Simple recovery 
checkpoint; 

--Do a log backup if you're on Full recovery 
backup log .... 

--Shrink logfile to 1 GB. Replace @file_id with the id you got above. 
dbcc shrinkfile (@file_id, 1024); 

Размер в МБ. Вам нужно будет угадать, насколько велика ваша БД и сколько изменений вы вносите в свою систему. Что-то между 50% размера БД и 100% размера БД довольно безопасно для большинства систем. В любом случае, я бы не сокращал журналы более 1 ГБ. Вам нужно будет следить за пространством журнала и продолжать ли журнал продолжать расти. Disk Usage report в SSMS - хороший способ сделать это.

В первый раз, когда вы запускаете это, вы, возможно, не увидите большой выигрыш на диске. Он может идти до 66,0 ГБ или 62 ГБ. Причина этого в том, что текущий хвост файла журнала все еще находится в конце файла журнала транзакций. Что вам нужно сделать, если система находится в состоянии активности, подождите несколько часов, а затем снова запустите выше. Это даст системное время для циклического завершения записи журнала в начало файла журнала, и вы сможете уменьшить его. Here - хорошая статья, в которой рассказывается о том, как на самом деле работает файл журнала, если вам интересно.

+0

Спасибо! Вчера я переключил его на «Простой» и смог освободить место, используя инструкции на том же сайте, который вы мне дали! – Paul