Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разбухание лога  [new]
Alfa
Member

Откуда:
Сообщений: 22
Доброго всем времени суток!

Вопрос по разрастанию лога поднимался не раз (поиск и FAQ читал), но ответа на свой вопрос не нашел.

Итак, база под SQL 2005, модель восстановления - Full, полный ночной бэкап + постоянные бэкапы лога в течение дня. Активно используется bulk copy.
Так вот, лог разрастается до 67Гб и занимает все место на диске. К ошибкам это пока не приводит, т.к. судя по DBCC SQLPERF(logspace), место в нем не используется (Log Space Used 0.4%)!
master		1,242188	53,14465	0
tempdb		74,92969	43,34272	0
model		0,9921875	41,33858	0
msdb		26,17969	32,8111		0
workdbnew	68575,8		0,4373923	0

DBCC SHRINKFILE('workdbnew_Log', 40960) лог замечательно усекает, но он разрастается за день снова. Не усекать же его постоянно! Собственно, а зачем сервер его увеличивает, если места и так хватает?
16 июл 10, 14:42    [9116461]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
DBCC SQLPERF(logspace),


И в какой момент времени Вы выполняли эту команду? Если файл расспухает, значит в нем нет места для новых транзакций, потому что не удалена неактивная часть лога, например, из-за долго висящих транзакций.

Сообщение было отредактировано: 16 июл 10, 14:45
16 июл 10, 14:45    [9116479]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alfa

DBCC SHRINKFILE('workdbnew_Log', 40960) лог замечательно усекает, но он разрастается за день снова. Не усекать же его постоянно! Собственно, а зачем сервер его увеличивает, если места и так хватает?

Откуда вы знаете это знаете ?
Вы засекали объем команд, которые увеличивают ваш лог ?
16 июл 10, 14:46    [9116489]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Alfa
Member

Откуда:
Сообщений: 22
И в какой момент времени Вы выполняли эту команду? Если файл расспухает, значит в нем нет места для новых транзакций, потому что не удалена неактивная часть лога, например, из-за долго висящих транзакций.

самая долгая транзакция - 2 минуты максимум. Периодичность запуска этого приложения - каждые 7 минут. В рамках это транзакции ничего не пишется.
Насколько я знаю от разработчиков софта - сделано следующее:
1. открывается транзакция
2. выбирается н-ное количество данных из разных таблиц
3. делается commit транзакции.
Сделано это для того, чтобы выбрать данные из таблиц а-ля снапшот (т.е. "срез" данных по нужным таблицам на определенный момент времени).
Может ли быть причина в этом?
Замерял DBCC SQLPERF(logspace) во время этой выборки - использование лога вырастает максимум до 0.5%.

Откуда вы знаете это знаете ?
Вы засекали объем команд, которые увеличивают ваш лог ?

Смею предположить, что если сейчас, когда лог весит 67Гб, он используется на 0.4%, то и в другое время он вряд ли используется на 100%. В софте, работающем с базой, просто нет "огромных" транзакций (если не считать той, что описана выше). Тот же bulk copy и bulk insert выбирают/вставляют максимум сотни записей за раз, тем более что они не в транзакциях.

Кстати, лог усекается после дефрагментации индексов, так что проблема не в ней (после нее лог конечно пухнет).
16 июл 10, 15:32    [9116914]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alfa

Откуда вы знаете это знаете ?
Вы засекали объем команд, которые увеличивают ваш лог ?

Смею предположить, что если сейчас, когда лог весит 67Гб, он используется на 0.4%, то и в другое время он вряд ли используется на 100%. В софте, работающем с базой, просто нет "огромных" транзакций (если не считать той, что описана выше). Тот же bulk copy и bulk insert выбирают/вставляют максимум сотни записей за раз, тем более что они не в транзакциях.
.

Вы не правильно предполагаете
Простая команда UPDATE mytable SET f1=f1 на большой базе может сожрать кучу места в логе
Которое после завершения команды и бэкапа лога будет освобождено
16 июл 10, 15:35    [9116944]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Alfa
Member

Откуда:
Сообщений: 22
Вы не правильно предполагаете
Простая команда UPDATE mytable SET f1=f1 на большой базе может сожрать кучу места в логе
Которое после завершения команды и бэкапа лога будет освобождено

