Операция "Аудит выхода" SQL Server занимает много времени.
У нас есть хранимая процедура, которая в течение дня вызывается примерно 300 000 раз в день 15 пользователями. Я вылил каждую строку, и это примерно так же эффективно, как я могу ее получить.
Доступ к хранимой процедуре осуществляется через страницу ASP.NET 4.0 из устаревшего приложения VB6 в базовых условиях Winterms.
Когда я смотрю на файл трассировки SQL, я вижу следующее:
- exec sp_reset_connection (Использование пула соединений)
- Вход в систему аудита
- Выполнение хранимой процедуры
- Аудит выхода
На шаге 4 я вижу, что чтение и запись являются высокими, что имеет смысл, поскольку это накопление соединения, которое повторно используется в пуле.
Что касается меня, это то, как долго это требуется, иногда занимает занимает 50 мс, а иногда и 400 мс, это совершенно случайно. Из документов, которые я прочитал, "Audit Logout" - это полная продолжительность для всех трех шагов. Но шаги 1-3 были очень быстрыми, например, 0-5 мс. Почему длительность "Аудит входа" длится так долго?
Ответы
Ответ 1
Я сейчас "занимаюсь" аналогичной проблемой и наткнулся на это
post: http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/84ecfe9e-ff0e-4fc5-962b-cffdcbc619ee
Возможно, это (из вышеупомянутого поста) является решением:
"Одна ошибка в моем анализе была идентифицирована. Когда соединение вытащенный из пула, сервер отправляется sp_reset_connection. Этот reset вызывает audit_logout, за которым следует audit_login. следующий audit_logout не происходит до следующего подключения вытащили из бассейна... поэтому длинные промежутки, которые я вижу, включают время, в течение которого приложение обрабатывает результаты запроса, подключение к пулу соединений, делает что угодно и, наконец, тянет соединение обратно из пула, чтобы начать следующую транзакцию".