powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить 1млн.записей
6 сообщений из 6, страница 1 из 1
Как удалить 1млн.записей
    #32019384
Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похожее письмо уже было, но у меня немного др.ситуация. При удалении огромного кол-ва строк (записи за месяц) из скажем 5млн. записей (а можно и все) сервер ругается, мол log файл full. Это он на что намекает? Вроде файл может быть хоть во весь хард. Помогает, только удаление за 1 день, но это же не дело! Можно удалять записи без автоматической записи их в log? Как я понимаю, при выполнении команды DELETE автоматом открывается транзакция, так как запретить серверу это делать?
Для тех кто спросит, а зачем, отвечаю: на момент удаления записей они все давым - давно обработаны и поэтому мне они ни в каком виде не нужны, они только место занимают. Ну короче, НАДО.
...
Рейтинг: 0 / 0
Как удалить 1млн.записей
    #32019388
bbboss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может TRUNCATE TABLE ???
...
Рейтинг: 0 / 0
Как удалить 1млн.записей
    #32019393
Timur Sokolov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит так,

Если нужно быстро и без логирования удалить ВСЮ таблицу, то подойдет Truncate Table. Операция очень быстрая и восстановлению не подлежит, так как не логируется. При выполнении этой операции нужно удалить все существующие связи с таблицей (потом, понятно, нужно восстановить) если таковые есть. Удалить часть данных таким образом не получиться.

Если нужно удалить не все данные, то удалять их нужно ТОЛЬКО порциями и никак иначе. При выполнении любой операции типа Delete ВСЕГДА открывается транзакция, которую можно потом откатить. Не открывать транзакцию НЕЛЬЗЯ. Когда ты пытаешся удалить удалить миллион записей, весь этот миллион "копируется в лог", лог при этом разростается
. Если, вдруг, ты захочешь откатить такую транзакцию немного не дождавшись ее завершения, то это может поставить сервер в позу ступора на долго (даже очень).

Вывод: данные нужно удалять порциями, по 100, 1000, 10000 записей. При этом, работа идет с относительно маленькими транзакциями, лог не переполняется и сервер не так сильно загружен. Сделать это можно по разному, например так:

SET ROWCOUNT 5000

while (exists (select * from #t /*where ...*/))
delete from #t /*where ...*/

SET ROWCOUNT 0
...
Рейтинг: 0 / 0
Как удалить 1млн.записей
    #32019396
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 7.0 я удалял 14 млн. записей с помощью цикла, в тело которого вставил dump transaction with NO_LOG
...
Рейтинг: 0 / 0
Как удалить 1млн.записей
    #32019440
Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо
...
Рейтинг: 0 / 0
Как удалить 1млн.записей
    #32019441
Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо. А я надеялся, что можно обойти транзакции, хотя в душе сомневался.
Еще раз всем спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить 1млн.записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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