- 解决数据库本身瓶颈
- 连接数: 连接数过多时,就会出现'too many connections'的错误,访问量太大或者数据库设置的最大连接数太小的原因
- 大家学第一个大课,或者微服务的时候没物理分库,多数都出现上述问题
- Mysql默认的最大连接数为100.可以修改,而mysql服务允许的最大连接数为16384
- 数据库分表可以解决单表海量数据的查询性能问题
- 数据库分库可以解决单台数据库的并发访问压力问题

- 解决系统本身IO、CPU瓶颈
- 磁盘读写IO瓶颈,热点数据太多,尽管使用了数据库本身缓存,但是依旧有大量IO,导致sql执行速度慢
- 网络IO瓶颈,请求的数据太多,数据传输大,网络带宽不够,链路响应时间变长
- CPU瓶颈,尤其在基础数据量大单机复杂SQL计算,SQL语句执行占用CPU使用率高,也有扫描行数大、锁冲突、锁等待等原因
- 可以通过 show processlist; 、show full processlist,发现 CPU 使用率比较高的SQL
- 常见的对于查询时间长,State 列值是 Sending data,Copying to tmp table,Copying to tmp table on disk,Sorting result,Using filesort 等都是可能有性能问题SQL,清楚相关影响问题的情况可以kill掉
- 也存在执行时间短,但是CPU占用率高的SQL,通过上面命令查询不到,这个时候最好通过执行计划分析explain进行分析
补充:
最大连接数(max_connections
)是针对整个MySQL服务器的全局设置,而不是针对单个数据库的。这意味着无论有多少个数据库,所有连接都会占用同一个连接池。
关键点:
- 全局设置:
max_connections
是服务器级别的配置,影响所有数据库的连接。
- 连接池共享:所有数据库的连接都从同一个连接池中分配。
- 独立连接:每个数据库的连接是独立的,但总数受
max_connections
限制。
查看和设置最大连接数:
- 查看当前设置:
SHOW VARIABLES LIKE 'max_connections';
- 设置最大连接数:
SET GLOBAL max_connections = 200;
或在 my.cnf
或 my.ini
中配置:
[mysqld]
max_connections = 200
总结:
- 不共享:两个库不单独拥有最大连接数,而是共享服务器的总连接数。
- 全局限制:所有数据库的连接总数不能超过
max_connections
。
因此,两个库的连接数受限于服务器的全局连接数设置。