Там много трассирующих флагов. Некоторые из них хорошо документированы, некоторые нет, а другие нашли свой способ поведения по умолчанию в выпуске 2016 года. Помимо официальных каналов поддержки, сотрудников Microsoft и т. Д., Как найти новые флаги трассировки?
Я прочитал пару недавних постов Аарона Бертрана здесь и здесь , но ничего не заметил о новых флагах трассировки.
Я скопировал данные и файл журнала mssqlsystemresource в новое место и прикрепил его как обычную базу данных для просмотра системных таблиц и представлений, но сразу ничего не обнаружил. Я подумал о том, чтобы взять список известных флагов трассировки и перебрать числа, которых нет в этом списке, чтобы посмотреть, какие из них разрешит DBCC TRACEON, но сначала хотел задать вопрос здесь.
Предполагая, что команда DBCC, чтобы включить их, должна проверить с некоторым ресурсом, чтобы удостовериться, что Флаг Трассировки действителен, куда он обращается? Есть ли .dll или какой-то другой системный файл, который содержит список?
Я знаю, что вопрос затрагивает широкую сеть, но то, что подстегнуло это, это чтение о флаге трассировки с определенным предполагаемым поведением наряду с новой функцией в 2016 году, которая не имела описанного эффекта. Первоначально я думал, что, возможно, числа были каким-то образом транспонированы, например, 7129 становится 7219. Я надеялся получить список допустимых флагов трассировки в диапазоне, скажем, 7000-7999, для поиска перестановок. Тестирование их всех, как флагов DBCC TRACEON, так и параметров запуска, было бы довольно неприятно, в сочетании с тестированием результатов по поведению функции.
источник
По большей части, это сводится к тому, чтобы тратить время и эмоциональные ресурсы на их поиск.
Конечно, можно написать скрипт для циклического прохождения возможных номеров флагов трассировки и анализа эффектов, но это не всегда плодотворно. Для этого есть много причин, но к общим разочарованиям относится тот факт, что некоторые флаги трассировки эффективны только в сочетании с другими, некоторые работают только
-T
при запуске или при использованииDBCC TRACEON
только с некоторымиOPTION (QUERYTRACEON)
. Некоторые требуют недокументированных команд, или расширений команд, или для включения определенной функции. Некоторые из них производят эффекты, только если вы знаете, где искать эти эффекты. И так далее , и ... очень много ... так далее.Тем не менее, возможно, наиболее эффективным методом является пошаговое выполнение конкретного запроса или команды с подключенным отладчиком или другим инструментом профилирования, сравнивая пути, взятые с включенным и выключенным флагом (ами) трассировки. Если это звучит много времени, это потому, что это так.
Для меня что-то должно быть потенциально очень интересным или иметь отношение к реальной проблеме без лучшего решения для меня, чтобы даже подумать о том, чтобы войти в него. Также полезно, если вы проходили этот процесс сотни или тысячи раз прежде, чтобы получить общее представление о том, что вы ищете, какой диапазон флагов трассировки наиболее вероятен и какая часть кодовой базы будет интересно.
Установка точки останова
CSessionTraceFlags::CheckSessionTraceInternal
и проверка значенияedx
регистра (чтобы увидеть, какой флаг трассировки проверяется) могут быть полезны в простых случаях, но интересные случаи не всегда просты - и не все флаги трассировки проверяются в точке, где они влияют на путь к кодуСуществует довольно небольшой список официальных флагов трассировки . Это флаги, которые были полностью протестированы и поддерживаются (и будут поддерживаться) CSS и, в конечном счете, разработчиками продукта. Это также флаги с достаточно распространенным сценарием использования, который стоит документировать.
Любой другой найденный вами флаг трассировки - это любопытство, которое может иметь неожиданные последствия в различных ситуациях (разные сборки, SKU, настройки безопасности, разные функции ... все, что вы можете или не можете придумать). Они будут «поддерживаться» только тем, кто писал о них, если вообще будет.
Есть несколько неофициальных списков, лучший из известных мне - «Актуальная коллекция флагов SQL Server » Аарона Морелли (в настоящее время на v6, апрель 2016 г.).
Все это говорит о том, что Microsoft CSS (в конечном итоге) имеет доступ ко всем флагам трассировки, поэтому они могут проконсультировать вас по любому, с чем вы столкнетесь, даже если их нет в официальном списке. Конечно, они могут предпочесть ничего не говорить, и, возможно, за это будет взиматься плата; Я действительно не знаю, никогда не проходил этот путь сам.
источник
Мы поддерживаем коллекцию флагов трассировки на github (теперь 599 флагов трассировки):
Флаги трассировки Microsoft SQL Server
Кроме того, очень хорошая техника описана Брентом Озаром в его замечательной статье « Плохая идея джинсов: поиск недокументированных трассирующих флагов» и Джо Оббиша в этой замечательной статье «Метод поиска трассирующих флагов».
источник