![whatisconnectionpooling | Embarcadero RAD Studio Delphi C++Builder Blogs what is connection pooling](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2022/07/what-is-connection-pooling-1205528.jpeg?resize=1140%2C400&ssl=1)
Table of Contents
Пул соединений Значение
Пул соединений — это кэш соединений с базой данных, поддерживаемый таким образом, чтобы соединения можно было повторно использовать, когда потребуются будущие запросы к базе данных. Пулы соединений используются для повышения производительности выполнения команд в базе данных. Открытие и поддержание соединения с базой данных для каждого пользователя, особенно запросы к динамическому приложению, управляемому базой данных, требует больших затрат и траты ресурсов. В пуле соединений после создания соединения оно помещается в пул и используется снова, так что не нужно устанавливать новое соединение.
Вы также можете определить максимальное количество подключений, которые будет создавать пул, и это может быть очень интересно для уменьшения количества необходимых лицензий базы данных. В таком случае, когда пул достигает предела и поступает новый запрос, этот запрос не будет обработан, если свободное соединение не будет доступно до определенного ранее определенного времени ожидания.
Ключом к созданию пула соединений с ограниченным числом соединений с базой данных является определение идеального числа для этого пула на основе конечного числа пользователей и архитектуры приложения. Подробнее об этом в образце ниже.
Механизм объединения соединений FireDAC
Механизм пула соединений от FireDAC довольно прост в использовании и может быть активирован путем установки всего одного дополнительного свойства соединения из вашего соединения (Pooled=True).
Конечно, функция пула отлично работает в многопоточных приложениях, где несколько коротких задач выполняются одновременно (или почти), и каждая из этих задач требует установления соединения. При использовании функции опроса соединение будет уже установлено и ожидает задачи, что приведет к гораздо более быстрому времени обработки и меньшему потреблению ресурсов.
Для расширенных сценариев, помимо параметра «Объединенный», можно учитывать еще три параметра:
Параметр | Параметр | Пример |
---|---|---|
POOL_CleanupTimeout | Время (мс), по истечении которого FireDAC удалит соединения, которые не использовались дольше, чем время POOL_ExpireTimeout. Значение по умолчанию — 30 000 мс (30 секунд). | 3600000 |
POOL_ExpireTimeout | Время (мс), по истечении которого неактивное соединение может быть удалено из пула и уничтожено. Значение по умолчанию — 90000 мс (90 с). | 600000 |
POOL_MaximumItems | Максимальное количество соединений в пуле. Когда приложению требуется больше подключений, возникает исключение. Значение по умолчанию — 50. | 100 |
FireDAC позволяет использовать «постоянные» соединения (хранящиеся в файле .ini FireDAC), «частные» соединения (доступные в памяти для одного приложения) и «временные» (не сохраняемые, не именуемые и не управляемые FDManager). Вы можете узнать больше о том, как определить и установить соединение (с пулом или без него), следуя приведенной ниже документации:
- https://docwiki.embarcadero.com/RADStudio/en/Multithreading_(FireDAC)
- https://docwiki.embarcadero.com/RADStudio/en/Defining_Connection_(FireDAC)
Пул соединений с сервером RAD (EMS)
Для любого серьезного серверного приложения, включая RAD Server, практически обязательно иметь какой-либо механизм пула по мере роста числа обращений к вашему приложению. Наш образец продемонстрирует, что использование «частного» соединения, определенного через FDManager. Конечно, вы также можете повторно использовать соединения, уже определенные в файле .ini FireDAC, или даже загрузить файл .ini через FDManager и изменить его, добавив параметры пула соединений, которые специфичны для вашего серверного приложения, но не так полезны в настольное приложение.
Наше демонстрационное приложение было создано с помощью мастера RAD Server ( https://docwiki.embarcadero.com/RADStudio/en/Creating_a_RAD_Server_Package ) и с использованием недавно добавленного ресурса EMSDataSetResource ( https://docwiki.embarcadero.com/RADStudio/en/ Using_RAD_Server_Components и https://blogs.embarcadero.com/using-emsdatasetresource-component-with-rad-server/ ), но то же самое относится к явно определенным конечным точкам RAD Server.
Важно отметить, что для каждого экземпляра приложения может существовать только один экземпляр FDManager , поэтому вы заметите, что FDManager создается в разделе инициализации нашего ресурса EMS, например:
Проведение стресс-теста с нашим демонстрационным проектом
На видео ниже показано, как механизм пулинга тестируется с помощью JMeter с общей нагрузкой 100 пользователей:
В качестве дополнительного совета: если ваше приложение RAD Server состоит из нескольких пакетов, вы все равно можете использовать механизм объединения. Все, что вам нужно сделать, это создать ресурс RAD Server, предназначенный только для определения конфигурации пула соединений с помощью FDManager, и убедиться, что вы загружаете этот ресурс первым в своей среде развертывания.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition