У мене це питання було раніше.
- У вас є велика база даних та невеликий привід журналу. Ви хочете реорганізуватись (з різних причин).
- При спробі цього на великій фрагментованій таблиці журнал заповнюється, поки диск журналу не заповниться, а потім команда скасовується.
- Якщо це в простому режимі, інші транзакції можуть провалитися, поки журнал не буде очищено в наступній контрольній точці, а якщо він перебуває в повному режимі, інші транзакції можуть завершитись до наступного резервного копіювання журналу. Витяг!
- Якщо ви перебуваєте в повному режимі, ви збільшуєте частоту резервного копіювання журналу, але це не допомагає уникнути проблеми, оскільки реорганізація проводиться в результаті неявної транзакції, журнал не очищається, поки ця транзація не закінчиться або не припиниться або не буде зупинена.
- І ви дійсно хочете, щоб ця реорганізація запустилася до завершення.
Це трохи протиінтуїтивно, тому що ви знаєте, що якщо ви скасуєте реорганізацію, вона може продовжуватися з того місця, де вона припинилася, це просто, що аборт здійснює транзакцію, а не відкочується назад.
Ось що ти робиш. Це трохи довго, але прямо.
- Попередньо зробіть свій файл журналу до відносно великого розміру, але не максимум. В основному ви хочете залишити достатньо місця для корисної роботи, а також для невеликих наростів, якщо вони відбудуться, так що нормальні операції не припиняться.
- Створіть завдання для запуску реорганізації індексу ("Реорганізувати").
Створіть попередження WMI агента ("Реорганізуйте клапан усунення") за умови виконання продуктивності.
- Об'єкт: SQLServer: Бази даних
- Лічильник: Використовується відсоток журналу
- Примірник: (ваше велике ім'я бази даних)
- Попередження, якщо лічильник піднімається вище: 80
- Відповідь: виконати завдання ("Реорганізувати перевірку")
Створити роботу ("Реорганізувати чек")
- Перевірте завдання msdb.dbo.sysjobactivity, щоб побачити, чи працює "Реорганізувати" завдання. І якщо це ...
- Припиніть роботу і опитуйте, поки вона не припиниться. Це може зайняти кілька секунд.
- (Якщо ви перебуваєте в повному режимі) Запустіть роботу резервного копіювання журналу та підтвердьте, коли він закінчується.
- Двічі перевірте sys.dm_os_performance_counters, що ваш лічильник вільного простору журналу зменшився нижче порогового значення.
- Почніть роботу "Реорганізувати".
Перевірте це десь, навіть пісочниця розробки, щоб переконатися, що він працює належним чином, перш ніж наклеювати його на свій виробничий сервер.
Що ви побачите - це робота "Реорганізувати", яка починається і починається заповнення журналу. Коли журнал потрапляє на відсоток, він запускає попередження WMI (протягом приблизно 30-х років), яке запускає вашу іншу роботу, яка бачить, що робота «Реорганізувати» працює і так, швидше за все, вини. Потім він зупиняє "Реорганізувати", робить резервну копію, підтверджує, що вільний простір журналу повернувся до розумного значення, а потім знову запустить роботу "Реорганізувати", яка підбере там, де вона зупинилась.
Тож як ви можете пояснити, що заздалегідь розмістити ваш журнал до розумної цифри в цьому сценарії, це зменшити кількість зростання / тригер / робота / стоп / перезапуск, щоб він був більш ефективним, а також зберігав достатньо місця для епізодичні нарости, які не потрапляють вчасно.
Це своєрідний дивний сценарій. Я впевнений, що я би придумав це кілька років тому, і очевидно, що тут є основні основні проблеми. Але якщо ви матимете справу із сотнями серверів, кілька таких випадків урізаються, з якими неможливо вирішити жодним чином з будь-якої ділової причини, за винятком MacGyvering тимчасового рішення, яке виконує завдання.
Поки це безпечно, логічно, перевірено та добре задокументовано, проблем не повинно бути.