Skip to content

连接配置优化

1 服务端配置

服务端配置即 MySQL 本身的配置

1.1 增加可用连接数

例如压测时经常遇到的error 1040: Too many connections,可以修改环境变量 max_connections ,默认情况下服务端最大连接数为 151 个。

相关指令:

show variables like `max_connections`;

1.2 及时释放不活动的连接

系统默认的客户端超市时间是28800s(8h),可以把这个值调小一点。

相关指令:

show variables like `wait_timeout`;

2 客户端优化

这里说的客户端是相对于MySQL本体来说的,比如Java的JDBC连接,或者可以将这里说的客户端直接理解为后端。

2.1 使用连接池来复用连接

客户端能做的就是尽量减少和服务端建立连接的次数,已经建立的连接能凑合用就凑合用,别每次执行个 SQL 语句都创建个新连接,服务端和客户端的资源都会吃不消。

解决方案:使用连接池复用连接。

常见的数据库连接池有Druid(默认最大连接池大小:8)、Hikari(默认最大连接池大小:10)

注意:不要盲目地加大连接池的大小,系统执行效率反而可能降低。因为对于每一个连接,服务端都需要创建一个单独的线程去处理。在线程数超过CPU个数的情况下,CPU势必要通过分配时间片的方式进行线程的上下文切换,频繁的上下文切换会造成很大的性能开销。

Hikari官方给出了一个关于 PostgreSQL 数据库连接池大小的建议值公式:CPU核心数 * 2 + 1,这个公式对于其他数据库一般来说也是适用的。