Как узнать, что вызвало ошибки, указанные в трассировке профилировщика SQL Server?
-
03-07-2019 - |
Вопрос
Я запускал трассировку на Sql Server 2005 с помощью профилировщика, и мне нужно было выяснить, что является причиной сообщаемых ошибок.
Я использовал «пустой» шаблон и выбрал все столбцы следующих событий:
- Исключение
- Событие разлива биржи
- Предупреждения выполнения
- Хэш-предупреждения
- Отсутствует статистика столбца
- Отсутствует предикат соединения
Я заметил ряд таких ошибок в столбце «TextData»:
- Ошибка:156, Серьезность:16, Состояние:0
- Ошибка:208, Серьезность:16, Состояние:0
Я просмотрел ошибки (неверный синтаксис, недопустимое имя объекта), но как определить, какая хранимая процедура или запрос их вызывает?
Решение
Не беспокойтесь об ошибках 208.208 — «Объект не найден».Профилировщик улавливает их благодаря так называемому «отложенному разрешению имен».
Выполните следующую процедуру.
CREATE PROCEDURE Demo AS
CREATE TABLE #Temp (ID int)
INSERT INTO #Temp VALUES (1)
SELECT ID FROM #Temp
GO
Этот процесс будет работать нормально, без каких-либо ошибок, однако, если у вас запущена трассировка профилировщика, вы увидите один или два экземпляра ошибки 208.Это потому, что таблица #Temp не существует при запуске процесса, то есть при анализе и связывании кода.Процесс привязки к базовым объектам завершается сбоем.
После запуска таблицы создания другие инструкции перекомпилируются, привязываются к правильной таблице и выполняются без ошибок.
Единственное место, где вы увидите эту ошибку отложенного разрешения, — это профилировщик.
Другие советы
в sql 2005 нельзя.вам придется запустить трассировку профилировщика событий SQL:StmtStarting, SQL:StmtCompleted, User Error Message и Exception с текстом, идентификатором транзакции, EventSequence и другими столбцами, которые вам нужны, чтобы получить представление о том, что происходит.