Поділ DBCC CHECKDB на кілька днів


10

Я працюю над впровадженням методу Пола Рандала вручну поширювати DBCC CHECKDB протягом декількох днів для дуже великих баз даних, які в основному складаються з:

  • Поділ таблиць у базі даних приблизно однаково між 7 відрами
  • Запуск DBCC CHECKALLOC двічі на тиждень
  • Запуск DBCC CHECKCATALOG раз на тиждень
  • Запуск DBCC CHECKTABLE в одному відрі кожен день тижня

Хтось використовував цю техніку? Будь-які існуючі сценарії там?

Я стурбований, це може насправді не охоплювати все, що робить CHECKDB; Документація Books Online для CHECKDB говорить, що крім CHECKALLOC, CHECKCATALOG та CHECKTABLE, вона також:

  • Перевіряє вміст кожного індексованого перегляду в базі даних.
  • Підтверджує узгодженість рівня зв’язку між метаданими таблиці та файлами файлової системи при зберіганні варбінарних (макс.) Даних у файловій системі за допомогою FILESTREAM. (Лише для SQL 2008)
  • Перевіряє дані сервісного брокера в базі даних.

Тож ось мої запитання:

  1. Чи необхідні / важливі ці додаткові перевірки? (Проіндексовані погляди, мабуть, трохи більше стосуються мене. Я не думаю, що ми ще використовуємо Service Broker або FILESTREAM.)

  2. Якщо так, чи існують способи проведення цих додаткових перевірок окремо?

  3. CHECKALLOC і CHECKCATALOG, здається, працюють дуже швидко, навіть на великих dbs. Будь-яка причина не запускати їх щодня?

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


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

Я працюю, щоб зробити те саме - будь-які поради / готчі, які ви знайшли, оскільки ви, ймовірно, вже реалізували це?
scsimon

1
@scsimon Я змусив її добре працювати, див. це пов'язане питання щодо конкретної стратегії, яку я використовував для поділу таблиць. Я думаю, що врешті-решт я склав основний список всіх таблиць у всіх (великих) базах даних на всьому сервері, щоб розділити їх на щоденні "відра", що дало мені набагато рівномірніше, ніж розділення списку кожної бази даних окремо. Менші бази даних Я щодня робив повний DBCC, і це не було частиною розколу.
BradC

Відповіді:


6

Чи необхідні / важливі ці додаткові перевірки? (Проіндексовані погляди, мабуть, трохи більше стосуються мене. Я не думаю, що ми ще використовуємо Service Broker або FILESTREAM.)

Ви можете працювати DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS безпосередньо на індексованих поданнях . Перевірка індексованих поглядів може бути проблематичною за певних обставин , тому будьте готові дослідити будь-які помилкові позитиви, які призводять до цього. (Пол Рандал також згадує у коментарях до цієї статті, що можливі помилкові негативи, але я не маю цього прямого досвіду.)

Якщо так, чи існують способи проведення цих додаткових перевірок окремо?

Немає підтримки для запуску Сервісного брокера або FILESTREAMперевірки окремо, ні.

CHECKALLOCі, CHECKCATALOGздається, працює дуже швидко, навіть на великих dbs. Будь-яка причина не запускати їх щодня?

Не те, що мені відомо.


Ви також можете розглянути можливість запуску DBCC CHECKCONSTRAINTS. Ця перевірка НЕ включена в DBCC CHECKDB, незалежно від будь - яких параметрів , які ви можете вказати. Ви також можете подумати про те, щоб час від часу бігати CHECKDB, як і коли дозволяють обставини.


6

DBCC CHECKDB життєво важливий, щоб бази даних SQL Server були на 100% впевнені, що немає корупції. Однак через великі розміри баз даних дуже важко знайти вікно технічного обслуговування, коли ви стверджуєте, що на 24х7. Протягом багатьох років команда SQL Server впровадила різні механізми, які дозволять виявити найпоширеніші форми корупції, особливо пов'язані з фізичною корупцією, спричиненою апаратними засобами.

SQL Server 2005 і вище має PAGE_VERIFY = CHECKSUM, який може допомогти вам активно виявити фізичну пошкодження на сторінках бази даних, тим самим додаючи контрольну суму до кожної сторінки під час запису в систему вводу-виводу та перевіряючи контрольну суму під час її зчитування з диска.

Крім того, резервна копія (повна або диференціальна) за допомогою CHECKSUM гарантує виявлення будь-яких пошкоджень вводу / виводу, спричинених апаратним забезпеченням.

Отже, з апаратної сторони корупції, SQL Server робить гарну роботу з виявлення та повідомлення про це. (Не забудьте встановити також важливі сповіщення щодо корупції ).

Незважаючи на це, все ще логічна пошкодження , помилки, спричинені шифровальщиком - коли сторінки в пам'яті пошкоджуються або стороннім кодом, що працює в процесі роботи SQL Server, або драйверами або іншим програмним забезпеченням, що має достатньо привілеїв, що виконуються в режимі ядра Windows та / або SQL Server Помилки тощо не можна виявити за допомогою вищезазначених методів, і отже, CHECKDB з'являється на світ.

DBCC CHECKDB проводить більш ретельну перевірку, яка включає перевірку заголовків сторінок на предмет можливої ​​корупції, яку не можна виявити будь-якими іншими способами.

Будь-які існуючі сценарії там?

Замість того, щоб винаходити колесо, настійно рекомендую поглянути на рішення перевірки цілісності Ola SQL Server

Ефективний запуск DBCC CHECKDB:

Вам просто потрібно проявити творчість, коли ви щільно стежите у вікні технічного обслуговування, маючи величезну базу даних чи велику кількість баз даних, на яких запускається CHECKDB.

Після відвідування тренінгу з SQLSkills я реалізував:

  • визначте, які таблиці важливо перевірити.
  • розділіть таблиці на групи з різними пріоритетами, а потім запустіть DBCC CHECKTABLEразом із запуском DBCC CHECKALLOCтаDBCC CHECKCATALOG
  • Створіть таблицю робітників, яка буде зберігати назви таблиць із пріоритетами. Просто переконайтесь, що всі таблиці з високим пріоритетом (які є масово великими) не входять до однієї групи, інакше ваш CHECKDB взагалі не заповниться.
  • Ви навіть можете мати стовпець тайм-ауту у вашій таблиці робітника, який буде оркеструвати, коли ваш CHECKDB буде вбитий, коли він пройде вікно технічного обслуговування.
  • Додайте, скільки часу зайняло запуск однієї таблиці DBCC CHECKTABLE, DBCC CHECKALLOCі DBCC CHECKCATALOG. Так що ви можете відчути , як довго він зазвичай приймає для перевірки , щоб бігти.
  • Ви навіть можете запустити з NOINDEXопцією, оскільки це прискорить роботу, оскільки вона не перевіряє некластеризовані індекси на таблицях користувачів. Це має певну перевагу, оскільки це не так важливо, як корупція даних, оскільки не втрачаються дані, і ви можете скинути та відтворити індекс, якщо це необхідно.

Очевидно, що видання Enterprise може скористатись паралельним виконанням операторів DBCC, але слідкуйте за налаштуваннями MAXDOP, оскільки це може сприйняти весь ваш процесор. Це може бути жорстко обмежене губернатором ресурсів.

Примітка. Якщо у вас стовпчик "ЗАПАСНА", ваш CHECKDB буде мертвим повільно, як описано тут .

Нарешті, це як запобігти корупції баз даних, використовуючи весь доступний набір інструментів + ​​вашу віру в апаратну систему вашого сервера баз даних і, головне, значення ваших даних.

Деякі відмінні посилання:

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