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

Откуда:
Сообщений: 106
Сервер - SQL Server 2008 R2
Возникла проблема с быстрым ростом лога БД.

Везде где можно использую DBCC TRACEON (610)
Однако это не спасает, у нас используются snapshot транзакции.

На просторах интернета пишут, что спасает DBCC SHRINKFILE ( databasename_Log, 1)
Однако как я понял данная команда не может сделать обрезание, если рабочая БД не была забэкаплена.

Хотелось бы всетаки после завершения транзакции, удалять ее лог.
Подскажите возможно ли такое, без создания бэкапа всей БД?

ЗЫ. Базе плохо не должно быть, потому как если сделать дэтач/атач(без лога) база восстанавливается отлично без косяков.
19 сен 11, 13:31    [11297992]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
truper, если полная модель восстановления, делайте бэкапы логов чаще. если неполная, попробуйте после "больших" транзакций делать checkpoint
19 сен 11, 13:47    [11298209]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Glory
Member

Откуда:
Сообщений: 104751
ТОП 10 Вопрос 1
19 сен 11, 13:48    [11298233]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
truper,

У вас модель восстановления то какая?
19 сен 11, 16:00    [11299537]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

Откуда:
Сообщений: 106
Модель восстановления SIMPLE
Пока не удалось протестировать CHECKPOINT

В любом случае есть вопрос.
Зачем вообще хранить этот лог файл со старыми транзакциями? С текущими транзакциями все понятся (если вдруг чего, нужно откатиться), но если у транзакции было указано commit, после завершения записи данных в базу, можно ведь этот лог(часть) зачистить.

Для примера можно взять detach/attach(без лога) эта процедура вручную выполняется буквально за пару минут, причем с базой ничего плохого не происходит, значит в этом логе ничего важного и нет, почему его нельзя просто так урезать или просто указать серверу чтобы он не хранил там старых транзакций?
20 сен 11, 16:03    [11306690]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

Откуда:
Сообщений: 106
И еще... не хочется делать постоянные бэкапы базы и логов, у нас сервер девелопмент, на данном этапе нам нужна скорость а не стабильность.
20 сен 11, 16:05    [11306721]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
Зачем вообще хранить этот лог файл со старыми транзакциями? С текущими транзакциями все понятся (если вдруг чего, нужно откатиться), но если у транзакции было указано commit, после завершения записи данных в базу, можно ведь этот лог(часть) зачистить.

А ваша репликация транзакций откуда потом данные возьмет ?

truper
Для примера можно взять detach/attach(без лога) эта процедура вручную выполняется буквально за пару минут, причем с базой ничего плохого не происходит, значит в этом логе ничего важного и нет, почему его нельзя просто так урезать или просто указать серверу чтобы он не хранил там старых транзакций?

А что вы сделали то для "просто так урезать" ? какую команду выполнили ?
20 сен 11, 16:07    [11306737]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

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

1) Ну так пусть транзакция запишет эти данные в файл БД, и очистит лог.
2) Пробовал шринк DBCC SHRINKFILE ( databasename_Log, 1)
20 сен 11, 16:18    [11306906]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
1) Ну так пусть транзакция запишет эти данные в файл БД, и очистит лог.

И вы убедились, что репликация этих транзакций тоже закончилась ?
Какой командой/средством ?

truper
2) Пробовал шринк DBCC SHRINKFILE ( databasename_Log, 1)

Команда SHRINKFILE - это сжатие лога. А не его усечение
20 сен 11, 16:21    [11306961]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
truper
В любом случае есть вопрос.
Зачем вообще хранить этот лог файл со старыми транзакциями? С текущими транзакциями все понятся (если вдруг чего, нужно откатиться), но если у транзакции было указано commit, после завершения записи данных в базу, можно ведь этот лог(часть) зачистить.
Если людям нужнен лог, они говорят серверу, что его нужно хранить, если не нужен, то не говорят.

Нужен лог со старыми транзакциями для того, чтобы можно было восстановить состояние базы на любой момент времени.

Всё вроде просто; непонятно, какие у вас проблемы.

Если модель восстановления SIMPLE, то лог не будет хранится сервером.
20 сен 11, 16:21    [11306962]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

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

1) DBCC OPENTRAN (DB)
2) sys.syslockinfo

Если SHRINKFILE не усечение файла логов, тогда подскажите чем усекать.

