Пул соединений SQL и аудит Вход / Выход - PullRequest
24 голосов
/ 11 ноября 2008

Когда я профилирую свое приложение с помощью SQL Server Profiler, я вижу много сообщений Audit Login и Audit Logout для соединений с одной и той же базой данных. Мне интересно, это говорит о том, что что-то не так с моим пулом подключений? Причина, по которой я спрашиваю, состоит в том, что я нашел это в документации MSDN относительно пула соединений:

События входа и выхода не будут поднят на сервере при подключении извлекается или возвращается пул подключений. Это потому что соединение фактически не закрывается, когда он возвращается в пул соединений. Для получения дополнительной информации см. Audit Login Класс события и событие выхода из аудита Класс в электронной документации по SQL Server.

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

Кроме того, есть ли у кого-нибудь советы, как определить, насколько эффективен пул соединений для данного SQL-сервера? У меня много баз данных на одном сервере, и я знаю, что это может оказать огромное влияние, но мне интересно, есть ли простой способ получить показатели эффективности пула соединений? Заранее спасибо!

Ответы [ 2 ]

34 голосов
/ 22 января 2009

Хотя в статье MSDN говорится, что событие будет вызываться только для неиспользуемых соединений, документация по SQL Server противоречит этому утверждению:

"Класс событий Audit Login указывает, что пользователь успешно вошел в Microsoft SQL Server. События в этом классе инициируются новыми соединениями или соединениями, которые повторно используются из пула соединений."

Лучший способ измерить эффективность объединения - это собрать время, проведенное с подключением и без объединения. При использовании пула вы должны увидеть, что первое соединение медленное, а последующие - очень быстрое. Без объединения каждое соединение займет много времени.

Если вы хотите отслеживать событие Audit Logon, вы можете использовать столбец данных EventSubClass, чтобы указать, является ли вход в систему повторно используемым соединением или новым соединением. Значение будет 1 для реального соединения и 2 для повторно используемого соединения из pool.application.

14 голосов
/ 11 ноября 2008

Помните, что соединения объединяются в одну строку подключения. Если у вас много баз данных и вы подключаетесь с использованием множества строк подключения, ваше приложение создаст новое подключение, если не существует правильной строки подключения. Затем он объединит это соединение и, если пул заполнится, увеличит существующее соединение. По умолчанию Максимальный размер пула составляет 100 соединений, поэтому, если вы регулярно просматриваете более 100 баз данных, вы будете закрывать и открывать соединения все время.

Это не идеально, но вы можете решить проблему, всегда подключаясь к одной базе данных (одной строке подключения), а затем переключая контекст БД «USE [DBName]». Есть недостатки:

  • Вы теряете возможность указывать пользователя / проход для строки подключения (пользователю вашего приложения требуется разрешение на все базы данных).
  • Ваш SQL становится более сложным (особенно если вы используете готовый ORM или хранимые процедуры).

Вы можете поэкспериментировать с увеличением максимального размера пула, если количество вашей базы данных невелико. В противном случае, если некоторые базы данных используются часто, а другие - нет, вы можете отключить объединение редких баз данных. Оба элемента настраиваются с помощью строки подключения .

Что касается метрик, то мониторинг событий входа в систему и выхода из системы на SQL Server является хорошим началом. Если ваше приложение объединяется в пул, вы не должны видеть их много.

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