Поддержка подготовленных запросов
Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.
Подготовленные запросы (prepared statements) — это механизм оптимизации запросов в системах управления базами данных (СУБД), используемый для повышения производительности и безопасности выполнения SQL-запросов.
Для работы кластера высокой доступности Pangolin на данный момент рекомендована конфигурация с настройкой менеджера пула соединений Pangolin Pooler в транзакционном режиме.
Необходимость использования транзакционного режима обусловлена двумя факторами:
- установкой большого количества подключений со стороны клиентских приложений;
- ограниченностью количества процессов Pangolin, обслуживающих подключения клиентских приложений. Такое ограничение связано с особенностями архитектуры Pangolin.
Исходя из указанного, менеджер пула соединений кластера высокой доступности эксплуатируется в транзакционном режиме, при котором формируются разделенные пулы соединений:
- со стороны клиентских приложений к менеджеру пула соединений;
- со стороны менеджера пула соединений к Pangolin.
А также происходит выделение соединений к Pangolin из пула на время выполнения транзакции, инициированной со стороны клиентского приложения.
Изменения настроек для сессионных переменных, подготовленные запросы (prepared statements), планы запросов и значения связанных переменных для подготовленных запросов сохраняются в контексте процесса, обслуживающего клиентское подключение на Pangolin, которое вызвало установку значения сессионной переменной или подготовку запроса. Подключение не переинициализируется на менеджера пула соединений при смене клиента, использующего данное подключение. Cостояние сохраняется даже при переключении клиентских подключений на одно и то же физическое соединение с сервером.
Pangolin Pooler предоставляет возможность выполнить сброс значений сессионных настроек при передаче соединения с Pangolin другому соединению клиентского приложения, но это приводит к падению производительности и не обеспечивает решения проблемы подготовленных запросов.
Указанное выше делает невозможным использование подготовленных запросов (например, используемых драйвером jdbc) через менеджер пула соединений в транзакционном режиме и приводит к необходимости отключения использования подготовленных запросов на стороне клиентских приложений, использующих jdbc. Это способствует снижению производительности выполнения запросов, которые могли бы выполняться как подготовленные запросы.
Также возможно возникновение коллизий, связанных с изменением драйверами режима транзакций на стороне клиентских приложений read-only/read-write, в соответствии с логикой работы драйверов, и несоответствием ожидаемого режима транзакций фактически установленному в контексте процесса Pangolin, что приводит к ошибкам при выполнении запросов к Pangolin.
Подробнее с данной функциональностью можно ознакомиться в одноименном разделе блока «Функциональные возможности».