Параметры конфигурации источника данных

Когда выполняется операция над базой данных, сервер создает соединение связанного источника данных с этой БД. После использования это соединение возвращается в пул соединений. Физическое соединение с сервером базы данных не разрывается, если только оно не становится устаревшим или не закрывается специально. Это называется пуллингом соединений с источником данных и является рекомендованным методом работы, повышающим производительность и пропускную способность системы. Источники данных RDBMS (РСУБД) на сервере используют пул соединений Tomcat JDBC (org.apache.tomcat.jdbc.pool). Это является общей конфигурацией для всех компонентов, которые взаимодействуют с БД для сохранения различных данных, таких как реестр, управление пользователями (если оно настроено через JDBC хранилище пользователей) и т. д.

Вы можете настроить различные параметры пула соединений с источником данных, такие как продолжительность хранения соединения в пуле в секции Параметры конфигурации источника данных, которая появляется в консоли управления при создании источника данных.

Каждый из параметров описывается ниже:

Значения по умолчанию для этих параметров могут быть не оптимальными для конкретных аппаратных/серверных конфигураций в вашей среде. Рекомендуется провести нагрузочные тесты, чтобы настроить их в соответствии с заданными требованиями. См. раздел Настройка параметров конфигурации источника данных для получения информации о том, как выбрать наилучшие значения для этих параметров.

Имя параметра Описание
Изоляция транзакций Состояние изоляции транзакций по умолчанию для соединений, создаваемых этим пулом.
  • TRANSACTION_UNKNOWN
  • TRANSACTION_NONE
  • TRANSACTION_READ_COMMITTED
  • TRANSACTION_READ_UNCOMMITTED
  • TRANSACTION_REPEATABLE_READ
  • TRANSACTION_SERIALIZABLE
Начальный размер (int)

Начальное количество соединений, создаваемых при запуске пула. Значение по умолчанию 0.
Макс. время ожидания (int)

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

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

Минимальное количество соединений, которые могут оставаться неактивными в пуле, без создания дополнительных соединений. Пул соединений может уменьшиться ниже этого значения, если запросы проверки завершаются неудачей. Значение по умолчанию 0. (см. также testWhileIdle)
Макс. количество соединений (int)

Максимальное количество соединений, которые могут оставаться неактивными в пуле, без освобождения излишних соединений. Значение по умолчанию 8. Установите отрицательное значение для получения неограниченного числа. Неактивные соединения проверяются периодически (если включена проверка), и соединения, которые были неактивными дольше, чем значение minEvictableIdleTimeMillis, будут освобождены. (см. также testWhileIdle)
Макс. время ожидания подключений (int)

Максимальное количество миллисекунд, которое пул ожидает (когда нет доступных соединений) для возвращения соединения, прежде чем выбросить исключение. Значение по умолчанию 30000 (30 секунд).
Запрос проверки (String)

SQL-запрос, используемый для проверки соединений из пула перед их возвратом вызывающей стороне. Если задана соответствующая настройка, запрос не обязан возвращать данные, но он не должен вызывать исключение SQLException. Значение по умолчанию null. Примеры других значений: SELECT 1 (MySQL), SELECT 1 FROM DUAL (Oracle), SELECT 1 (MS SQL Server).
[validationQueryTimeout] (int)

Таймаут в секундах до того, как запрос проверки соединения завершится неудачно. Реализуется путем вызова java.sql.Statement.setQueryTimeout(seconds) для оператора, выполняющего validationQuery. Сам пул не завершает запрос по таймауту – это является задачей драйвера JDBC, что обеспечивает соблюдение времени ожидания запросов. Значение, меньшее или равное нулю, отключает эту функцию. Значение по умолчанию: -1.
Тестировать после выхода из метода (boolean)

Используется для указания того, будут ли объекты проверяться перед их возвращением в пул.

Примечание: для того чтобы значение true имело эффект, параметр validationQuery должен быть непустой строкой. Значение по умолчанию: false.
Проверка объектов в пуле (boolean)

