Як зменшити розмір резервного копіювання журналу транзакцій після повної резервної копії?


38

У мене є три плани технічного обслуговування для роботи на екземплярі Sql Server 2005:

  • Щотижневі оптимізації бази даних з подальшим повним резервним копією
  • Щоденне диференціальне резервне копіювання
  • Щогодини резервного копіювання журналу транзакцій

Погодинна резервна копія журналу зазвичай становить від декількох сотень Кб і 10 Мб залежно від рівня активності, щоденні диференціали зазвичай зростають до приблизно 250 Мбіт до кінця тижня, а тижневе резервне копіювання - близько 3,5 Гбіт.

Проблема, яку я маю, полягає в тому, що оптимізації перед повною резервною копією, здається, спричиняють зростання наступної резервної копії журналу транзакцій в розмірі понад 2 рази в розмірі повної резервної копії, в даному випадку 8Gb, перед тим, як повернутися до нормального.

Крім того BACKUP LOG <DatabaseName> WITH TRUNCATE_ONLY, чи є якийсь спосіб зменшити розмір резервної копії цього журналу або взагалі не допустити, щоб оптимізація була записана в журнал транзакцій, оскільки, безумовно, вони будуть враховані в повній резервній копії, якій вони передують?


1
+1 Оголосив це через обмін думками, викликаними цим питанням.
MarlonRibunal

Відповіді:


35

Тут є кілька цікавих пропозицій, які, схоже, показують непорозуміння щодо роботи резервних копій журналу. Резервне копіювання журналу містить ВСІ журнали транзакцій, згенеровані з попереднього резервного копіювання журналу, незалежно від того, які повні або диференціальні резервні копії приймаються у проміжку. Припинення резервного копіювання журналу або перехід до щоденних повних резервних копій не матиме впливу на розміри резервного копіювання журналу. Єдине, що впливає на журнал транзакцій, - це резервне копіювання журналу, після запуску ланцюга резервного копіювання журналу.

Єдиним винятком із цього правила є те, якщо ланцюг резервного копіювання журналу був розірваний (наприклад, перейшовши на SIMPLE модель відновлення, повернувшись із знімка бази даних, обрізавши журнал за допомогою BACKUP LOG WITH NO_LOG / TRUNCATE_ONLY), у цьому випадку перша резервна копія журналу міститиме весь журнал транзакцій з останнього повного резервного копіювання - який перезапускає ланцюг резервного копіювання журналу; або якщо ланцюг резервного копіювання журналу не був запущений - коли ви вперше переходите на FULL, ви працюєте у певній моделі відновлення псевдо-ПРОСТО до початку першої повної резервної копії.

Щоб відповісти на своє первісне запитання, не заглиблюючись у ПРОСТУ модель відновлення, вам доведеться витягнути резервну копію всього журналу транзакцій. Залежно від дій, які ви здійснюєте, ви можете робити частіші резервні копії журналу, щоб зменшити їх розмір, або зробити більш цільову базу даних.

Якщо ви можете опублікувати якусь інформацію про технічне обслуговування, яке ви робите, я можу допомогти вам їх оптимізувати. Ви випадково переробляєте індекси з подальшим скороченням бази даних, щоб повернути простір, який використовували індекс для відновлення?

Якщо у вас немає іншої активності в базі даних, поки відбувається обслуговування, ви можете зробити наступне:

  • переконайтеся, що діяльність користувачів припинена
  • зробити остаточне резервне копіювання журналу (це дозволяє відновити до початку запуску обслуговування)
    • перейдіть на просту модель відновлення
    • виконувати технічне обслуговування - журнал буде усічений на кожній контрольній точці
    • перейдіть на повну модель відновлення та отримайте повне резервне копіювання
    • продовжувати як нормально

Сподіваюсь, це допомагає - з нетерпінням чекаю на додаткову інформацію.

Спасибі