естественно. Но нет у нас таких запросов.
16 июл 10, 15:42    [9117012]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alfa
Вы не правильно предполагаете
Простая команда UPDATE mytable SET f1=f1 на большой базе может сожрать кучу места в логе
Которое после завершения команды и бэкапа лога будет освобождено

естественно. Но нет у нас таких запросов.

Замечательно
Тогда вы ничем не рискуете, если запретите автоматический рост лог файла.
16 июл 10, 15:44    [9117021]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Senja
Member

Откуда: Москва
Сообщений: 84
Есть такие счетчики - Log file(s) Used Size (KB) и Log bytes flushed /sec
Посмотрите их в течение дня. Скорее всего откроете для себя много нового.
16 июл 10, 16:05    [9117210]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Alfa
Так вот, лог разрастается до 67Гб и занимает все место на диске. К ошибкам это пока не приводит, т.к. судя по DBCC SQLPERF(logspace), место в нем не используется (Log Space Used 0.4%)!
А вы в ErrorLog сервера заглядывали?

Alfa
DBCC SHRINKFILE('workdbnew_Log', 40960) лог замечательно усекает, но он разрастается за день снова. Не усекать же его постоянно! Собственно, а зачем сервер его увеличивает, если места и так хватает?
Значит это ему нужно для выполнения каких-то длинных транзакций. Иначе, тратить время на приращение лога он не станет.

А вы, своим шринканьем создаете ему дополнительную нагрузку.
16 июл 10, 16:19    [9117374]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Alfa
Member

Откуда:
Сообщений: 22
А вы в ErrorLog сервера заглядывали?

Ничего криминального, поскольку лога пока хватает.

Значит это ему нужно для выполнения каких-то длинных транзакций. Иначе, тратить время на приращение лога он не станет.

А вы, своим шринканьем создаете ему дополнительную нагрузку

Слышал я эту рекомендацию много раз. Но лучше пусть он увеличивает лог, когда припрет, чем не хватит места на диске и остановится вообще все. Пока места на диске хватало - шринк никто и не делал. Конечно, можно поставить больший диск, но при использовании <1% лога это не резонно.
И нет у нас длинных транзакций, кроме этого злополучного чтения. Может оно при каких-то условиях вызывать такой эффект?

Есть такие счетчики - Log file(s) Used Size (KB) и Log bytes flushed /sec
Посмотрите их в течение дня. Скорее всего откроете для себя много нового.

ок, попробую, спасибо.
16 июл 10, 16:43    [9117577]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
komrad
Member

Откуда:
Сообщений: 5741
Alfa,

этим скриптом можно посмотреть когда и кто увеличивает лог
в скрипте пример для базы tempdb


DECLARE @path nVARCHAR(300)
DECLARE @db NVARCHAR(100)
SET @db=N'tempdb'
select 
	@path=CONVERT(NVARCHAR(300),[value]) 
FROM ::fn_trace_getinfo(default) 
WHERE [property]=2

SELECT	top 100
		te.name, 
		t.LoginName,
		t.DatabaseName, 
		t.FileName, 
		t.StartTime, 
		dateadd(ms,t.Duration/1000,t.StartTime) [FinishTime],
		t.ApplicationName ,
		t.ObjectID,
        t.Duration/1000/1000 [Duration (s)]
FROM fn_trace_gettable(@path, NULL) AS t 
INNER JOIN sys.trace_events AS te ON t.EventClass = te.trace_event_id 
WHERE te.name LIKE '%Auto Grow' 
and t.DatabaseName=@db
ORDER BY StartTime DESC
16 июл 10, 16:52    [9117657]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Павел Уржумов
Member

Откуда:
Сообщений: 5
А можете помочь с вариантом такого скрипта для ms sql 2000? Спасибо!
5 июл 11, 12:31    [10923665]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Павел Уржумов
А можете помочь с вариантом такого скрипта для ms sql 2000? Спасибо!

Присоединяюсь...пожалуйста, если можно. Очень выручит !!!
5 июл 11, 13:05    [10924067]     Ответить | Цитировать Сообщить модератору
 Re: Разбухание лога  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Павел Уржумов
А можете помочь с вариантом такого скрипта для ms sql 2000? Спасибо!


создать сперва трассу нужно, дефолтный трейс появился только в 2005, тут руками придётся создать
5 июл 11, 13:45    [10924506]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить