я должен активировать пул операторов c3p0?

мы используем стек java6 / hibernate / c3p0 / postgresql. Наш драйвер JDBC 8.4-701.jdbc3

У меня есть несколько вопросов о подготовленных заявлениях. Я прочитал отличный документ оПодготовленные заявления

Но у меня все еще есть вопрос, как настроить c3p0 с postgresql.

На данный момент у нас есть

 c3p0.maxStatements = 0
 c3p0.maxStatementsPerConnection  =   0

В моем понимании подготовленные операторы и объединение операторов - это две разные вещи:

Наш стек Hibernate использует подготовленные операторы. Postgresql кэширует план выполнения. В следующий раз, когда используется тот же оператор, postgresql повторно использует план выполнения. Это экономит время планирования заявлений внутри БД.

Кроме того, c3p0 может кэшировать экземпляры Java «java.sql.PreparedStatement», что означает, что он кэширует объект Java. Так что при использовании
c3p0.maxStatementsPerConnection = 100 кэширует не более 100 различных
объекты. Это экономит время на создание объектов, но это не имеет никакого отношения к базе данных postgresql и ее подготовленным операторам.

Правильно?

Поскольку мы используем около 100 различных операторов, я бы установил c3p0.maxStatementsPerConnection = 100

Но документы C3P0 говорят вc3p0 известные недостатки

Затраты на пул операторов слишком велики. Для драйверов, которые не выполняют значительную предварительную обработку PreparedStatements, накладные расходы пула перевешивают любую экономию. Таким образом, пул операторов отключен по умолчанию. Если ваш драйвер выполняет предварительную обработку PreparedStatements, особенно если это происходит через IPC с СУБД, вы, вероятно, увидите значительное повышение производительности, если включить пул операторов. (Сделайте это, установив для свойства конфигурации maxStatements или maxStatementsPerConnection значение больше нуля.).

Итак: Разумно ли активировать maxStatementsPerConnection с помощью c3p0 и Postgresql? Есть ли реальная польза от его активации?

С уважением, Яннинг

Ответы на вопрос(2)

Ваш ответ на вопрос