Как я могу сказать, что значения параметров для хранимой процедуры проблемы? - PullRequest
1 голос
/ 03 августа 2011

У меня есть хранимая процедура, которая вызывает блокировку в моей базе данных сервера SQL. Всякий раз, когда он блокируется более чем на X секунд, мы получаем уведомление о том, какой запрос выполняется, и это выглядит примерно так:

   CREATE PROC [dbo].[sp_problemprocedure] (
    @orderid INT
    --procedure code

Как я могу определить значение @orderid? Я хотел бы знать значение, потому что эта процедура будет выполняться более 100 раз в день, но будет вызывать блокировку всего несколько раз, и если мы сможем найти какой-то шаблон между идентификаторами ордеров, возможно, я смогу отследить проблема.

Процедура вызывается из приложения .NET, если это помогает.

Ответы [ 5 ]

2 голосов
/ 03 августа 2011

Вы пытались распечатать его изнутри процедуры?

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

1 голос
/ 03 августа 2011

проще всего сделать следующее:

  • 1) в .NET, захватите дату и время непосредственно перед запуском процедуры
  • 2) в .Net, после завершения процедуры возьмите дату-время
  • 3) в .NET выполните некоторые вычисления даты и времени, и, если это «медленно», запишите в файл (журнал) эти даты начала и окончания, информацию о пользователе, все параметры и т. Д.
1 голос
/ 03 августа 2011

Самый простой способ - запустить трассировку профилировщика. Вы хотите захватить вызовы хранимой процедуры.

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

1 голос
/ 03 августа 2011
  • переименовать процедуру
  • создать таблицу регистрации
  • создать новую (ту же сигнатуру / параметры), которая вызывает исходный код, но сначала регистрирует параметры и начальную временную метку, а также регистрирует после завершения вызова конечную временную метку
  • создать синоним для этого нового процесса с именем оригинала

Теперь у вас есть журнал для всех вызовов, сделанных любым приложением ...

Вы можете отключить / включить ведение журнала в любое время, просто переопределив синоним, чтобы указать на оболочку ведения журнала или на оригинал ...

1 голос
/ 03 августа 2011

Если он вызывается из приложения .NET, вы можете легко выйти из параметра, передаваемого из приложения .net, но если у вас нет доступа, вы также можете использовать профилирование SQL Server. Фильтры могут быть установлены только для типа команды, т.е. proc, а также для базы данных, на которую наносится удар, иначе вы будете перегружены всей информацией, которую может создать профиль.

Ссылка: Использование Sql server profiler

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