我需要编写一个连接到Oracle 11G数据库(当前连接10-12个不同的oracle数据库)的Java应用程序(基于Web),从中读取一些数据(所有都是选择查询)。
在迭代这个arraylist之后,我连接每个数据库,激活选择查询(我为所有数据库触发的相同查询),获取记录,将其放在一个全局集合列表中并关闭连接并在此循环上继续相同的过程。 / p>
目前我是连接多个数据库的“Executors”。
再次使用ExecutorService executor = Executors.newFixedThreadPool(20);
给我一个惊喜。为了创建第一个数据库连接,它显示立即日志,但对于后续数据库连接,它会在60秒后打印日志,所以我不明白为什么这需要60秒或更长时间才能进行所有连接?
从逻辑上讲,所有连接都需要一段时间。
请为此应用程序建议性能改进。
答案 0 :(得分:0)
打开数据库连接是一项昂贵的操作;如果可能,您应该连接到每个数据库一次,并重新使用该连接进行对该数据库的所有查询(也称为连接池)。目前尚不清楚这是否是你已经在做的事情。
另一件看起来很奇怪的事情是你已经使openConnection方法同步了。我认为没有必要这样做,并且取决于代码的结构,这可能意味着只有一个线程可以在给定时间打开连接。由于连接需要很长时间,因此您希望每个线程并行连接。