Методи пошуку нових прапорів слідів у SQL Server


38

Там багато Trace Flags. Деякі з них добре задокументовані, деякі - ні, а інші знайшли шлях до статусу поведінки за замовчуванням у випуску 2016 року. Крім офіційних каналів підтримки, співробітників Microsoft тощо, які способи знайти нові прапорці слідів?

Я читав кілька останніх публікацій Аарона Бертранда тут і тут , але нічого не помітив про нові «Прапорці слідів».

Я скопіював дані та файл журналу mssqlsystemresource на нове місце та додав його, як звичайну базу даних, щоб проглядатись через системні таблиці та представлення даних, але нічого не виявив одразу. Я розглядав можливість скласти список відомих «Trace Flags» та проглядати номери, які не є у цьому списку, щоб побачити, які DBCC TRACEON дозволить, але спершу хотів задати це питання.

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

Я знаю, що це запитання має широку мережу, але те, що спонукало це, було читати про «Прапор слідів» із специфічною цільовою поведінкою поряд із новою функцією у 2016 році, яка не мала описаного ефекту. Моя початкова думка полягала в тому, що, можливо, цифри переносяться якось, як 7129 стає 7219. Я сподівався отримати список дійсних прапорів слідів у межах діапазону, скажімо, 7000-7999, щоб шукати перестановки. Тестування їх усіх, як прапорців DBCC TRACEON, так і параметрів запуску, було б досить неприємно в поєднанні з тестуванням результатів на поведінку функції.

Відповіді:


42

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

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

DBCC TRACEON не перевіряє нічого - оскільки немає списку часу виконання чисел, які є дійсними чи ні - він просто дозволяє вказати номер прапора сліду в растровій карті того, які прапори встановлені для цього з'єднання / у всьому світі.

Проблема перевірки дійсності полягає в тому, що можна було б виявити, які прапори слідів є дійсними, що дозволить їх виявити. Таким чином 'дійсний список' фактично затуманений, чого хоче команда SQL.

Щодо пропозиції Кіна у коментарі, який повинен мати SQL Server select * from sys.available_trace_flags- Так і ні. Існує багато прапорів слідів, які дуже згубні для продуктивності та необхідні лише для налагодження проблем під керівництвом Служби підтримки, але SQL Server може перелічити "безпечні" прапори.


2
Один незначний виправлення - DBCC TRACEON дійсно щось перевіряє. Цей історія показує код, який проходить через прапори слідів, починаючи з 1. Усі поточні версії SQL Server вибухнуть і видадуть помилку на максимальний номер поточного прапора сліду: gist.github.com/BrentOzar/0e9692da8ceffeb2b4bdd064e36d3174
Brent Ozar

41

Які способи знайти нові прапорці слідів?

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

Безумовно, можна написати сценарій, щоб провести цикл через можливі номери прапорів слідів і проаналізувати ефекти, але це не завжди є результативним. Причин тому багато, але поширені розчарування включають той факт, що деякі прапорці слідів ефективні лише в поєднанні з іншими, деякі працюють лише -Tпри запуску, або при використанні DBCC TRACEON, деякі лише з OPTION (QUERYTRACEON). Для деяких потрібні незадокументовані команди або розширення команд або для того, щоб певна функція була також увімкнена. Деякі виробляють ефекти, лише якщо знаєте, де шукати ці ефекти. І так далі і ... дуже сильно ... так далі.

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

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

Встановлення точки перерви CSessionTraceFlags::CheckSessionTraceInternalта перевірка значення edxреєстру (щоб побачити, який прапор трасування перевіряється) може бути корисним у простих випадках, але цікаві випадки не часто бувають простими - і не всі прапорці слідів перевіряються в тому місці, де вони впливати на пройдений шлях коду.

Існує досить невеликий перелік офіційних прапорців . Це прапори, які були повністю перевірені і підтримуються (і будуть підтримуватися) CSS і, зрештою, розробниками продукту. Вони також є прапорами з досить поширеним випадком використання, щоб їх варто документувати.

Будь-який інший прапор трасування, який ви знайдете, викликає цікавість, яка може мати несподівані наслідки в різних ситуаціях (різні збірки, SKU, налаштування безпеки, різні функції ... все, що ви можете або не можете придумати). Їх буде "підтримувати" лише людина, яка написала про них, якщо вона взагалі є.

Є кілька неофіційних списків, найкращий з яких я знаю - це актуальна колекція прапорів SQL Server від Аарона Мореллі (зараз на v6, квітень 2016).

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


14

Ми підтримуємо колекцію слідів прапорів на Github (зараз 599 слідів прапорів):

Прапори слідів Microsoft SQL Server

Також дуже хороша техніка, описана Брентом Озаром у своїй чудовій статті « Джинси поганої ідеї»: Пошук недокументованих прапорців слідів та Джо Оббіш у цій дивовижній статті «Метод пошуку слідів прапорців»

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