Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Длительная транзакция  [new]
Афтор
Guest
Необходимо сдвинуть значение PK на константу в огромной таблице.
Сегодня попробовал тупо в лоб одним апдейтом, а у меня темпДБ весь диск забил, хотя она у меня отдельно от всех.
Я подумал, что физически порядок не изменится, думал лог забьется (модель Фулл) еще один лог-файл на отдельном диске подтянул, а до логов даже не дошло дело. Правильно я думаю, что это из-за индекса? Будет ли суммарно быстрее: если убить индекс, проапдейтить, а потом вернуть индекс(вот здесь очень имхо повиснем). Если да, то готов отключить юзеров.
Или правильнее ничего не мудрить, а просто разбивать на интервальные апдейты, бекапить лог на каждом шаге и индекс и юзеров не трогать.
Кстати, переход на симпл модель восстановления ради этой транзакции что-то ускорит? Потом конечно вернуть всЁ и полный бекап сделать, на время выполнения гарантированно других изменений данных в базе не будет.
20 апр 12, 00:07    [12443030]     Ответить | Цитировать Сообщить модератору
 Re: Длительная транзакция  [new]
ChA
Member

Откуда: Москва
Сообщений: 11317
Афтор
Необходимо сдвинуть значение PK на константу в огромной таблице.
А смысл ? У Вас в PK вкладывается ещё какой-то смысл, кроме идентификации записи ?
20 апр 12, 00:26    [12443089]     Ответить | Цитировать Сообщить модератору
 Re: Длительная транзакция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Если в вашей операции есть хоть толика смысла, то надо апдейтить небольшими порциями, к примеру, по 100к.
20 апр 12, 00:37    [12443115]     Ответить | Цитировать Сообщить модератору
 Re: Длительная транзакция  [new]
Афтор
Guest
Спасибо. Смысл есть.
Вопрос: почему рос темп? Профайлером не посмотрел, к сожалению.

Сергей Алексеевич, ваш ответ понимать, как подтверждение, что индекс не нужно убивать, модель восстановления тоже не менять?
100к это кол-во строк или данных? Если данных, то считать только поле (тип инт) + индекс или с учетом всей строки?
20 апр 12, 08:44    [12443401]     Ответить | Цитировать Сообщить модератору
 Re: Длительная транзакция  [new]
ChA
Member

Откуда: Москва
Сообщений: 11317
Афтор
Спасибо. Смысл есть.
Вопрос: почему рос темп? Профайлером не посмотрел, к сожалению.

Сергей Алексеевич, ваш ответ понимать, как подтверждение, что индекс не нужно убивать, модель восстановления тоже не менять?
100к это кол-во строк или данных? Если данных, то считать только поле (тип инт) + индекс или с учетом всей строки?
В 2-х словах: модель восстановления поменять на Simple, потом восстановите обратно, если действительно Full необходимо. Удалять такими порциями, чтобы количество изменений за один update в объеме вмещалось в размер транзакционного лога. Т.е., чтобы он не наращивался по ходу выполнения обновлений, это одна из самых долгих операций. Индекс тоже было бы полезно удалить на время обновления, потом поднимете заново. Переиндексация один раз быстрее, чем 100 раз, пусть и более мелкими порциями. Правда если индекс кластерный, а на нём куча других висит, то сначала удалите другие индексы, кластерный последним. Восстанавливать в обратном порядке, сначала кластерный, а затем все остальные.
И бакапы перед выполнением не забудьте, но только после изменения модели восстановления на Simple.
20 апр 12, 14:50    [12446100]     Ответить | Цитировать Сообщить модератору
 Re: Длительная транзакция  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Согласен с коллегами.
Смею заметить что апдейтить нужно небольшими порциями, возможно у вас и на 100 к будет висеть.
Поэтому советую начинать с небольших апдейтов и постепенно увеличивать количество записей при апдейте - при этом смотеть на скорость выполнения запросов.
Лог советую порезать, если у вас не используются репликации с этой БД, командой:

use tempdb
BACKUP LOG [tempdb] TO DISK= 'NUL:'
DBCC SHRINKFILE([tempdb_log],1000)
go


После чего, как было сказано выше, в свойствах базы изменить модель восстановления на простую(Simple).
Почитайте про bulk-logged - возможно эта модель восстановления вам подойдет.
20 апр 12, 15:30    [12446515]     Ответить | Цитировать Сообщить модератору
 Re: Длительная транзакция  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Афтор,

Если прочитали пост Александр52, то сразу же выкиньте из головы все его советы...
20 апр 12, 17:10    [12447390]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить