繁体   English   中英

Java MySQL JDBC慢/慢

[英]Java MySQL JDBC Slow/Taking turns

我们目前正在尝试使我们的服务器软件使用连接池来大大减少延迟,但是,与其减少查询运行时间,不如将其加倍,甚至比连接池之前还慢。

有什么原因吗? JDBC一次只允许一个查询还是有另一个问题?

而且,没有人有任何多线程连接池的示例来减少数百次查询所花费的时间,因为我们发现这些示例只会使情况变得更糟。

我们已经尝试过使用BoneCP和Apache DBCP获得类似的结果...

那是使用Apache的DBCP。 我们还尝试了使用BoneCP的结果相同...

通过重新使用现有连接池,连接池有助于减轻创建数据库新连接的开销/成本。 如果您的工作负载需要许多短至中等的实时连接(例如,通过查询数据库处理并发用户请求的应用程序),则这一点很重要。 不幸的是,您的示例基准代码没有这样的配置文件。 您仅并行使用4个连接,并且不涉及重用。

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

更新

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM