Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как удалить 1млн.записей
|
|||
|---|---|---|---|
|
#18+
Похожее письмо уже было, но у меня немного др.ситуация. При удалении огромного кол-ва строк (записи за месяц) из скажем 5млн. записей (а можно и все) сервер ругается, мол log файл full. Это он на что намекает? Вроде файл может быть хоть во весь хард. Помогает, только удаление за 1 день, но это же не дело! Можно удалять записи без автоматической записи их в log? Как я понимаю, при выполнении команды DELETE автоматом открывается транзакция, так как запретить серверу это делать? Для тех кто спросит, а зачем, отвечаю: на момент удаления записей они все давым - давно обработаны и поэтому мне они ни в каком виде не нужны, они только место занимают. Ну короче, НАДО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2001, 07:28 |
|
||
|
Как удалить 1млн.записей
|
|||
|---|---|---|---|
|
#18+
может TRUNCATE TABLE ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2001, 07:52 |
|
||
|
Как удалить 1млн.записей
|
|||
|---|---|---|---|
|
#18+
Значит так, Если нужно быстро и без логирования удалить ВСЮ таблицу, то подойдет Truncate Table. Операция очень быстрая и восстановлению не подлежит, так как не логируется. При выполнении этой операции нужно удалить все существующие связи с таблицей (потом, понятно, нужно восстановить) если таковые есть. Удалить часть данных таким образом не получиться. Если нужно удалить не все данные, то удалять их нужно ТОЛЬКО порциями и никак иначе. При выполнении любой операции типа Delete ВСЕГДА открывается транзакция, которую можно потом откатить. Не открывать транзакцию НЕЛЬЗЯ. Когда ты пытаешся удалить удалить миллион записей, весь этот миллион "копируется в лог", лог при этом разростается . Если, вдруг, ты захочешь откатить такую транзакцию немного не дождавшись ее завершения, то это может поставить сервер в позу ступора на долго (даже очень). Вывод: данные нужно удалять порциями, по 100, 1000, 10000 записей. При этом, работа идет с относительно маленькими транзакциями, лог не переполняется и сервер не так сильно загружен. Сделать это можно по разному, например так: SET ROWCOUNT 5000 while (exists (select * from #t /*where ...*/)) delete from #t /*where ...*/ SET ROWCOUNT 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2001, 08:15 |
|
||
|
Как удалить 1млн.записей
|
|||
|---|---|---|---|
|
#18+
В 7.0 я удалял 14 млн. записей с помощью цикла, в тело которого вставил dump transaction with NO_LOG ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2001, 08:32 |
|
||
|
Как удалить 1млн.записей
|
|||
|---|---|---|---|
|
#18+
Всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2001, 13:09 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32019441&tid=1824542]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 271ms |

| 0 / 0 |
