powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
5 сообщений из 5, страница 1 из 1
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
    #32065242
AlexA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть две таблицы:
T1 (IDnew identity, IDold, ...) - 200 000 записей
T2 (IDold, ...) - 4 000 000 записей

размер всей базы до UPDATE 1,7 ГБ,
после - базы 2,3 (DATA) + 5,5 (LOG)!!!

update T2 set IDold=(select top 1 IDnew from T1
where T1.IDold=T2.IDold)

что не так?
...
Рейтинг: 0 / 0
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
    #32065269
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что вас собственно удивляет ? То, что таким образом соблюдается целостность данных ?
А если вы потом захотите отменить изменения то откуда сервер по-вашему должен будет взять предыдущее состояние ?

Или вас волнует вопрос сжатия transaction log-а ?
...
Рейтинг: 0 / 0
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
    #32065322
AlexA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как сжимать log известно, но тогда уточню суть задачи

1) отменять изменения не понадобится - такая операция проводится над базой 1 раз (максимум/возможно 2-3)

2) откуда взялся вопрос: переполнился log, места на диске не хватило (было ~3 ГБ)

3) нет никакой гарантии, что там где будет выполнятся update (разные организации - разное железо) будет достаточно места (тем более если T2 будет иметь 20 000 000 записей) - а надо чтобы он сработал в любом случае

пробовал вместо update использовать курсор - лог небольшой, но время выполнения...

может лог такой потому что операция обновления каждой строки разбивается на Delete и Insert? нельзя ли как-нибудь указать серверу делать непосредственное обновление?
...
Рейтинг: 0 / 0
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
    #32065336
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) отменять изменения не понадобится
А если во время запроса произойдет сбой питания ? Лог для того и нужен чтобы можно было отменить изменения. А по желанию пользователя или автоматически это уже второй вопрос.

Ваша транзакция затрагивает 4 000 000 записей.
А так как транзакция едина и неделима, т.е. либо все 4 000 000 записей будут обновлены, либо ни одна не будет, то и лог растет соотвественно объему задействованных в запросе записей.

пробовал вместо update использовать курсор - лог небольшой, но время выполнения
Придется выбирать - либо одна большая транзакция и большой размер лога, либо много маленьких транзакций и маленький размер лога.
...
Рейтинг: 0 / 0
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
    #32065346
AlexA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за пояснения!
P.S. попробую выполнять update в цикле, например брать IDold из T1 по 10 000 записей, посмотрю что получится...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]