[Редагувати: після усієї дискусії про те, чи може повна резервна копія змінити розмір наступної резервної копії журналу (вона не може), я зібрав вичерпну публікацію в блозі з фоновим матеріалом та сценарієм, який це підтверджує. Перевірте це на веб-сторінці https://www.sqlskills.com/blogs/paul/misconceptions-around-the-log-and-log-backups-how-to-convince-yourself/]


4
Пол - абсолютно не згоден. Просто не робіть резервного копіювання журналу під час обслуговування індексу. Журнал буде зростати, і наступне повне резервне копіювання буде більшим, але ви не будете мати ефективність резервних копій t-журналу, які відбуваються одночасно з вашими завданнями з обслуговування індексу. Ви можете бачити в цьому заслугу? Звичайно, ви погоджуєтесь, що одночасне резервне копіювання t-log та підтримка індексів спричинить за собою ефективність.
Брент Озар

6
Ні - я все одно не погодився б. Я вважаю за краще мати частіші резервні копії журналу, щоб вони були меншими, ніж один монстр після того, як було проведено технічне обслуговування. Непропорційно розмірне резервне копіювання журналу може призвести до проблем з їх копіюванням через мережу (наприклад, для резервного копіювання за межами сайту або доставки журналу). Якщо немає активності користувача і немає ніякої іншої потреби в резервній копії журналу, можливо , але якщо система виходить з ладу і вам доведеться робити резервну копію журналу, це займе багато часу, це частина вашого простою. . Я повинен зробити повідомлення про це в блозі.
Пол Рандал

І навіть це не допомагає оригінальному питанню ОП про те, як зменшити розмір резервного копіювання журналу після обслуговування індексу - адже це потенційно може збільшити його, залежно від того, які операції виконуються.
Пол Рандал

5

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

Я здогадуюсь, що ви використовуєте план технічного обслуговування для оптимізацій, ви можете змінити його на сценарій, який робить дефрагменти індексів лише тоді, коли буде досягнуто певного рівня фрагментації, і ви, швидше за все, не зазнаєте будь-якого результату. Це створить набагато менші журнали.

Я б пропустив щоденні диференціали на користь щоденних повних резервних копій BTW.


Я припускаю, що я міг би просто зробити прямий журнал TRUNCATE в кінці повної резервної копії, але це зовсім не здається найкращим методом, я сподівався на деякі альтернативи ... Які переваги будуть робити щоденні повні резервні копії. чим відрізняється? Це, здається, використовує більше місця для порівняно невеликої користі. Я також не можу перейти до простого відновлення, оскільки мені потрібен рівень деталізації, який дають погодинні резервні копії журналу. Нарешті, я не впевнений, як допоможе переміщення оптимізацій до сценарію, напевно, у мене все-таки виникатиме така ж проблема лише рідше?
Дейв

Я сприйняв це через пропозицію пропустити різницю та перейти на щоденні повноцінні. Чому? Залишається 3,5 ГБ, тоді як різниця становить лише 250 МБ. Стратегія резервного копіювання мені виглядає абсолютно чудово. Вилучення відмінності означає, що на багато ГБ більше місця для лише невеликого, крихітного прискорення часу відновлення.
Пол Рандал

2
Ситуація у кожного різна, в цьому немає нічого поганого, але якщо місце не на виграш, якщо вам потрібно швидко відновитися, краще зробити один крок, ніж два.
SqlACID

1
@Dave Дивіться відповідь Джеремі, створіть збережену процедуру для дефрагментації певних файлів, розбиття на дрібні шматки.
SqlACID

3

Ваше останнє питання: "Окрім BACKUP LOG WITH TRUNCATE_ONLY, чи є якийсь спосіб зменшити розмір резервної копії цього журналу або взагалі не допустити, щоб оптимізація була записана в журнал транзакцій, оскільки, безумовно, вони будуть враховані в повному обсязі резервне копіювання їм передує? "

Ні, але ось вирішення. Якщо ви знаєте, що єдиною діяльністю в цій базі даних на той час будуть завдання з обслуговування індексу, то ви можете зупинити резервне копіювання журналу транзакцій перед початком обслуговування індексу. Наприклад, деякі мої сервери в суботу вночі, графіки роботи виглядають приблизно так:

  • 21:30 - працює резервне копіювання журналу транзакцій.
  • 21:45 - резервне копіювання журналу транзакцій працює в останній раз. Розклад зупиняється о 9:59.
  • 22:00 - розпочинається робота з технічного обслуговування індексів, а вбудовані зупинки закінчуються до 11:30.
  • 23:30 - повна робота із резервного копіювання починається і закінчується за 30 хвилин.
  • 00:00 - резервні копії журналу транзакцій починаються знову кожні 15 хвилин.

Це означає, що я не маю можливості відновити час у часі між 9:45 та 23:30, але окупність - це швидша ефективність.


І ви повинні перейти на SIMPLE трохи раніше 10:00, правда? В іншому випадку резервне копіювання журналу 12:00 буде містити весь журнал, сформований між 10:00 та 12:00.
Пол Рандал

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

НІ , точно не переходити на просте. Він запитав про розмір резервного копіювання журналу транзакцій, а не про розмір його повних резервних копій або про файл журналу транзакцій.
Брент Озар

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

Якщо ваша робота з обслуговування індексу нічого не зробить ...
Пол Рандал

3

Проста відповідь: Змініть свою щотижневу оптимізацію, щоб вона працювала більш врівноважено щоночі. тобто таблиці повторного індексу ae в ніч на неділю, f - l в ніч на понеділок і т. д ... знайдіть хороший баланс, ваш журнал буде в середньому приблизно 1/6 розміру. Звичайно, це найкраще працює, якщо ви не використовуєте роботу з обслуговування вбудованого індексу ssis.

Мінус цього, і це важливо залежно від навантаження, яке відчуває ваш db, - це те, що він спричиняє загрозу з оптимізатором та повторним використанням планів запитів.

Але якщо все, що вам цікаво, - це розмір вашого t-журналу щотижня, розділіть його на день або на годину до години та запустіть резервні копії t-log між ними.


2

Для зменшення розмірів резервних копій та журналів ви можете також переглянути інструмент сторонніх виробників (Litespeed від Quest, резервне копіювання SQL від Red Gate, Hyperbac). Вони можуть швидко оплатити себе заощадженнями стрічки.


2

Можливо, можна припустити, що ваші "оптимізації" включають відновлення індексу. Лише виконання цих завдань щотижня може бути прийнятним у базі даних, яка не стикається з великою кількістю оновлень та вставок, однак якщо ваші дані є надзвичайно текучими, ви можете зробити пару речей:

  1. Перебудовуйте або реорганізуйте свої індекси щоночі, якщо ваш графік дозволяє та якщо вплив прийнятний. Виконуючи ці нічні завдання з обслуговування індексу, орієнтуйтеся лише на ті індекси, які фрагментарно перевищують 30% для відбудов і в межах 15-30% для reorgs.

  2. Ці завдання реєструють транзакції, тому якщо ви стурбовані ростом журналу, то я б виступав за те, що рекомендував Павло. Заключне резервне копіювання журналу транзакцій до обслуговування індексу, перейдіть до простого відновлення з подальшим процесом технічного обслуговування, а потім перейдіть до повного відновлення з подальшим резервним копією повних даних.

Я використовую дзен-подібний підхід до своїх файлів журналів: вони є розміром, яким вони хочуть бути. До тих пір, поки вони не пережили нестабільного зростання через погану практику резервного копіювання порівняно з активністю бази даних, якою я живу.

Щодо сценаріїв, які виконують дискреційне обслуговування індексу, дивіться в Інтернеті: там є тонна. Ендрю Келлі близько року тому опублікував гідний журнал SQL. У SQLServerPedia є кілька сценаріїв від Мішель Уффорд, а останній випуск журналу SQL (липень 2009 року, я вважаю) має також повну статтю про цю тему. Сенс полягає в тому, щоб знайти той, який добре підходить для вас, і зробіть його власним з мінімальними налаштуваннями.


2

Чи можете ви спеціально створити резервну копію журналу транзакцій у різних точках під час оптимізації вашої бази даних? Загальний розмір t-журналів був би однаковим, але кожен був би меншим, можливо, певним чином допомагав би вам.

Чи можете ви зробити більш цілеспрямовану оптимізацію баз даних, щоб було створено менше транзакцій (хтось це згадав, але я не впевнений, що наслідки прописані). Такі, як певний час переносити певну кількість роздробленості або витрачати місце. Якщо 40% ваших таблиць лише 5% фрагментовані, не торкаючись їх, ви можете зекономити трохи активності.

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