Лучшая практика для архивации огромной таблицы из более чем 1 000 000 000 строк - PullRequest
8 голосов
/ 02 марта 2010

Я использую SQL Server 2005. Существует таблица контрольного журнала, содержащая более 1 000 000 000 строк. Я планирую заархивировать эту таблицу. Когда я делаю простой выбор с помощью nolock, я все еще могу найти блокировку (вероятно, блокировку ввода-вывода с другим процессом?). Так есть ли лучшие практики для такой ситуации?

Ответы [ 3 ]

4 голосов
/ 02 марта 2010

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

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

Кроме того, SQL Server 2005+ по умолчанию не включает MVCC. Однако он может сделать это, если вы включите то, что MS называет изоляцией моментального снимка. См. Сериализуемый и Уровень изоляции моментального снимка .

Эффект , а не , если этот параметр включен, заключается в том, что незафиксированный INSERT или UPDATE блокирует SELECT в другой транзакции до тех пор, пока первая транзакция не завершится или не откатится. Это может вызвать ненужные блокировки и ограничить вашу масштабируемость.

3 голосов
/ 02 марта 2010

Создайте резервную копию базы данных и восстановите ее в папке архива.

2 голосов
/ 02 марта 2010

Выбор 1 миллиарда строк одновременно приведет к нагрузке на сервер независимо от того, как вы это делаете.

Вместо этого делайте это партиями, скажем, по 1000 строк за раз. Инструмент BCP делает это автоматически. Или используйте SSIS для копирования данных в другую базу данных - она ​​делает то же самое.

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