gpt4 book ai didi

Java MySQL JDBC 缓慢/轮流

转载 作者:行者123 更新时间:2023-11-29 13:35:23 26 4
gpt4 key购买 nike

我们目前正在尝试让我们的服务器软件使用连接池来大大减少延迟,但是它并没有减少查询运行的时间,而是使时间加倍,甚至比使用连接池之前更慢。

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

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

我们尝试使用 BoneCP 和 Apache DBCP 取得了相似的结果...

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

最佳答案

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

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

更新:

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

关于Java MySQL JDBC 缓慢/轮流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com