使用 Druid 加速 oracle 的查询

##1. 问题

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

2. 方法

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

3. 原理

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

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

-------------本文结束  感谢您的阅读-------------
o(╯□╰)o我只要一毛钱的鼓励~~