Будет ли архивирование большого количества старых данных блокировать мою базу данных? - PullRequest
2 голосов
/ 20 июля 2011

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

Существует много данных (600 тыс. Вставок за 2 месяца).

Я собирался просто вызывать (пакетировать) хранимый процесс каждый день / неделю.

Сначала я подумал о том, чтобы выполнить 2 хранимых процесса:

  1. Удаление из архивов того, что старше 365 дней
  2. Перемещение данных из ведение журнала в архив , что старше 30 дней ( Полагаю, есть способ сделать это с помощью запроса 1 sql )
  3. Удаление из logging , что старше 30 дней.

Однако это решение кажется довольно неэффективным и, вероятно, заблокирует БД на несколько минут, что мне не нужно.

Итак, у меня есть какая-нибудь альтернатива и каковы они?

Ответы [ 2 ]

3 голосов
/ 20 июля 2011

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

Вы выбираете из таблицы logging только СТАРЫЕ записи и записываете в таблицу, в которую вы не пишете, за исключением процесса архивирования.

Шаги, которые вы делаете, звучат нормально. Я бы пошел на шаг дальше, и вместо удаления по дате просто введите INNER JOIN в свою архивную таблицу в поле id - тогда вы удалите только те записи, которые вы заархивировали.

Как примечание: 600 тыс. Записей совсем не велики. У нас есть производственные БД с таблицами более 2 миллиардов строк, и я знаю, что у некоторых других здесь есть базы данных с миллионами вставок в минуту в транзакционные таблицы.

Изменить:

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

0 голосов
/ 20 июля 2011

Что делать, если вы заархивировали во вторичную базу данных.

т.е:.

Первичная база данных имеет таблицу журналов.

Вторичная база данных имеет архивную таблицу.

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

Но в любом случае, я не уверен, что вам нужно беспокоиться о блокировке - я думаю, все зависит от того, как вы реализуете.

...