项目的数据库连接我是用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配置: 完整堆栈跟踪:
问题内容: 借助Cloud SQL,在App Engine上寻找连接池解决方案时,会出现多个条目,并提出HikariCP应该起作用的建议,因为它允许外部ThreadFactory配置。 配置如下所示: 但是有问题。 Google App Engine上的HikariCP 实际上,由于App Engine受限制的“沙盒”环境,快速尝试暴露了多个问题。 所以问题仍然存在。 有人成功在Google Ap
在Appengine上使用HikariCP作为连接池部署Spring Boot应用程序时,在执行一些请求时,我会遇到一些与数据库(线程)相关的错误: 然后我发现AppEngine只允许应用程序使用它的ThreadFactory创建线程。因此,我确保将Hikari配置为使用AppEngine的线程工厂,如下所示:
我尝试使用HikariCP和mariaDB数据库,但是当我尝试初始化的时候,我得到了下一个错误。 由以下原因引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 我的MariaDBDatabase类: 我的数据库类: 我的家伙.xml