我们目前正在尝试使我们的服务器软件使用连接池来大大减少延迟,但是它并没有减少运行查询所需的时间,而是将时间加倍,甚至比连接池之前更慢。
这有什么原因吗?JDBC 一次只允许一个查询还是有其他问题?
另外,有没有人有任何多线程连接池的例子来减少数百个查询的时间,因为我们发现的例子只会让情况变得更糟。
我们已经尝试使用 BoneCP 和 Apache DBCP 获得类似的结果......
那是使用 Apache 的 DBCP。我们也尝试过使用 BoneCP 获得相同的结果......
连接池通过重用已经存在的连接来帮助减轻创建与数据库的新连接的开销/成本。如果您的工作负载需要许多中短连接,例如通过查询数据库来处理并发用户请求的应用程序,这一点很重要。不幸的是,您的示例基准代码没有这样的配置文件。您只是并行使用 4 个连接,并且不涉及重用。
连接池无法实现的是神奇地加快执行时间或提高数据库提供的并发级别。如果基准代码代表预期的工作量,我建议您查看批处理语句而不是线程。这将大大提高 INSERT/UPDATE 操作的性能。
更新:
并行使用多个连接可以提高性能。请记住,Java 应用程序和数据库中的多个线程之间不一定存在关系。JDBC 只是数据库驱动程序的一个包装器,使用多个连接会导致多个查询被并行提交到数据库服务器。如果这些查询适合它,那么每个现代 RDBMS 都将能够并行处理它们。但是,如果这些查询非常耗费工作,或者更糟糕的是包括表锁或冲突更新,则数据库可能无法这样做。如果您遇到糟糕的性能,请检查哪些查询滞后并优化它们(它们有效吗?适当的索引到位?非规范化模式可能在更极端的情况下有所帮助。使用准备好的语句和批处理模式进行更大的更新等)。如果您的数据库过载很多,