Как я получаю значения параметров для запроса SQL Server в SQL Server Profiler

Я пытаюсь проанализировать мертвую блокировку в профилировщике SQL Server 2008 года. Я знаю, как найти незаконные запросы SQL, но собранные запросы не включают значения параметров.

Я другие слова I вижу что-то вроде этого:

DELETE FROM users WHERE id = @id

Но то, что я хотел бы видеть, является этим:

DELETE FROM users WHERE id = 12345

Я предполагаю, что существуют некоторые дополнительные события или Столбцы, которые я должен собрать в профилировщике, но я не знаю который. Я в настоящее время использую шаблон "TSQL_LOCKS".

Любые подсказки значительно ценились бы.

Спасибо,

Adrian

Отказ от ответственности: Я задал подобный вопрос прежде, но я предполагаю, что это было слишком конкретно, который является, почему я не получил ответов. Я запускаю другую попытку с этого.

20
задан Adrian Grigore 23 December 2009 в 13:31
поделиться

4 ответа

Думаю, вам понадобится событие RPC: Completed:

http://msdn.microsoft.com/en-us/library/ms175543.aspx

21
ответ дан 30 November 2019 в 00:43
поделиться

Запустите трассировку со следующими событиями, при этом все флажки установлены:

SQL: BatchCompleted
SQL: BatchStarting
Deadlock graph
Lock:Deadlock
Lock:Deadlock chain

После возникновения взаимоблокировки остановите трассировку, затем щелкните класс событий графа взаимоблокировок.

Это должно дать вам хорошее представление о том, что идет не так.

1
ответ дан 30 November 2019 в 00:43
поделиться
--

Профилировщик будет содержать значения параметров в событиях RPC:Completed/RPC:Starting. Но вы уже получили ответы, говорящие об этом.

Хочу добавить, что для анализа тупикового графика очень мало нужно знать значения параметров во время выполнения. Во-первых, потому что если в дедлоке задействованы 'пользователи', то сам график дедлока выдаст, что @id является конфликтом, если конфликт находится на ключе. Во-вторых, что более важно, для сценария дедлока не имеет значения, какие именно клавиши в нем задействованы. Не похоже, что тупик случается потому, что удаляется пользователь с id 123, но не произойдет, когда он удалит пользователя 321.

Если вы решили спросить об SO в первую очередь, я думаю, что лучше всего было бы опубликовать реальный график дедлока и дать сообществу взглянуть на него. Здесь есть много таких, которые могут ответить на довольно много вопросов только с XML графа дедлока.

5
ответ дан 30 November 2019 в 00:43
поделиться

Если вы используете хранимую процедуру (которая выглядит так, как будто это вы) или спящий режим/NHibernate, вам может понадобиться включить событие запуска хранимой процедуры (SP:StmtStarting) и событие RPC:Starting. Это покажет параметры в собственной строке после запроса.

Что-то вроде:

SP:SP:StmtStarting DELETE FROM users WHERE id = @id

RPC:Starting exec sp_execute 12345

.
1
ответ дан 30 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: