17.1.23

Полезные флаги трассировки SQL Server

По материалам статьи Randy Dyess " Documented and Undocumented Trace Flags for SQL Server 2000 and 7.0"

Информация в этой статье относится к Microsoft SQL Server 7.0/2000 (все издания)

Флаги трассировки (Trace flags) обычно используются для временного отключения некоторых функций базы данных, что позволяет изменять заданное по умолчанию поведение СУБД или наблюдать её обычно скрытые проявления. Как правило, их действие остаётся в силе пока они не будут выключены вручную, или не будет перезапущен SQL сервер. Имейте в виду, что большинство флагов не документированны и Microsoft может изменять их поведение в последующих версиях SQL сервера или с выходом сервисных пакетов и заплат. Флаг может быть установлен или при запуске SQL сервера, используя опцию -Ttrace#, или с помощью команды DBCC TRACEON. Для отключения флага в первом случае нужно перезапустить SQL сервер, а во втором случае используется команда DBCC TRACEOFF.


Флаги трассироваки являются хорошим инструментом для поиска скрытых проблем или для того, что бы точно определить поведение сервера. Однако, рекомендуется предварительно тщательно исследовали поведение недокументированных флагов трассировки прежде, чем испольовать их на своих промышленных серверах (из представленных ниже, только флаги: 230, 1204, 2528 и 3205 документированы в BOL). С помощью поиска статей в Microsoft Knowledge Based можно найти информацию о поведении сервера при использовании выбранного Вами флага трассировки.
Ниже представлен список флагов трассировки, которые, по мнению автора статьи, могут быть полезны как разработчикам приложений баз данных, так и администраторам баз данных. За основу взята информация из Transact-SQL Language Reference Guide Этот же документ поясняет поведение нескольких документированных и не документированных флагов трассировки для SQL Server 7.0 и 2000.

