首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定变量期间的Oracle UCP性能问题

绑定变量期间的Oracle UCP性能问题
EN

Stack Overflow用户
提问于 2018-02-07 16:11:21
回答 1查看 551关注 0票数 3

最近,我们更改了连接池以迁移到Oracle UCP。在迁移之前,我们使用了与oracle jdbc驱动程序(ojdbc6.jar)嵌入的池。

我们的问题是绑定变量阶段的运行时间。对于UCP,绑定变量的时间比旧的池要长,因为它使用了内省。

在正常情况下(select或update),绑定变量的时间与执行sql查询的时间相比非常短。但是,当我们使用PreparedStatement进行批处理执行时,我们会执行很多绑定变量,有时通过调用pst.excuteBatch()来运行查询。

举个例子,这是一个小程序,用来说明两个池的分离时间。

代码语言:javascript
复制
PreparedStatement ppst = connection.prepareStatement(INSERT_SQL);

...

private long setParam(PreparedStatement prepStmt) throws SQLException {
    long d = 0;
    for (long i = 1; i <= 750 000; i++) {
        int index = 1;
        prepStmt.setString(index++, "1470");
        prepStmt.setTimestamp(index++, new Timestamp(System.currentTimeMillis()));
        prepStmt.setInt(index++, 1);
        prepStmt.setObject(index++, String.valueOf(i));
        prepStmt.addBatch();
    }
    prepStmt.clearBatch();
    return d;
}

在嵌入ojdbc6驱动程序的旧池中,经过的时间是:7.653秒.

对于UCP池,经过的时间是:10.92秒.

在这个例子中,我们有75万个带有4个绑定变量的迭代。在我们的生产批次中,我们有5万次迭代。因此绑定变量所需的时间很长,并且我们的批处理时间已经增长。

技术信息

旧池: ojdbc6.jar (11.2.0.3.0)

新池: ojdbc6.jar (11.2.0.3.0) + ucp.jar (11.2.0.4.0)

我们分析了绑定变量阶段:

  • 使用新的池UCP,每个变量都使用java关系api绑定,这是比较慢的。
  • 对于旧的池,每个变量都直接与变量类型的对应方法绑定。

如何提高UCP池的绑定变量的性能?您知道如何禁用java反射api的使用吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-22 10:15:54

UCP中的代理机制在12.2.0.1中得到了改进,以使用动态代理,并将提供比11.2.0.4中使用的Java代理更好的性能。您需要将ucp和jdbc (都必须在同一个版本上)升级到12.2.0.1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48668363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档