项目的数据库连接我是用HikariCP,单个增删查改速度是还算快的。但请求一多,速度就变得很慢很慢了。请问这个可以怎么优化?
然后我是这么配置的
public static HikariDataSource init(){
hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl("数据库连接");
hikariDataSource.setUsername("帐号");
hikariDataSource.setPassword("密码");
hikariDataSource.setIdleTimeout(30000);
hikariDataSource.setMaximumPoolSize(20);
hikariDataSource.setMinimumIdle(10);
hikariDataSource.setMaxLifetime(120000);
hikariDataSource.setConnectionTimeout(30000);
hikariDataSource.addDataSourceProperty("cachePrepStmts", "true");
hikariDataSource.addDataSourceProperty("prepStmtCacheSize", "250");
hikariDataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
hikariDataSource.addDataSourceProperty("autoReconnect", "true");
hikariDataSource.addDataSourceProperty("maxReconnects", "100");
return hikariDataSource;
}
你的 HikariCP 配置看起来基本上是合理的,但如果在高并发情况下性能变得很慢,可能存在一些瓶颈或需要优化的地方。以下是一些可能的优化建议:
MaximumPoolSize
设置为 20,这个值可能在高并发时不够大。你可以通过分析你的数据库并发负载来调整这个值。通常,MaximumPoolSize
可以设置为 CPU 核心数 * 2 + 有一定余量
的方式,但具体数值还要根据你的实际场景来调整。HikariPoolMXBean
)或其他监控工具,监控连接池的使用情况(如当前活动连接数、等待连接数等)。这样可以帮助你了解是否需要调整连接池配置。ConnectionTimeout
值ConnectionTimeout
为 30000 毫秒(30 秒),这意味着在获取连接时如果超过这个时间,才会抛出异常。你可以尝试降低这个值(比如 5-10 秒),这样当连接池中没有可用连接时,系统能够更快地反馈问题。IdleTimeout
设置为 30000 毫秒,这表示空闲连接在 30 秒后会被回收。如果你的数据库连接建立和销毁的开销较高,可以尝试增加这个值以减少频繁的连接销毁和重建。MaxLifetime
设置为 120000 毫秒(2 分钟),表示连接的最大生存时间。你可以检查一下数据库服务器的连接超时时间是否与其匹配。MaximumPoolSize设置的太保守了 再就是有可能有没释放的连接
HikariCP 是一个高性能的 JDBC 连接池组件。下图是性能的比较测试结果: 使用方法: HikariConfig config = new HikariConfig();config.setMaximumPoolSize(100);config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");c
我们的项目中有Spring-boot/hibernate/PostgreSQL应用程序,并使用Hikari作为连接池。我们不断遇到以下问题:几个小时后,活动连接数增长到极限,我们得到如下错误(完整堆栈跟踪位于问题的末尾): 以下是版本信息: JPA/Hibernate配置: HikariCP配置: 完整堆栈跟踪:
在Appengine上使用HikariCP作为连接池部署Spring Boot应用程序时,在执行一些请求时,我会遇到一些与数据库(线程)相关的错误: 然后我发现AppEngine只允许应用程序使用它的ThreadFactory创建线程。因此,我确保将Hikari配置为使用AppEngine的线程工厂,如下所示:
问题内容: 借助Cloud SQL,在App Engine上寻找连接池解决方案时,会出现多个条目,并提出HikariCP应该起作用的建议,因为它允许外部ThreadFactory配置。 配置如下所示: 但是有问题。 Google App Engine上的HikariCP 实际上,由于App Engine受限制的“沙盒”环境,快速尝试暴露了多个问题。 所以问题仍然存在。 有人成功在Google Ap
我尝试使用HikariCP和mariaDB数据库,但是当我尝试初始化的时候,我得到了下一个错误。 由以下原因引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 我的MariaDBDatabase类: 我的数据库类: 我的家伙.xml
在模拟网络连接失败几秒钟的情况下,尝试暂停HikariCP池时会引发异常。为什么泳池可以不可以暂停?有没有其他简单的方法来模拟丢失的网络连接(到本地主机上的MySQL服务器)? 配置: 属性: JUnit: 例外
我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个优秀的库,但它现在抛出了以下错误: 现在我知道连接泄漏意味着打开的连接在某个地方漂浮,但我不知道如何或在哪里漂浮。 下面是我的数据库类中的一个方法,根据堆栈跟踪,错误应该发生在这里。 这只是启动语句的一个基本方法。调用它时,我使用它,然后调用、和 但它告诉我连接是打开的。 我怎么解决这个?谢了!
我注意到,即使数据库关闭,因此池中实际上没有可用的连接,Hikari CP仍然会等待连接超时到期,然后再向客户端发送异常。 我同意当数据库可用时这是可取的,但在我的情况下,我希望池在没有连接可用时不要等待发送异常。 原因是数据库本身在不到2ms的时间内回答,所以我每秒可以处理数千个事务,但是当没有可用的连接时,池将等待更长的时间(建议的最小可接受超时为250毫秒),因此我无法再处理吞吐量。另一方面