мы запускаем java6/hibernate/c3p0/postgresql stack. Наш драйвер JDBC - 8.4-701.jdbc3
У меня есть несколько вопросов о подготовленных заявлениях. я прочитал отличный документ о Подготовленные отчеты
Но у меня все еще возникает вопрос, как настроить c3p0 с помощью postgresql.
В настоящий момент мы имеем
c3p0.maxStatements = 0
c3p0.maxStatementsPerConnection = 0
В моем понимании подготовленные утверждения и объединение команд - это две разные вещи:
В нашем спящем стеке используются подготовленные операторы. Postgresql кэширует план выполнения. В следующий раз, когда используется тот же оператор, postgresql повторно использует план выполнения. Это позволяет сэкономить операторы планирования времени внутри БД.
Кроме того, c3p0 может кэшировать java-экземпляры "java.sql.PreparedStatement"
что означает, что он кэширует объект java. Поэтому при использовании
c3p0.maxStatementsPerConnection = 100 кэширует не более 100 различных
объекты. Это экономит время на создании объектов, но это не имеет ничего общего с
базу данных postgresql и ее подготовленные заявления.
Right?
Поскольку мы используем около 100 различных операторов, я бы установил c3p0.maxStatementsPerConnection = 100
Но документы c3p0 говорят в c3p0 известных недостатках
Накладные расходы для пула Statement слишком высоко. Для водителей, которые не выполнить значительную предварительную обработку PreparedStatements, объединение накладные расходы перевешивают любые сбережения. Таким образом, пул команд отключен по умолчанию. Если ваш водитель preprocess PreparedStatements, особенно если это делается через IPC с РСУБД, вы, вероятно, увидите значительное увеличение производительности включение пула приложений. (Сделай это путем установки свойства конфигурации maxStatements или maxStatementsPerConnection для значения больше нуля.).
Итак: разумно ли активировать maxStatementsPerConnection с c3p0 и Postgresql? Есть ли реальные выгоды, активизирующие его?
С уважением Janning