alexeyvg
Если людям нужнен лог, они говорят серверу, что его нужно хранить, если не нужен, то не говорят.
Нужен лог со старыми транзакциями для того, чтобы можно было восстановить состояние базы на любой момент времени.
Всё вроде просто; непонятно, какие у вас проблемы.
Если модель восстановления SIMPLE, то лог не будет хранится сервером.


Я так понимаю мы говорим серверу SIMPLE, чтобы он не хранил старые транзакции, но у нас почемуто лог разрастается.

Как вариант, возможно у нас есть незавершенные транзакции(ошибка с нашей стороны) которые хранятся в логе. Как тогда от них избавиться, если например сессия уже была утеряна, или даже сервер был перезапущен?
20 сен 11, 16:32    [11307085]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
truper
И еще... не хочется делать постоянные бэкапы базы и логов, у нас сервер девелопмент, на данном этапе нам нужна скорость а не стабильность.


так всё-таки, нужно больше места на диске или выше скорость?

если постоянно стараться усечь лог и сжать его до нулевого размера, то сервер будет вынужден его всё время увеличивать, что приведет к уменьшению скорости его работы

копать сюда http://msdn.microsoft.com/ru-ru/library/ms189085.aspx и сюда http://msdn.microsoft.com/ru-ru/library/ms178037.aspx
20 сен 11, 16:34    [11307112]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
1) DBCC OPENTRAN (DB)
2) sys.syslockinfo


DBCC SQLPERF(LOGSPACE);
select log_reuse_wait, log_reuse_wait_desc
from sys.databases
where name = 'MyDB'
20 сен 11, 16:36    [11307151]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
truper
alexeyvg
Если людям нужнен лог, они говорят серверу, что его нужно хранить, если не нужен, то не говорят.
Нужен лог со старыми транзакциями для того, чтобы можно было восстановить состояние базы на любой момент времени.
Всё вроде просто; непонятно, какие у вас проблемы.
Если модель восстановления SIMPLE, то лог не будет хранится сервером.


Я так понимаю мы говорим серверу SIMPLE, чтобы он не хранил старые транзакции, но у нас почемуто лог разрастается.

Как вариант, возможно у нас есть незавершенные транзакции(ошибка с нашей стороны) которые хранятся в логе. Как тогда от них избавиться, если например сессия уже была утеряна, или даже сервер был перезапущен?
Старые транзакции в логе не хранятся.

Что то держит - репликация или лог-шиппинг.

Возможно, на боевом сервере есть репликация, соответственно после восстановления на тестовый остались следы.
20 сен 11, 17:15    [11307519]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

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

например, сейчас в 3 таблицы были добавлены данные
т1 - 138,000 записей
т2 - 17,480,251 записей
т3 - 231,208 записей

DBCC OPENTRAN (db)
Replicated Transaction Information:
Oldest distributed LSN : (0:0:0)
Oldest non-distributed LSN : (38072:134371:1)

DBCC SQLPERF(LOGSPACE);
DB - 65,243.74 (размер лога) - 46.46% (использовано)


select log_reuse_wait, log_reuse_wait_desc
from sys.databases 
where name = 'DB'

log_reuse_wait, log_reuse_wait_desc
6, REPLICATION

По диску вообще нет никакой активности, в том плане чтобы база чтото реплицировала.
20 сен 11, 17:24    [11307595]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

Откуда:
Сообщений: 106
alexeyvg
truper
пропущено...


Я так понимаю мы говорим серверу SIMPLE, чтобы он не хранил старые транзакции, но у нас почемуто лог разрастается.

Как вариант, возможно у нас есть незавершенные транзакции(ошибка с нашей стороны) которые хранятся в логе. Как тогда от них избавиться, если например сессия уже была утеряна, или даже сервер был перезапущен?
Старые транзакции в логе не хранятся.

Что то держит - репликация или лог-шиппинг.

Возможно, на боевом сервере есть репликация, соответственно после восстановления на тестовый остались следы.


У нас база была собрана с нуля. У нас есть внешний ресурс который закачивает данные в таблицы а там все это делается транзакциями причем SNAPSHOT. Т.е. мы постоянно чистим эти таблицы и забиваем их вновь (тестируем функционал).
Данных конечно много и комп слабоват но всеже...
В конечном счете приходится лог файл просто удалять, когда он выростает до 300-400гигов.
20 сен 11, 17:29    [11307639]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
truper,

EXEC sp_removedbreplication
20 сен 11, 17:41    [11307719]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
truper
alexeyvg
Старые транзакции в логе не хранятся.

