Автоматически удалять самые старые строки, когда таблица базы данных становится слишком большой?

#sql #sql-server

#sql #sql-сервер

Вопрос:

Можно ли настроить MS SQL-Server на удаление самых старых строк из таблицы, когда она становится слишком большой? Если нет, должен ли я использовать какой-то триггер или это должно быть временное событие на стороне приложения?

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

Комментарии:

1. Что слишком велико? Почему это плохо, если оно «слишком большое»? Какова модель восстановления базы данных? Как выглядит модель данных? Должен ли он удалять строки из всех таблиц или есть определенные таблицы, которые он должен удалить, оставив, скажем, справочную таблицу? Как будет выполняться задание по размеру и очистке, есть ли у нас доступ к программе планирования? О какой версии SQL Server мы говорим?

2. Возможно, разделение данных в таблице на год (месяц?) Является вариантом? Таким образом, нет реальной необходимости удалять старые данные. Более старые таблицы просто не будут доступны, если вы выполните запрос с помощью фильтра по дате.

Ответ №1:

Вместо того, чтобы пытаться заранее определить, что является слишком большим, я бы посоветовал вам определить где-нибудь бизнес-правило (хранимая процедура, таблица конфигурации и т. Д.), Которое Можно настроить для определения количества дней ведения журнала.

Затем вы можете запланировать выполнение задания по ночам через SQL Server, которое удалит все записи журнала старше указанных критериев.

Таким образом, вы и ваши пользователи будете точно знать, чего ожидать от системы ведения журнала (т. Е. У вас будет доступ к файлам журнала только в течение 30 дней).

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

Ответ №2:

Вы можете использовать регулятор ресурсов для измерения использования ресурсов или определить задание, которое проверяет размеры файлов базы данных, а затем вызвать SP, который удалит данные из таблиц базы данных.