SQL Сервер - очистка огромного стола. Вставьте данные, которые мы хотим сохранить, и обрежьте старую таблицу - PullRequest
0 голосов
/ 31 марта 2020

Наше приложение имеет несколько очень больших таблиц на сервере SQL. 500 миллионов строк и 1 миллиард строк в двух таблицах, которые мы хотели бы очистить, чтобы освободить место на диске.

В нашей среде тестирования я попытался запустить chunked delete в al oop, но не думаю, что это приемлемое решение в prod.

Поэтому другой альтернативой является выбор / вставка данных, которые мы хотим сохранить во временную таблицу, усечение / удаление старой таблицы, а затем воссоздание

  1. indexes
  2. ограничения внешнего ключа
  3. разрешения таблицы
  4. переименование временной таблицы обратно в исходное имя таблицы

Мой вопрос я что-то упустил из своего списка? Существуют ли какие-либо другие объекты / структуры, которые мы потеряем, которые мы должны воссоздать или восстановить? Это было бы катастрофической ситуацией, если бы что-то пошло не так. Так что я играю в это крайне безопасно.

Изменение размера базы данных / добавление дополнительного пространства не является возможным решением. Наше SQL Серверное приложение близится к концу и находится в стадии доработки, поэтому мы пока просто включаем свет.

1 Ответ

1 голос
/ 31 марта 2020

Пока вы выполняете эту операцию, будут ли новые записи добавлены в исходную таблицу? Я имею в виду приложение, которое пишет в эту таблицу, будет жить? Если это так, возможно, было бы лучше изменить порядок шагов, например:

  1. Сначала переименуйте имя исходной таблицы в temp
  2. Создайте новую таблицу с исходным имя, чтобы можно было добавлять новые записи из приложения для записи.
  3. Параллельно вы можете перемещать данные, которые хотите сохранить, из temp в новую исходную таблицу.
...