Отправляет email-рассылки с помощью сервиса Sendsay

Килограмм килобайтов

  Все выпуски  

Килограмм килобайтов


"Килограмм килобайтов"


Выпуск №3 Дата выхода:2007-01-30
Сайт рассылки: отсутствует

Здравствуйте, уважаемые подписчики.


Продолжим разбираться в хитросплетениях работы с СУБД Oracle на платформе .Net.

В прошлом выпуске я писал о параметре Pooling, входящем в строку соединения с базой. Если не установить этот параметр в false, то может появиться неприятная ошибка 'ResourcePool' is not supported on the current platform.
Давайте разберемся, что же это за параметр такой.

В MSDN написано, что если установить значение 'true' или 'yes' (а это значения по умолчанию), то объект, т.е. соединение с базой данных, будет извлечен из пула соединений или, если там его еще нет, будет создан и добавлено в пул.

Итак, мы столкнулись с интересным понятием - пул соединений с базой данных (Connection Pool).

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

Т.е. пул соединений можно сравнить с кэшем данных (часто используемые данные помещаются в память, скорость доступа к которой больше чем к основной).

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

За управление пулом соединений отвечает Driver Manager. Соединение извлекается из пула, когда приложение выполняет OracleConnection.Open() и возвращается обратно в пул, когда соединение закрывается OracleConnection.Close().

Размер пула изменяется динамически, если время, в течение которого, соединение не используется, превышает установленный TimeOut, то соединение автоматически удается из пула. Размеры пула ограничиваются только размерами памяти сервера.

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

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

Настроить параметры пула можно через свойство ConnectionString класса OracleConnection. Среди наиболее интересных можно отметить - Connection Lifetime (TimeOut соедиения) и Max Pool Size (максимальное количество соединений в пуле), ну и, конечно, Pooling (помещать соедиение в пул или нет).

В самых общих чертах я рассмотрел, что такое пул соединений с базой данных. А что касается ошибки, то это может быть следствием некорректных настроек как со стороны клиента .Net, так и на стороне Oracle (там тоже есть механизм "пулирования"), с эти предстоит еще разобраться.

* * *

Ведущий рассылки: Петрелевич Сергей

Вас есть вопрос? Cпрашивайте
Напишите, что Вы хотите видеть в рассылке. Мне важно знать Ваше мнение.


В избранное