Используется для указания того, будут ли объекты проверяться перед их заимствованием из пула. Если объект не проходит проверку, он будет удален из пула, и будет выполнена попытка взять другой объект.

Примечание: для того чтобы значение true имело эффект, параметр validationQuery должен быть непустой строкой. Для более эффективной проверки используйте параметр validationInterval. Значение по умолчанию: false.
Проверка неактивных объектов в пуле (boolean)

Указывает, будут ли объекты проверяться валидатором неактивных объектов (если он существует). Если объект не проходит проверку, он будет удален из пула.

Примечание: для того, чтобы значение true имело эффект, параметр validationQuery должен быть установлен в ненулевую строку. Значение по умолчанию: false. Этот параметр устанавливается, чтобы мог выполняться поток очистки/тестирования пула (см. также timeBetweenEvictionRunsMillis).
Интервал времени перезапуска бездействующего соединения (int)

Количество миллисекунд, на которое поток проверки/очистки неактивных соединений будет «засыпать» между запусками. Это значение не должно быть меньше 1 секунды. Оно определяет, как часто выполняется проверка бездействующих и «заброшенных» соединений, а также частоту валидации бездействующих соединения. Значение по умолчанию: 5000 (5 секунд).
Количество тестов бездействующих соединений (int)

Количество объектов, которые будут проверяться во время каждого запуска потока удаления бездействующих объектов.
Мин. время простоя соединения до отключения (int)

Минимальное время, которое объект может находиться в неактивном состоянии в пуле, прежде чем он станет кандидатом на удаление. Значение по умолчанию 60000 (60 секунд).
Удалить бездействующие соединения (boolean)

Флаг для удаления бездействующих соединений, если они превышают значение removeAbandonedTimeout. Если установлен в true, соединение считается бездействующим и может быть удалено, если оно использовалось дольше, чем заданное время removeAbandonedTimeout. Установка этого значения в true может восстановить те соединения с базой данных, которые приложение не может закрыть. См. также logAbandoned. Значение по умолчанию false.
Тайм-аут на бездействующие соединения (int)

Тайм-аут в секундах, прежде чем «заброшенное» (неиспользуемое) соединение может быть удалено. Значение по умолчанию 60 (60 секунд). Это значение должно быть установлено с расчетом на самый долгий запрос, который может выполняться в ваших приложениях.
Log Abandoned (boolean)

Флаг для ведения журнала трассировки стека для кода приложения, которое перестало использовать соединение. Ведение журнала бездействующих соединений добавляет нагрузку для каждого соединения, поскольку требуется генерировать трассировку стека. Значение по умолчанию false.
Автоматическая фиксация (boolean)

Состояние автокоммита по умолчанию для соединений, созданных этим пулом. Если не установлено, по умолчанию используется настройка JDBC драйвера (если не установлено, то метод setAutoCommit не будет вызван).
По умолчанию только для чтения (boolean)

Состояние по умолчанию «только для чтения» для соединений, созданных этим пулом. Если не установлено, метод setReadOnly не будет вызван. (Некоторые драйверы, например Informix, не поддерживают режим только для чтения).
Каталог по умолчанию (String)

Каталог по умолчанию для соединений, созданных этим пулом.
Имя класса валидатора (String)

Имя класса, который реализует интерфейс org.apache.tomcat.jdbc.pool.Validator и предоставляет конструктор без аргументов (может быть неявным). Если указано, этот класс будет использоваться для создания экземпляра Validator, который при проверке соединений будет использоваться вместо запроса на валидацию. Значение по умолчанию null. Пример: com.mycompany.project.SimpleValidator.
Свойства соединения (String)

Свойства соединения, которые при установлении новых соединений будут переданы JDBC-драйверу. Формат строки должен быть следующим: [propertyName=property;]*.

Примечание: свойства "user" и "password" передаются явно, поэтому их сюда включать не нужно. Значение по умолчанию null.
Инициализация SQL Задает возможность выполнить SQL-запрос ровно один раз – при создании соединения.
Перехватчики JDBC Гибкие и подключаемые перехватчики для создания любых кастомизаций вокруг пула, выполнения запросов и обработки результатов.
Интервал проверки (long)

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