Что то держит - репликация или лог-шиппинг.

Возможно, на боевом сервере есть репликация, соответственно после восстановления на тестовый остались следы.


У нас база была собрана с нуля. У нас есть внешний ресурс который закачивает данные в таблицы а там все это делается транзакциями причем SNAPSHOT. Т.е. мы постоянно чистим эти таблицы и забиваем их вновь (тестируем функционал).
Данных конечно много и комп слабоват но всеже...
В конечном счете приходится лог файл просто удалять, когда он выростает до 300-400гигов.
Данные из предыдущего поста говорят о том, что у вас в базе остались следы репликации.

Т.е. вы скомандовали серверу - храни транзакции в логе, пока их не заберёт сервер-распространитель и не отправит подписчикам.

Вот база и хранит.

Без специальной команды, повторю, в логе никакие транзакции не остаются - сервер всё делает только по команде администратора, без всякой самодеятельности.
20 сен 11, 17:42    [11307726]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
По диску вообще нет никакой активности, в том плане чтобы база чтото реплицировала.


Oldest non-distributed LSN : (38072:134371:1)
и
log_reuse_wait, log_reuse_wait_desc
6, REPLICATION
и
DB - 65,243.74 (размер лога) - 46.46% (использовано)

указывают на то, что лог не усекается из-за репликации
20 сен 11, 17:42    [11307727]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
truper
По диску вообще нет никакой активности, в том плане чтобы база чтото реплицировала.
Понятное дело - еслиб быза реплицировалась, то транзакции в логе не оставались :-)
20 сен 11, 17:45    [11307751]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

Откуда:
Сообщений: 106
alexeyvg
truper
пропущено...


У нас база была собрана с нуля. У нас есть внешний ресурс который закачивает данные в таблицы а там все это делается транзакциями причем SNAPSHOT. Т.е. мы постоянно чистим эти таблицы и забиваем их вновь (тестируем функционал).
Данных конечно много и комп слабоват но всеже...
В конечном счете приходится лог файл просто удалять, когда он выростает до 300-400гигов.
Данные из предыдущего поста говорят о том, что у вас в базе остались следы репликации.

Т.е. вы скомандовали серверу - храни транзакции в логе, пока их не заберёт сервер-распространитель и не отправит подписчикам.

Вот база и хранит.

Без специальной команды, повторю, в логе никакие транзакции не остаются - сервер всё делает только по команде администратора, без всякой самодеятельности.


Даже незнаю кто там командует хранить данные в логе.
И кстати насчет репликации, что вы имеете ввиду под этоим словом, если речь идет о реплицировании данных между двумя серверами то у нас такого нет.
20 сен 11, 18:00    [11307891]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

Откуда:
Сообщений: 106
alexeyvg
truper
По диску вообще нет никакой активности, в том плане чтобы база чтото реплицировала.
Понятное дело - еслиб быза реплицировалась, то транзакции в логе не оставались :-)


Что есть "если бы база реплицировалась" ?
20 сен 11, 18:03    [11307906]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
Что есть "если бы база реплицировалась" ?

То, что реплицированне данные доставлялись подписчикам
А раз репликация встала, то лог будет расти, а никакой активности по доставке реплицируемых данных не будет
20 сен 11, 18:05    [11307914]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
truper
Member

Откуда:
Сообщений: 106
WarAnt
truper,

EXEC sp_removedbreplication


Возможно именно это и помогло, % используемого лог файла значительно уменшился, до 0.3%

Как я выяснил когдато на этой базе настраивали репликацию, но в дальнейшем отказались от этого, возможно остались хвосты.

Пока можно считать проблему решенной.

Всем большое спасибо, узнал много нового.
20 сен 11, 18:10    [11307938]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо обрезать лог БД.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
truper
alexeyvg
пропущено...
Понятное дело - еслиб быза реплицировалась, то транзакции в логе не оставались :-)


Что есть "если бы база реплицировалась" ?
Расшифровываю: если бы база не только накапливала транзакции для кем-то настроенной репликации, но ещё сервер-распространитель забирал бы эти транзакции для доставки подписчикам репликации.
truper
Даже незнаю кто там командует хранить данные в логе.
Администратор, DBA.

truper
И кстати насчет репликации, что вы имеете ввиду под этоим словом, если речь идет о реплицировании данных между двумя серверами то у нас такого нет.
Ну вот, оказалось, есть. Просто вы не знаете, не вы-же рулите сервером.
20 сен 11, 18:47    [11308162]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить