articleList

03-Mysql数据库分库分表后带来的优点

2025/03/13 posted in  ShardingJDBC
Tags: 

  • 解决数据库本身瓶颈
    • 连接数: 连接数过多时,就会出现'too many connections'的错误,访问量太大或者数据库设置的最大连接数太小的原因
      • 大家学第一个大课,或者微服务的时候没物理分库,多数都出现上述问题
    • Mysql默认的最大连接数为100.可以修改,而mysql服务允许的最大连接数为16384
    • 数据库分表可以解决单表海量数据的查询性能问题
    • 数据库分库可以解决单台数据库的并发访问压力问题
      image-20211124143454409
  • 解决系统本身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服务器的全局设置,而不是针对单个数据库的。这意味着无论有多少个数据库,所有连接都会占用同一个连接池。

关键点:

  1. 全局设置max_connections 是服务器级别的配置,影响所有数据库的连接。
  2. 连接池共享:所有数据库的连接都从同一个连接池中分配。
  3. 独立连接:每个数据库的连接是独立的,但总数受 max_connections 限制。

查看和设置最大连接数:

  • 查看当前设置
    SHOW VARIABLES LIKE 'max_connections';
    
  • 设置最大连接数
    SET GLOBAL max_connections = 200;
    
    或在 my.cnfmy.ini 中配置:
    [mysqld]
    max_connections = 200
    

总结:

  • 不共享:两个库不单独拥有最大连接数,而是共享服务器的总连接数。
  • 全局限制:所有数据库的连接总数不能超过 max_connections

因此,两个库的连接数受限于服务器的全局连接数设置。