Регистрировать ли пул с использованием JMX (Java Management Extensions). Значение по умолчанию true.
Вызов подключений согласно (boolean)

Установите в true, если вы хотите, чтобы вызовы getConnection обрабатывались в реальном порядке FIFO (первым пришел – первым ушел). Использует реализацию org.apache.tomcat.jdbc.pool.FairBlockingQueue для списка неактивных соединений. Значение по умолчанию true. Этот флаг необходим, если вы хотите использовать асинхронное извлечение соединений. Установка этого флага гарантирует, что потоки получают соединения именно в том порядке, в котором они были запрошены.

При проведении тестов производительности существует значительная разница в том, как реализованы блокировки и ожидание блокировок. Когда fairQueue=true, процесс принятия решений зависит от операционной системы, на которой работает система. Если система работает на Linux (property os.name=Linux), то для отключения этого поведения, специфичного для Linux, и продолжения использования реальной очереди, добавьте свойство org.apache.tomcat.jdbc.pool.FairBlockingQueue.ignoreOS=true в параметры системы (до загрузки классов пула соединений).
Макс.процент соединений, не закрытых по тайм-ауту (int)

Соединения, которые были «заброшены» (превысили тайм-аут), не будут закрыты, пока количество используемых соединений не превышает процент, установленный с помощью этого параметра abandonWhenPercentageFull. Значение должно быть в пределах от 0 до 100. Значение по умолчанию 0. Это означает, что соединения становятся доступными для закрытия сразу после достижения значения, заданного в removeAbandonedTimeout.
Время поддержания соединения (long)

Время в миллисекундах, в течение которого будет сохраняться это соединение. Когда соединение возвращается в пул, пул проверяет, превысило ли время с момента установления соединения то, которое заданное в maxAge. Если условие выполняется, соединение закроется, а не вернется в пул. Значение по умолчанию 0. Это означает, что соединения остаются открытыми и проверка возраста соединения при возвращении в пул не выполняется.
Использовать String.equals при сохранении имен (boolean)

Установите в true, если хотите, чтобы для сравнения имен методов класс ProxyConnection использовал метод String.equals, и установите в false, если хотите использовать оператор ==. Это свойство не применяется к добавленным перехватчикам, так как они настраиваются индивидуально. Значение по умолчанию true.
Регистрация бездействующих соединений (int)

Тайм-аут в секундах. Значение по умолчанию 0. Это аналогично значению removeAbandonedTimeout, но вместо того, чтобы считать соединение «заброшенным» и, возможно, закрыть его, если включено свойство logAbandoned система просто выводит предупреждение. Если это значение равно или меньше 0, проверка на «подозрительность» не выполняется. Проверка подозрительных соединений происходит только в том случае, если тайм-аут больше 0 и соединение не было заброшено, или же если проверка на заброшенность отключена. Если соединение подозрительное, то выводится предупреждающее сообщение и отправляется уведомление JMX (один раз).
Тайм-аут запроса проверки
Разрешено альтернативное имя пользователя (boolean)

По умолчанию пул jdbc-pool будет игнорировать вызов DataSource.getConnection(username, password) и просто вернет ранее размещенное соединение с глобально настроенными свойствами username и password – ради производительности.

Тем не менее, пул можно настроить для использования различных учетных данных каждый раз, когда запрашивается соединение. Для включения этой функциональности, определенной в вызове DataSource.getConnection(username, password), необходимо установить свойство alternateUsernameAllowed в true. Если вы запросите соединение с учетными данными user1/password1, а соединение ранее было установлено с другими учетными данными (например, user2/password2), то соединение будет закрыто и вновь открыто – уже с запрашиваемыми учетными данными. Таким образом, размер пула продолжит управляться на глобальном уровне, а не на уровне каждой схемы. Значение по умолчанию false.

См. также http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html и руководство по настройке DBCP http://commons.apache.org/proper/commons-dbcp/configuration.html.