Архивация данных SQL Server - PullRequest
0 голосов
/ 08 июня 2018

У меня есть база данных SQL Azure, в которой мне нужно выполнить некоторые операции архивирования данных.

План состоит в том, чтобы переместить все несущественные данные из фактических таблиц в Archive_* таблицы.

У меня есть таблицы с 8-9 миллионами записей.

Один из вариантов - написать хранимую процедуру и вставить данные в новые таблицы Archive_*, а также удалить из фактических таблиц.

Но эта операция действительно занимает много времени и длится более 3 часов.

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

Как мне ускорить архивирование?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы не можете сделать это быстрее, но вы можете сделать это без проблем.Первый вариант - создать отдельную задачу, которая порциями переносит данные из источника в архивные таблицы.Чтобы не допустить повышения блокировки таблиц и общего снижения производительности, я бы предложил ограничить размер одной транзакции.Например, запустить транзакцию, вставить N записей в архивную таблицу, удалить эти записи из исходной таблицы, зафиксировать транзакцию.Продолжайте в течение нескольких дней, пока все необходимые данные не будут переданы.Преимущество этого способа заключается в том, что в случае какого-либо сбоя вы можете перезапустить процесс архивирования, и он продолжится с момента сбоя.

Второй вариант, который на самом деле не исключает первыйзависит от того, насколько критична для вас производительность исходных таблиц и сколько обновлений происходит с ними.Если это не проблема, вы можете написать триггеры, которые фактически помещают каждую вставленную / обновленную запись в архивную таблицу.Затем, когда вы хотите выполнить очистку, все, что вам нужно сделать, это удалить устаревшие записи из исходных таблиц, их копии уже будут в архивных таблицах.

В обоих случаях вам не нужно будет иметь какие-либопростои.

0 голосов
/ 08 июня 2018

Вы можете использовать Azure Automation, чтобы планировать выполнение хранимой процедуры каждый день в одно и то же время, в течение периода обслуживания, где эта хранимая процедура будет архивировать самые старые данные за неделю или один месяц, каждый раз при запуске.Процедура хранения должна архивировать данные старше X числа недель / месяцев / лет.Пожалуйста, прочитайте эту статью, чтобы создать Runbook.Через несколько дней все старые данные будут заархивированы, и Runbook продолжит выполнять эту работу с настоящего момента.

...