mysql global max_connections和spring.hikari.maximumPoolSize有什么区别?

new9mtju  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(117)

我有大约20个微服务都使用mysql,有一个数据库,但每个微服务都有自己的模式,所以每个微服务的url是不同的:
微服务1

spring.datasource.url=jdbc:mysql://localhost:3306/micro1_db

微服务2

spring.datasource.url=jdbc:mysql://localhost:3306/micro2_db

我不是DBA,所以当整个应用程序抛出连接问题时,我只是在mysql上应用以下命令:

set global max_connections = 400; (the default is 150 I think).

然后几个月后,一个微服务抱怨,所以我为特定的微服务配置了以下内容:

spring.hikari.maximumPoolSize=20

该应用程序在本地运行,用户很少,我需要知道如何配置生产就绪。是全球连接是必须的,如果是的话,建议的大小是多少。每个微服务是否需要“spring.hikari.maximumPoolSize=20”,这两个配置是否一起工作。该应用程序不是Facebook规模,但应该允许5位数同时我假设。

57hvy0tb

57hvy0tb1#

MySQL的max_connections对于所有模式都是全局的。MySQL Server在不同的模式或不同的客户端之间没有区别。max_connections是所有模式,所有客户端的总和。
max_connections的大小应该至少与并发连接的所有连接池的 total 大小相同。例如,如果您有20个微服务,每个微服务由一个Java进程和一个连接池组成,并且每个连接池的大小为20,那么总数将为400。
我已经支持了一些运行多个JVM进程的微服务,每个进程都有自己的连接池。或者“微服务”由三个或更多的示例组成,用于负载平衡和冗余。这些示例还创建了自己的连接池。还有一些服务有运行后台服务的“sidecar”进程,而不是单独的请求/响应处理程序。所以真实的总数可能要高得多。

相关问题