Я использую базу данных с высокой транзакцией (в среднем ~ 175 тыс. Транзакций в минуту, добавлено и удалено почти 9 млн записей в час)
До недавнего времени это не было большой проблемой, поскольку у нас было ~ 7,5 миллионов записей, добавленных и удаленных, но с последними потоками данных очистка от привидений, похоже, не справляется с очисткой неиспользуемое пространство на таблицах / индексах.
Несколько дней назад мы получили 53 ГБ «Неиспользуемого пространства» в 16 таблицах (в основном 2 из них), поэтому в результате начали изучать процесс очистки от привидений, чтобы он запускался каждые 5 секунд и занимал более 10 страниц.
Мое текущее решение состоит в том, что рано утром я запускаю три потока следующей команды:
DECLARE @2hours datetime = dateadd(hour,2,getutcdate())
WHILE getutcdate() < @2hours
BEGIN
DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH NO_INFOMSGS
END
чтобы отследить отставание от прошлой ночи (когда происходит большинство наших удалений)
Мне интересно, есть ли способ изменить настройки по умолчанию с 5 секунд и 10 страниц, чтобы сказать каждую секунду, или запустить более 20 страниц, есть ли способ сделать это, или я должен продолжать просто вращать несколько процедур очистки, чтобы очистить данные, или если есть какие-либо другие действия, которые могут помочь с этим
Повторная индексация выполняется по большинству используемых индексов, по крайней мере, один раз в неделю (большинство происходит через день)
SQL Server 2012 Enterprise SP3_CU8 (обновление до CU9 завтра) в кластере AlwaysOn с высокой доступностью, а также с репликацией (распространение на отдельном сервере)
источник