Java MySQL JDBC慢/轮流

时间:2013-09-15 21:23:35

标签: java mysql database jdbc driver

我们目前正在尝试使我们的服务器软件使用连接池来大大减少延迟,但不是减少查询运行所花费的时间,而是将时间加倍并使其比连接池之前更慢。

这有什么理由吗? JDBC一次只允许一个查询,还是有其他问题?

此外,是否有任何人有多线程连接池的例子来减少数百个查询的时间,因为我们发现的例子只会使情况变得更糟。

我们尝试过使用BoneCP和Apache DBCP,结果相似......

那个人正在使用Apache的DBCP。我们也尝试过使用BoneCP,结果相同......

1 个答案:

答案 0 :(得分:1)

通过重用已有的连接,连接池有助于减少创建与数据库的新连接的开销/成本。如果您的工作量需要许多短到中等的生活连接,例如,这一点很重要。通过查询数据库来处理并发用户请求的应用程序。不幸的是,您的示例基准代码没有这样的配置文件。您只是并行使用4个连接,并且不涉及重用。

连接池无法实现的是神奇地加快执行时间或提高数据库提供的并发级别。如果基准代码表示预期的工作负载,我建议您查看批处理语句而不是线程。这将大大提高INSERT / UPDATE操作的性能。

更新

并行使用多个连接可以提高性能。请记住,Java应用程序和数据库中的多个线程之间不一定存在关系。 JDBC只是数据库驱动程序的包装器,使用多个连接会导致多个查询并行提交到数据库服务器。如果这些查询适合它,则每个现代RDBMS都能够并行处理它们。但是,如果这些查询非常耗费工作,或者更糟糕的是包括表锁或冲突的更新,则DB可能无法执行此操作。如果您遇到性能不佳,请检查哪些查询滞后并对其进行优化(它们是否有效?适当的索引到位?在更极端的情况下,对模式进行非规范化可能有所帮助。使用预准备语句和批处理模式进行更大的更新等)。如果您的数据库因许多,类似和小的查询而过载,请考虑缓存经常使用的数据。