-1 - устанавливает флаги трассировки для всех клиентских подключений, а не для единственного подключения. Поскольку этот флаг устанавливается через опцию -T в командной строке, он автоматически воздействует на все подключения. Этот флаг используется только когда необходимо изменить действие других флагов, задаваемых с помощью DBCC TRACEON и DBCC TRACEOFF.
106 - Отключает информацию о номере строки для ошибок синтаксиса.
107 - Интерпретирует числа с точкой как числа с плавающей точкой вместо decimal.
205 - Выдаётся уведомление когда перетранслируется statistics-dependent хранимые процедуры, в результате AutoStat.
206 - Обеспечивает обратную совместимость для инструкции setuser.
208 - SET QUOTED IDENTIFIER ON.
242 - Обеспечивает обратную совместимость для коррелированых подзапросов, где желательны результаты в отличном от ANSI стандарте.
243 - Устанавливает менее противоречивое поведение SQL Server, потому что проверки nullability будут задействованы во время выполнения и результат нарушения nullability будет в завершении команды и пакета или транзакционного процесса.
244 - Отключает проверку для разрешённых временных нарушений ограничений. По умолчанию, SQL Server проверяет и разрешает временные нарушения ограничений. Временное нарушение ограничений может появиться в пределах одной инструкции и транзакции. SQL Server проверяет временные нарушения ограничений во время исполнения инструкций DELETE, INSERT и многострочного UPDATE. Эта проверка требует большего количества дополнительных операций с таблицами. С этим флагом Вы можете пропускать проверку на временные нарушения ограничений, уменьшая таким образом количество операций с таблицами.
257 - Вызыват алгоритм печати в Xml - формате, что делает Xml результат более читаемым.
260 - Печатает информацию о версии расширенных хранимых процедур (dll).
302 - Печатает информацию о статистике использования страниц, фактической селективности (если возможно) и о том, как SQL Server оценил возможный физический и логический I/O для индексов. Флаг 302 должен использоваться с флагом 310, для демонстрации фактического порядка объединения.
310 - Выводит информацию о порядке объединения. Информация о выборе индекса также доступна в более читаемом формате при использовании SET SHOWPLAN_ALL, описаной в документации по SET.
325 - Выводит информацию о стоимости использования некластерного индекса или сортировки при отработке ORDER BY.
326 - Выводит информацию об оценочной и фактической стоимости сортировок.
330 - Обеспечивает более полный вывод информации при использовании опции SET SHOWPLAN_ALL, которая выдает детальную информацию об объединениях.
506 - Предписывает использование стандарта SQL-92 для null значений при сравнений между переменными и параметрами. Любое сравнение переменных и параметров, которые содержат null, всегда кончается null.
652 - Отключает упреждающее чтение для сервера.
653 - Отключает упреждающее чтение для текущего подключения.
809 - Ограничивает количество Lazy Write для SQL Server 2000.
1180 - Заставляет использовать свободные страницы для данных типа text или image, улучшая, за счёт этого, эффективность использования памяти.
1200 - Выводит информацию о блокировках (id процесса и тип блокировки).
1204 - Возвращает тип тупиковой блокировки и команду её породившую.
1205 - Возвращает более детальную информацию о команде, приводящей к тупиковой блокировке.
1206 - Используется для дополнения флага 1204, что бы показать другие блокировки, порождённые тупиковой.
1609 - Включает распаковку и проверку информации удаленного вызова процедуры (RPC) в Open Data Services. Используется только когда прикладные программы зависят от предшествующего поведения.
1704 - Выводит информацию о том, когда временная таблица была создана или удалена.
1807 - Позволяет подключать к SQL Server файлы базы данных расположенные на другом компьютере в сети.
2505 - Позволяет откллючить запись в журнал ошибок SPID 10 при использовании DBCC TRACEON 208.
2508 - Отключает параллельную проверку не кластерного индекса для DBCC CHECKTABLE.
2509 - Используется с DBCC CHECKTABLE, чтобы видеть полный отчёт о скрытой записи в таблицу.
2528 - Отключает параллельную проверку объектов DBCC командами.
2701 - Устанавливает системную функцию @@ERROR в 50000 для сообщений RAISERROR с уровнем серьезности не выше 10. Эсли это заблокировано, устанавливает системную функцию @@ERROR в 0 для уровня серьезности не выше 10.
3104 - Заставляет SQL Server отключить проверку на свободное место.
3111 - Заставляет пропускать LogMgr::ValidateBackedupBlock в течение операций восстановления и резервирования.
3205 - Отключает аппаратное сжатие для стримера.
3222 - Отключает упреждающее чтение, которое используется при recovery во время исполнения операций roll forward.
3502 - Выводит сообщение в файл регистрации о начале и конце каждой контрольной точки.
3503 - Указывает, была ли исполнена контрольная точка в конце автоматического восстановления базы данных (это применяется только для read-only баз данных).
3602 - Делает запись всех ошибок и предупреждающих сообщений, посланных клиенту.
3604 - Выводит трассу клиенту. Флаг устанавливается только через DBCC TRACEON и DBCC TRACEOFF.
3605 - Выводит трассу в файл регистрации ошибок. (Если Вы запускаете SQL Server из командной строки, трасса будет выведена на экран).
3607 - Отключает автоматическое выполнение recovery (при запуске) для всех баз данных.
3608 - Отключает автоматическое выполнение recovery (при запуске) для всех баз данных кроме базы данных master.
3609 - Отключает создание при запуске базы данных tempdb. Используйте этот флаг если устройство или устройства, на которых tempdb постоянно находится, неисправны или существуют проблемы в базе данных model.
3626 - Включает отслеживание информации о CPU для таблицы sysprocesses.
3640 - Устраняет посылку клиенту сообщений DONE_IN_proc для всех инструкций в хранимой процедуре, подобно установке сеанса SET NOCOUNT ON, но когда это установлено через флаг трассировки, это будут действовать для каждого клиентского сеанса.
4022 - Обход автоматически запускаемых процедур.
4030 - Выводит байтовое и ASCII представление результирующего буфера. Используется когда нужно видеть какие запросы клиент посылает SQL серверу. Вы можете использовать этот флаг при нарушениях защиты, что бы определить, какая инструкция стала этому причиной. Как правило, Вы можете установить этот флаг глобально или использовать SQL Server Enterprise Manager. Также Вы можете использовать DBCC INPUTBUFFER.
4031 - Выводит байтовое и ASCII представление посылаемого буфера (то, что SQL Server посылает назад клиенту). Также Вы можете использовать DBCC OUTPUTBUFFER.
4032 - Отслеживает SQL команды, поступающие от клиента. Место для вывода задаётся флагами 3605/3604.
7300 - Собирает расширенную информацию о любой ошибке, с которой Вы сталкиваетесь при исполнении распределенного запроса.
7501 - Динамические курсоры используются по умолчанию как forward-only курсоры. Теперь динамические курсоры быстрее чем в ранних версиях и больше не требуют уникальных индексов. Этот флаг отключает такое поведение динамических курсоров и возвращает сервер к поведению в версии 6.0.
7502 - Отключает кэширование планов курсора для расширенных хранимых процедур.
7505 - Включает обработку как в версии 6.x кодов возврата при запросе dbcursorfetchex, и окончательная позиция курсора останется за концом результирующего набора курсора.
7525 - Возвращает SQL Server 2000 к поведению SQL сервера версии 7.0, когда нестатические курсоры закрывались независимо от состояния SET CURSOR_CLOSE_ON_COMMIT.
8202 - Реплицирует все команды UPDATE как пары DELETE/INSERT на publisher.
8206 - Поддерживает выполнение на SQL Server 2000 хранимых процедур с определённым пользователем именем владельца для подписчиков на SQL Server или без квалификации владельца для гетерогенных подписчиков.
8207 - Допускает модификацию singleton для репликации транзакций, появившуюся с выходом SQL Server 2000 service pack 1.
8599 - Позволяет использовать savepoint в рамках распределённой транзакции.
8679 - Отключает в оптимизаторе SQL Server использование оператора Hash Match Team.
8687 - Используется для отключения распараллеливания запроса.
8721 - Выводит информацию в файл регистрации ошибок о том, когда был выполнен AutoStat.
8783 - Позволяет инструкциям DELETE, INSERT и UPDATE использовать установку SET ROWCOUNT ON когда это разрешено.
8816 - Подменяет каждое двухцифровое обозначение года четырехцифровым обозначением года.

Комментариев нет:

Отправить комментарий