第1章:Mysql数据库架构演变历史

Mysql数据库架构演变历史

单机:请求量大查询慢,单价故障导致业务不可用。

**主从:**数据库主从同步,从库可以水平扩展,满足更大读取需求。但是单服务器TPS,内存,IO都是有限的。

**双主:**用户量级上来后,写请求越来越多。一个Master是不能解决问题的,添加多了个主节点进行写入。多个主节点数据要保持一致性,写操作需求2个master之间同步更加复杂。

分库分表:重点掌握解决方案设计思想,而不是具体框架API调用。如shardingjdbc,tddl,mychat等。

面试题-业务增长数据库性能优化思路讲解

面试题目:我们现在有一个数据库,单表1千万数据,未来1年还会增加500万,性能比较慢,说一下优化思路?

思路:不可以一上来就说分库分表。我们需要结合实际业务情况进行分析。

软优化:

  1. 数据库参数调优
  2. 分析慢查询SQL语句,分析执行计划,进行sql改写和程序改写
  3. 优化数据库索引结构
  4. 优化数据库表结构
  5. 引入NOSQL和程序架构调整

硬优化:

  1. 提升系统条件(更快的IO,更多的内存),带宽,CPU,硬盘

分库vb 分表:

  1. 首先我们要确定是什么领域的,外卖,物流,电商还是其他。
  2. 然后要看分表是否可以满足当前业务的需求和未来增长,数据库分表能够解决单表数据量很大的时,数据库的查询问题。但是无法给数据库的并发操作带来效率上的提高,分表的实质还是在一个数据库上进行的操作,受到数据库IO性能的限制。
  3. 如果单分表满足不了业务需求,再进行分库分表。

结论:在数据量及访问压力不是特别大的情况下,首先需要考虑缓存,读写分离,索引等技术。如果数据量极大,且业务持续增长快,再考虑分库分表方案。

Mysql数据库分库分表带来的优点

解决数据库本身瓶颈:

  1. 数据库连接数过多时,会出现too many connections 的错误,访问量太大或者数据库设置的最大连接数太小的原因。
  2. Mysql默认的最大连接数为100,可以修改,而mysql服务允许的最大连接数为16384.
  3. 数据库分表可以解决单台海量数据的查询性能问题。
  4. 数据库分库可以解决单台数据库的并发访问压力问题。

解决系统本身IO,CPU瓶颈:

  1. 磁盘读写IO瓶颈,热点数据太多,尽管我们使用了数据库本身缓存,但是依旧有大量IO,导致sql执行速度慢。
  2. 网络IO瓶颈,请求的数据太多,数据传输大,网络带宽不够,链路响应时间变长。
  3. CPU瓶颈,尤其在基础数据数据量大单机复杂SQL计算,SQL语句执行占用CPU使用率高,也有扫描行数大,锁冲突,锁等待等原因。
  4. 可以通过show processlist,show full processlist,发现CPU使用率比较高SQL。常进的对于查询时间比较长,State列值是Sending result,Using filesort等都是可能有性能问题SQL,清楚相关影响问题的情况可以kill掉。也存储CPU占用率高的SQL,通过上面命令查询不到,这个时候最好提供执行计划分析explain进行分析。

Mysql数据库分库分表后六大问题怎么解决?

  1. **跨节点数据库join关联查询:**数据库切分之前,多表关联查询,可以通过sql join进行实现。分库分表后,数据可能分布在不同的节点上,sql join 带来的问题就比较麻烦。
  2. **分库分表带来的分布式事务问题:**操作内容同时分布在不同库中,不可避免会带来跨库事务问题,即分布式事务。
  3. **执行的SQL排序,翻页,函数计算问题:**分库后,数据分布再不同的节点上,跨节点多库进行查询时,会出现limit分页,order by 排序等问题。而且当排序字段非分片字段时,更加复杂了,要在不同的分片节点将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序(也会带来更多的CPU/IO资源损耗)。
  4. **数据库全局住建重复问题:**常规表的id是使用自增id进行实现,分库分表后,由于表中的数据同时存在不同数据库中,如果用自增id,则会出现冲突问题。
  5. **容量规划,分库分表后二次扩容问题:**业务发展快,初次分库分表后,满足不了数据存储,导致需要多次扩容。
  6. **分库分表技术选型问题:**市场分库分表中间件相对较多,框架各有各的优势与短板,该怎么选择?
相关推荐
Li_76953213 分钟前
Redis —— (五)
java·redis·后端·spring
派大鑫wink25 分钟前
【Day7】构造方法与 this 关键字:初始化对象的正确姿势
java·开发语言
JIngJaneIL27 分钟前
基于java+ vue办公管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
超级大只老咪34 分钟前
速通:类,对象,方法(Java)
java
毕设源码-郭学长35 分钟前
【开题答辩全过程】以 基于SpringBoot的企业销售合同管理设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
while(1){yan}36 分钟前
JVM八股文
java·开发语言·jvm·java-ee
jiayong2337 分钟前
Spring AI Alibaba 深度解析(一):框架概述与核心功能
java·人工智能·spring
AAA简单玩转程序设计37 分钟前
Java 异常处理:3 个 “避坑神操作”,告别崩溃式报错
java
徐老总37 分钟前
圆形(Circle)和矩形(Rectangle)两个样例类
java
一只努力的微服务40 分钟前
【Calcite 系列】将 INTERSECT 转换为 EXISTS
java·calcite