Налаштування очищення привидів


10

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

Відповіді:


4

Мені цікаво, чи можна змінити налаштування за замовчуванням через 5 секунд і 10 сторінок, щоб сказати щосекунди або пробігти понад 20 сторінок

Ні, немає. Принаймні, я не знаю на даний момент :-)

якщо є якісь інші дії, які можуть допомогти в цьому

З блогу Пола Рандала - Один з методів, який люди іноді вважають, - це змусити очищення привидів очистити все, виконуючи сканування таблиці або індексу (таким чином, у чергу всі видалені записи для завдання очищення привидів).

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

Чи є можливість для вас розділити таблицю та очистити старий розділ, а не робити видалення ? FYI .. SQL Server 2016 і новіші версії дозволяє також усікати окремі розділи.

Крім того, ви можете (TEST і впровадити) - відключити очищення привидів (слід прапора 661), а потім rebuild index WITH ONLINE = ONпараметр, оскільки ви використовуєте Enterprise Edition.

Якщо ви використовуєте AlwaysON (з асинхронізацією) з реплікацією, переконайтеся, що включено прапор Trace 1448 - дозволяє читачеві журналу реплікації рухатися вперед, навіть якщо асинхронні вторинні репліки не визнали отримання змін.

Не забудьте прочитати Видалити, що розділяє сторінки та переслані привиди від Пола Уайта, щоб побачити, чи є у ваших таблиць тригери чи стовпці LOB, які сповільнюватимуться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.