第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. **分库分表技术选型问题:**市场分库分表中间件相对较多,框架各有各的优势与短板,该怎么选择?
相关推荐
烤麻辣烫41 分钟前
黑马程序员苍穹外卖(新手)DAY10
java·开发语言·学习·spring·intellij-idea
q***735541 分钟前
Spring Boot应用关闭分析
java·spring boot·后端
u***451643 分钟前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
p***62991 小时前
mysql-connector-java 和 mysql-connector-j的区别
android·java·mysql
程序员三明治1 小时前
【Java】synchronized关键字详解:从字节码到对象头与锁升级
java·开发语言·juc·synchronized··锁升级
k***3881 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
老虎06271 小时前
Java基础面试题(11)—Java(泛型)
java·开发语言·windows
一 乐1 小时前
宠物医院预约|宠物医院|基于SprinBoot+vue的宠物医院预约管理系统源码+数据库+文档)
java·前端·数据库·vue.js·后端·springboot
Seven971 小时前
数据结构-哈希表
java