net网站开发手机网站,企业所得税规避50种,建个小型网站服务器,中文网站域名文章目录MySQL数据库性能优化思路【面试题】不分库分表软优化硬优化分库分表结论分库分表能解决的问题解决数据库本身瓶颈连接数解决系统本身IO、CPU瓶颈分库分表带来的问题问题⼀ 跨节点数据库Join关联查询问题二 分库操作带来的分布式事务问题问题三 执行的SQL排序、翻页、函…
文章目录MySQL数据库性能优化思路【面试题】不分库分表软优化硬优化分库分表结论分库分表能解决的问题解决数据库本身瓶颈连接数解决系统本身IO、CPU瓶颈分库分表带来的问题问题⼀ 跨节点数据库Join关联查询问题二 分库操作带来的分布式事务问题问题三 执行的SQL排序、翻页、函数计算问题问题四 数据库全局主键重复问题问题五 容量规划,分库分表后二次扩容问题问题六 分库分表技术选型问题不能⼀上来就说分库分表MySQL数据库性能优化思路【面试题】
根据实际情况分析两个角度思考不分库分表、分库分表
不分库分表
软优化
数据库参数调优分析慢查询SQL语句分析执行计划进行sql改写和程序改写优化数据库索引结构优化数据表结构优化引入NOSQL和程序架构调整
硬优化
提升系统硬件更快的IO、更多的内存带宽、CPU、硬盘
分库分表
根据业务情况而定选择合适的分库分表策略没有通用的策略 外卖、物流、电商领域先看只分表是否满⾜业务的需求和未来增长 数据库分表能够解决单表数据量很大时数据查询的效率问题 无法给数据库的并发操作带来效率上的提高分表的实质还是在⼀个数据库上进行的操作受数据库IO性能的限制如果单分表满足不了需求再分库分表⼀起
结论
在数据量及访问压力不是特别大的情况首先考虑缓存、读写分离、索引技术等方案 如果数据量极⼤且业务持续增长快再考虑分库分表方案
分库分表能解决的问题
解决数据库本身瓶颈
连接数
连接数过多时就会出现‘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 dataCopying to tmp tableCopying to tmp table on diskSorting resultUsing filesort 等都是可能有性能问题SQL清楚相关影响问题的情况可以kill掉
也存在执行时间短但是CPU占用率⾼的SQL通过上面命令查询不到这个时候最好通过执行计划分析explain进行分析
分库分表带来的问题
问题⼀ 跨节点数据库Join关联查询
数据库切分前多表关联查询可以通过sql join进行实现分库分表后数据可能分布在不同的节点上sql join带来的问题就⽐较麻烦
问题二 分库操作带来的分布式事务问题
操作内容同时分布在不同库中不可避免会带来跨库事务问题即分布式事务
问题三 执行的SQL排序、翻页、函数计算问题
分库后数据分布再不同的节点上 跨节点多库进行查询时会出现limit分页、order by排序等问题 而且当排序字段非分片字段时更加复杂了要在不同的分片节点中将数据进行排序并返回然后将不同分片返回的结果集进行汇总和再次排序也会带来更多的CPU/IO资 源损耗
问题四 数据库全局主键重复问题
常规表的id是使用自增id进行实现分库分表后由于表中数据同时存在不同数据库中如果用自增id则会出现冲突问题
问题五 容量规划,分库分表后二次扩容问题
业务发展快初次分库分表后满足不了数据存储导致需要多次扩容
问题六 分库分表技术选型问题
市场分库分表中间件相对较多框架各有各的优势与短板应该如何选择