Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При подключении к пулу можно значительно повысить производительность и масштабируемость приложения. В этой статье обсуждаются пулы подключений для поставщиков данных платформы .NET Framework для OLE DB, ODBC и Oracle.
OleDb
Поставщик данных .NET Framework для OLE DB автоматически создает пулы соединений, используя пулы сеанса OLE DB. Аргументы строки соединения могут использоваться для включения или отключения служб OLE DB, включая службы пулов. Например, следующая строка соединения отключает пул соединений OLE DB и автоматическое включение транзакций.
Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;
Внимание
Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Если вы подключаетесь к Azure SQL, Управляемые удостоверения для ресурсов Azure — это рекомендуемый метод проверки подлинности.
Мы рекомендуем всегда закрывать или удалять подключение после завершения работы с ним, чтобы вернуть подключение к пулу. Подключения, не закрытые явным образом, могут не возвращаться в пул. Например, подключение, вышедшее за рамки области видимости, но не закрытое явно, будет возвращено в пул подключений только в случае, если достигнут максимальный размер пула и подключение всё ещё действительно.
Дополнительные сведения о сеансе или пуле ресурсов OLE DB, а также об отключении пулирования путем изменения параметров по умолчанию службы поставщика OLE DB см. в Руководстве программиста OLE DB.
ODBC (Интерфейс открытой базы данных)
Пул подключений для поставщика данных платформы .NET Framework для ODBC управляется менеджером драйверов ODBC, используемым для подключения, и не влияет на поставщика данных платформы .NET Framework для ODBC.
Чтобы включить или отключить пул подключений, откройте Администратор источников данных ODBC в папке Административные инструменты панели управления. Вкладка "Пул подключений" позволяет указать параметры пула подключений для каждого установленного драйвера ODBC. Изменения в пуле подключений для определенного драйвера ODBC влияют на все приложения, использующие этот драйвер ODBC.
ОраклКлиент
Поставщик данных .NET Framework для Oracle автоматически поддерживает пулы соединений для клиентского приложения ADO.NET. Вы также можете предоставить несколько модификаторов строк подключения для управления поведением пула соединений (см. статью "Управление пулом соединений с ключевыми словами строки подключения", далее в этой статье).
Создание и назначение пулов
При открытии соединения создается пул соединений на основе существующего алгоритма сопоставления, связывающего этот пул со строкой соединения. Каждый пул соединений связывается с отдельной строкой соединения. При открытии нового соединения, если строка соединения не соответствует в точности существующему пулу, создается новый пул.
После создания пулы соединений не уничтожаются, пока не завершится активный процесс. На поддержку неактивных или пустых пулов затрачивается очень мало системных ресурсов.
Добавление соединения
Пул соединений создается для каждой уникальной строки соединения. При создании пула создается множество объектов соединения, которые добавляются в пул для удовлетворения требования к минимальному размеру пула. Соединения добавляются в пул по мере надобности, пока не будет достигнут максимальный размер пула.
Когда запрашивается объект OracleConnection, он извлекается из пула при наличии подходящего соединения. Соединение считается подходящим, если оно в настоящий момент не используется, имеет соответствующий контекст транзакции или не связано с каким-либо контекстом транзакции, а также имеет допустимую ссылку на сервер.
Если достигнут максимальный размер пула, а пригодные соединения недоступны, запрос помещается в очередь. Средство управления пулом соединений обрабатывает эти запросы, перераспределяя соединения по мере их освобождения. Соединения освобождаются обратно в пул при закрытии или удалении.
Удаление подключения
Пул подключений удаляет соединение из пула, если оно простаивает в течение длительного времени, или если пул обнаруживает, что соединение с сервером было разорвано. Это можно обнаружить только после попытки взаимодействия с сервером. При обнаружении соединения, которое больше не имеет связи с сервером, оно помечается как недействительное. Средство управления пулом соединений периодически просматривает пулы соединений в поиске объектов, освобожденных в пул и маркированных как недопустимые. Эти соединения удаляются навсегда.
Если существует соединение с пропавшим сервером, его можно извлечь из пула, если организатор пулов соединений не обнаружил разрыва соединения и не отметил его как недействительное. Если это происходит, вызывается исключение. Однако для того чтобы вернуть соединение обратно в пул, его необходимо закрыть.
Не вызывайте Close или Dispose на Connection, DataReader или любом другом управляемом объекте в методе Finalize вашего класса. В финализаторе следует только освобождать неуправляемые ресурсы, которыми ваш класс владеет непосредственно. Если класс не владеет какими-либо неуправляемыми ресурсами, не включайте в его определение метод Finalize. Дополнительные сведения см. в статье Сборка мусора.
Поддержка транзакций
Соединения выбираются из пула и назначаются в зависимости от контекста транзакции. Контексты запрашивающего потока и назначенного соединения должны совпадать. Таким образом, каждый пул соединений разделен на соединения без связанного контекста транзакции и в подразделения N , которые содержат соединения с определенным контекстом транзакции.
При закрытии соединения оно освобождается обратно в пул и в соответствующий подраздел в зависимости от его контекста транзакции. Поэтому можно закрыть соединение без создания ошибки, даже если распределенная транзакция все еще находится в ожидании. Это позволяет позднее зафиксировать или прервать распределенную транзакцию.
Управляйте пулами подключений с помощью ключевых слов строк подключений
Свойство ConnectionString объекта OracleConnection поддерживает пары «ключ-значение» из строки соединения, с помощью которых можно изменять логику организации пулов соединений.
В следующей таблице приводятся значения ConnectionString, которые можно использовать для настройки пулов соединений.
| Имя. | По умолчанию. | Описание |
|---|---|---|
Connection Lifetime |
0 | Если соединение возвращается в пул, время его создания сравнивается с текущим временем и соединение уничтожается, если этот промежуток времени (в секундах) превышает значение, заданное параметром Connection Lifetime. Эта возможность полезна в кластеризованных конфигурациях для принудительной балансировки нагрузки между выполняющимся сервером и сервером, только что переведенным в оперативный режим.Значение ноль (0) означает максимальное время ожидания для соединений в пуле. |
Enlist |
истина | При значении true средство управления пулом автоматически прикрепляет соединение к текущему контексту транзакции потока создания, если контекст транзакции существует. |
Max Pool Size |
100 | Максимальное разрешенное количество соединений в пуле. |
Min Pool Size |
0 | Минимальное число поддерживаемых соединений в пуле. |
Pooling |
истина | При значении true соединение извлекается из соответствующего пула или при необходимости создается и добавляется в соответствующий пул. |