SQL-сервер удаляет большое количество строк - PullRequest
0 голосов
/ 05 ноября 2018

Я нашел похожие посты, но все еще не помог мне, поэтому я попробую свою удачу, создав этот пост. У меня есть большая таблица (около 500 миллионов записей), и мне нужно удалить половину ее простым предложением where: «where Resolution = 100». Мне нужно сохранить вторую половину, поэтому я не могу обрезать таблицу. То же самое, если я скопирую другую половину в другую таблицу, это займет слишком много времени, а это рабочая база данных ...

Я также пытался удалить их партиями по 10 Кб, но безуспешно.

Любая другая идея очень ценится.

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

1 Ответ

0 голосов
/ 05 ноября 2018

Простой режим восстановления не поможет, если журнал не может быть расширен - он удаляет журнал после транзакции, но транзакция ЕЩЕ ОЧЕНЬ удаляет 250 миллионов строк. Маленький, кстати.

Что вы можете сделать:

  • Запустите это как скрипт
  • Удалить меньшее количество строк в цикле.

Удаление верных 10000000 действительно - и вы можете делать это с вашими условиями до @@ rowcount = 0, что указывает, что строки не найдены.

Это уменьшает размер транзакций, что позволяет избежать сверхбольших транзакций, которые могут привести к срыву журнала транзакций. Это то, что я вижу в качестве проблемы, потому что вы решили просто указать «не работает» и не выдавать ошибку дает вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...