Как определить SQL, который соответствует вызову sp_unprepare SQL Server? - PullRequest
0 голосов
/ 14 января 2009

Это, вероятно, довольно просто, так что потерпите меня (с другой стороны, возможно, есть хороший блестящий ответ!)

Я сейчас диагностирую проблему взаимоблокировки, и действительно вижу, что один из моих сеансов заблокирован другим. (Другим концом тупика являются потоки Java, ожидающие друг друга в обратном порядке.) При отображении сведений о процессах в проводнике процессов Management Studio выдается SQL для заблокированного сеанса, но SQL для блока ing * Сессия 1004 * отображается исключительно как "EXEC sp_unprepare 807".

Теперь я понимаю, что это связано с подготовленными утверждениями, и поэтому меня это не беспокоит само по себе. Тем не менее, я хотел бы знать, что на самом деле был SQL, так что я знаю, куда бросить подозрительный взгляд на кодовую базу. Итак, на данный момент, как лучше всего соотнести это с фактическим SQL, который был выполнен этим потоком? Существует ли системная таблица, в которой я могу найти сопоставление подготовленных операторов и их SQL? Возможно, таблица, в которой хранятся последние n операторов SQL для сеанса, который, как мы надеемся, будет содержать вызов prepare? Есть ли флаг, который я могу установить в соединении с драйвером базы данных, чтобы полностью отключить подготовленные операторы для этого сеанса?

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

Ответы [ 2 ]

1 голос
/ 14 января 2009

Попробуйте это

dbcc inputbuffer(spid)
0 голосов
/ 16 января 2009

Используйте SQL Profiler для отслеживания активности на сервере, а затем заново создайте проблему. При использовании серверных курсоров SQL будет использовать числа в качестве дескрипторов. Вы можете отследить эти дескрипторы через выходные данные Profiler, чтобы увидеть, что еще выполняется с использованием этого дескриптора. Между дескриптором и SPID вы можете отследить рабочую нагрузку и подробно изучить причину проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...