Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пул подключений позволяет приложению использовать подключение из пула подключений, которые не нужно повторно устанавливать для каждого использования. После создания и размещения соединения в пуле приложение может повторно использовать это подключение, не выполняя полный процесс подключения.
Использование подключения в пуле может привести к значительному повышению производительности, так как приложения могут сэкономить затраты, связанные с подключением. Это может быть особенно важно для приложений среднего уровня, которые подключаются через сеть или для приложений, которые многократно подключаются и отключают, например интернет-приложения.
Помимо повышения производительности архитектура пула подключений позволяет среде и связанным с ним подключениям использоваться несколькими компонентами в одном процессе. Это означает, что автономные компоненты в одном процессе могут взаимодействовать друг с другом, не зная друг друга. Подключение в пуле соединений может многократно использоваться несколькими компонентами.
Замечание
Пул подключений может использоваться приложением ODBC, демонстрирующим поведение версии ODBC 2.x, если приложение может вызвать SQLSetEnvAttr. При использовании пула подключений приложение не должно выполнять инструкции SQL, которые изменяют базу данных или контекст базы данных, например изменение <имени базы данных, которая изменяет каталог>, используемый источником данных.
Драйвер ODBC должен быть полностью потокобезопасным, и подключения не должны иметь сходство потоков для поддержки пула подключений. Это означает, что драйвер может обрабатывать вызов любого потока в любое время и может подключаться к одному потоку, использовать подключение к другому потоку и отключать на третьем потоке.
Пул подключений поддерживается диспетчером драйверов. Подключения извлекаются из пула при вызове SQLConnect или SQLDriverConnect и возвращаются в пул при вызове SQLDisconnect приложения. Размер пула динамически увеличивается на основе запрошенных выделений ресурсов. Он уменьшается на основе времени ожидания бездействия: если соединение неактивно в течение определенного периода времени (оно не использовалось в соединении), оно удаляется из пула. Размер пула ограничен только ограничениями памяти и ограничениями на сервере.
Диспетчер драйверов определяет, следует ли использовать определенное соединение в пуле в соответствии с аргументами, переданными в SQLConnect или SQLDriverConnect, и в соответствии с атрибутами подключения, заданными после выделения подключения.
Когда диспетчер драйверов выполняет пуллинг подключений, он должен иметь возможность определить, работает ли подключение, прежде чем предоставить подключение. В противном случае диспетчер драйверов продолжает передавать неработающее подключение к приложению всякий раз, когда происходит преходящий сбой сети. В ODBC 3*.x* был определен новый атрибут подключения: SQL_ATTR_CONNECTION_DEAD. Это атрибут подключения только для чтения, который возвращает SQL_CD_TRUE или SQL_CD_FALSE. Значение SQL_CD_TRUE означает, что соединение было потеряно, а значение SQL_CD_FALSE означает, что подключение по-прежнему активно. (Драйверы, соответствующие более ранним версиям ODBC, также могут поддерживать этот атрибут.)
Драйвер должен эффективно реализовать этот параметр или будет ухудшать производительность пула подключений. В частности, вызов для получения этого атрибута подключения не должен вызывать круговую поездку на сервер. Вместо этого драйвер должен просто вернуть последнее известное состояние подключения. Подключение не работает, если последнее обращение к серверу завершилось неудачей, и работает, если последнее обращение завершилось успешно.
Замечания
Если подключение было потеряно (сообщается через SQL_ATTR_CONNECTION_DEAD), диспетчер драйверов ODBC уничтожит это подключение, вызвав SQLDisconnect в этом драйвере. Новые запросы на подключение могут не находить подходящих подключений для использования в пуле. В конечном итоге менеджер драйверов может создать новое подключение, если пул соединений пуст.
Чтобы использовать пул подключений, приложение выполняет следующие действия.
Включает пул подключений, вызывая SQLSetEnvAttr, чтобы установить для атрибута среды SQL_ATTR_CONNECTION_POOLING значение SQL_CP_ONE_PER_DRIVER или SQL_CP_ONE_PER_HENV. Этот вызов необходимо выполнить, прежде чем приложение выделяет общую среду, для которой необходимо включить пул подключений. Дескриптор среды в вызове SQLSetEnvAttr должен иметь значение NULL, что делает SQL_ATTR_CONNECTION_POOLING атрибут уровня процесса. Если для атрибута задано значение SQL_CP_ONE_PER_DRIVER, для каждого драйвера поддерживается один пул подключений. Если приложение работает со многими драйверами и несколькими средами, это может быть более эффективным, так как может потребоваться меньшее количество сравнений. Если задано значение SQL_CP_ONE_PER_HENV, для каждой среды поддерживается один пул подключений. Если приложение работает со многими средами и несколькими драйверами, это может оказаться более эффективным, так как может потребоваться меньше сравнений. Отключение пула подключений достигается путем установки SQL_ATTR_CONNECTION_POOLING в значение SQL_CP_OFF.
Выделяет среду путем вызова SQLAllocHandle с аргументом HandleType , равным SQL_HANDLE_ENV. Среда, выделенная этим вызовом, будет неявной общей средой, так как пул подключений включен. Однако используемая среда не определяется до тех пор, пока функция SQLAllocHandle с типом SQL_HANDLE_DBC не вызвана для этой среды.
Выделяет подключение путем вызова SQLAllocHandle с параметром InputHandle для SQL_HANDLE_DBC, а для обработчика среды, выделенного для пула подключений, задано значение InputHandle . Диспетчер драйверов пытается найти существующую среду, которая соответствует атрибутам среды, заданным приложением. Если такая среда не существует, создается среда со счетчиком ссылок, который поддерживается диспетчером драйверов, равным 1. Если найдена соответствующая общая среда, среда возвращается приложению, а ее количество ссылок увеличивается. (Фактическое подключение, используемое, не определяется диспетчером драйверов до вызова SQLConnect или SQLDriverConnect .)
Вызывает SQLConnect или SQLDriverConnect , чтобы сделать подключение. Диспетчер драйверов использует параметры подключения в вызове SQLConnect (или ключевые слова подключения в вызове SQLDriverConnect) и атрибуты подключения, заданные после выделения подключения, чтобы определить, какое соединение в пуле следует использовать.
Замечание
Как запрошенное подключение сопоставляется с пулом подключений, определяется атрибутом среды SQL_ATTR_CP_MATCH. Дополнительные сведения см. в разделе SQLSetEnvAttr.
Приложения ODBC, использующие пул подключений, должны вызывать CoInitializeEx во время инициализации приложений и CoUninitialize при закрытии приложения.
Вызывает SQLDisconnect при завершении подключения. Подключение возвращается в пул подключений и становится доступным для повторного использования.
Подробное обсуждение см. в разделе "Пул" в компонентах Доступа к данным Майкрософт.
Рекомендации по пулу подключений
Выполнение любого из следующих действий с помощью команды SQL (а не через API ODBC) может повлиять на состояние подключения и вызвать непредвиденные проблемы при активном пуле подключений:
Открытие подключения и изменение базы данных по умолчанию.
Использование инструкции SET для изменения любых настраиваемых параметров (включая SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE и DATEFORMAT).
Создание временных таблиц и хранимых процедур.
Если какие-либо из этих действий выполняются за пределами API ODBC, следующий пользователь, использующий подключение, автоматически наследует предыдущие параметры, таблицы или процедуры.
Замечание
Не ожидайте, что определенные параметры будут присутствовать в состоянии подключения. Всегда следует задать состояние подключения в приложении и убедиться, что приложение удаляет все неиспользуемые параметры пула подключений.
Driver-Aware пул подключений
Начиная с Windows 8 драйвер ODBC может использовать подключения в пуле более эффективно. Дополнительные сведения см. в разделе "Пул подключений с поддержкой драйверов".
См. также
Подключение к источнику данных или драйверу
Разработка драйвера ODBC
Пуллинг в компонентах Microsoft Data Access