Эффективный способ удалять записи каждые 10 минут - PullRequest
1 голос
/ 02 марта 2011

Проблема под рукой

Необходимо удалять несколько тысяч записей каждые 10 минут из таблицы базы данных SQL Server. Это часть очистки для старых записей.

Решения на рассмотрении

  1. Служба .Net работает для некоторых других функций.Эту же службу можно использовать с таймером для выполнения команды удаления SQL в дБ.
  2. Задание сервера SQL
  3. Триггер

Рассмотрение ключа для предоставления решения

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

Ответы [ 3 ]

5 голосов
/ 02 марта 2011

Это звучит как работа, которую задание SQL Server должно было выполнять; ведение базы данных.

Запланированное задание может выполнить базовую инструкцию T-SQL, которая удалит записи, которые вам больше не нужны, по любому расписанию, на котором вы хотите, чтобы оно выполнялось. Создание заданий может быть включено в ваши стандартные сценарии развертывания, что должно свести на нет затраты на развертывание.

Кроме того, используя установленную часть SQL Server, вы извлекаете выгоду из знаний других администраторов баз данных, которые будут понимать задания SQL и смогут ими управлять.

0 голосов
/ 02 марта 2011

Эффективность удаления зависит от индексов, никак не влияет на то, как срабатывает таймер.Очень важно, чтобы «старые» записи были легко идентифицированы с помощью сканирования диапазона.Если DELETE должен просмотреть всю таблицу, чтобы найти эти «старые» записи, он заблокирует все остальные действия.Обычно в таких случаях таблица сначала кластеризуется по значению даты и времени, а уникальные первичные ключи при необходимости делегируются в некластеризованный индекс.

Теперь, как вызвать таймер, у вас действительно есть три варианта:

Задание агента SQL - лучший вариант для10 минутные интервалы.Единственным недостатком является то, что он не работает на развертываниях SQL Express.Если это вызывает озабоченность, то приемлемой альтернативой являются таймеры разговора и активированные процедуры .

Последний вариант имеет тот недостаток, что приложение должно быть запущено, чтобы таймер инициировал удаление.Если это не проблема (т. Е. Если приложение не запущено, не важно, что записи не удалены), тогда все в порядке.Обратите внимание, что приложения ASP.Net являются очень плохим хостом для таких таймеров из-за того, что IIS и ASP могут выбрать перезапуск и перевести пулы приложений в спящий режим.

0 голосов
/ 02 марта 2011

Я бы не использовал триггер ... и придерживался SQL Server DTS или SSIS.Очевидно, вам понадобится какой-то идентификатор, поэтому я бы использовал столбец метки времени с индексом ... если это не требуется, просто выключайте TRUNCATE один раз каждую ночь.

...