🤞作者小三是刚刚毕业不久全栈工程师,写的技术文章基本上是学习过程中笔记整理而来,大家看了之后如果喜欢可以给小弟点点赞哦。
🤞例外小弟还有个程序员交流群,欢迎各位大佬来摸鱼哈。点击加群
什么是分库分表
分库分表:在一些数据库大的项目中,随着时间的推移和业务量的增加,数据库里的表中数据就会越来越多,如果单单还使用上面的模式,显然是不够用的。这时候就想到了把一个库里的数据分散到多个库里,并且把存在一个表里的数据分散到多个表里。分库分表的方式有垂直切分,水平切分
分库分表能带来什么样的好处
第一、能解决数据库本身的瓶颈,当连接数过多时,就会出现‘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 等都是可能