Я використовую високу транзакційну базу даних (в середньому ~ 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 High Availabilty також з реплікацією (розподіл на окремому сервері)