Пул соединений SQL и вход в систему/выход из системы

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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