SQL Server «Audit Logout» операция занимает много времени. - PullRequest
12 голосов
/ 06 декабря 2011

У нас есть хранимая процедура, которая вызывается около 300 000 раз в день 15 пользователями в течение дня. Я пролил каждую строчку, и она настолько эффективна, насколько я могу ее получить.

Доступ к хранимой процедуре осуществляется через страницу ASP.NET версии 4.0 из устаревшего приложения VB6 на базовых версиях Winterms.

Когда я смотрю на файл трассировки SQL, я вижу следующее:

  1. exec sp_reset_connection (Использование пула соединений)
  2. Аудит Вход
  3. Выполнение хранимой процедуры
  4. Аудит Выход из системы

Я вижу на шаге 4, чтение и запись очень высоки, что имеет смысл, поскольку это накопление соединения, повторно используемого в пуле.

Что меня беспокоит, так это то, сколько времени это занимает, иногда 50 мс, а иногда 400 мс, это совершенно случайно. Из документов, которые я прочитал, «Выход из аудита» - это полная продолжительность всех трех шагов. Но шаги 1-3 были очень быстрыми, как 0-5 мс. Почему продолжительность "Audit Logout" так долго?

1 Ответ

6 голосов
/ 16 марта 2012

Я "имею дело" с подобной проблемой прямо сейчас и наткнулся на этот пост: http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/84ecfe9e-ff0e-4fc5-962b-cffdcbc619ee

Может быть, это (из вышеупомянутого поста) решение:

"В моем анализе обнаружена одна ошибка. Когда соединение извлекается из пула, серверу отправляется sp_reset_connection. Этот сброс вызывает Audit_logout с последующим Audit_login. Следующий Audit_logout не происходит до следующеговремя, когда соединение извлекается из пула… поэтому длинные интервалы, которые я наблюдаю, включают время, в течение которого приложение обрабатывает результаты запроса, освобождает соединение с пулом соединений, делает все что угодно и, наконец, вытягивает соединение из пулачтобы начать следующую транзакцию. "

...