使用 Druid 加速 oracle 的查询

问题

最近,公司的 web 应用,查询数据有些慢,数据库使用的是 oracle,连接池采用了阿里巴巴温少开源的 Druid 连接池,于是开始寻找解决办法。

方法

  1. 首先我们需要做的应该是通过 Druid 来监控我们应用中的慢 SQL,然后对其进行优化。从 SQL 监控和 SQL 防火墙中,我发现我们的 SQL 并没有多少慢 SQL。于是排除了慢 SQL 导致查询变慢的原因。
  2. Druid 中支持配置 PSCache。我们的 web 程序并没有开启这个选项,我们将其开启,发现查询返回的结果速度快了 20% 左右。

原理

oracle 支持游标,一个 PreparedStatement 对应服务器一个游标,如果 PreparedStatement 被缓存起来重复执行,PreparedStatement 没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似 SELECT * FROM T WHERE ID = ?这样的场景,启用 PSCache 和不启用 PSCache 的性能可能是相差一个数量级的。

连接 oracle 数据库,打开 PSCache,但是其他的数据库连接池都会存在内存占用过多的问题,Druid 是唯一解决这个问题的连接池。

o(╯□╰)o我只要一毛钱的鼓励~~