我的知识海洋

What are you following

  • 首页
  • 标签
  • 分类目录
  • 文章归档
  • 行路万里
  • 读书万卷
  • About Me

  • 搜索
面经 解决方案 操作系统 Java源码 开源 GSoC 哲学 中间件 回溯 链表 书 top 数据库 分布式 滑动窗口 配置 动态规划 前缀树 并查集 Redis 总结 年终总结 面试 算法基础

【Sharding-JDBC-1】Mysql架构变化+分库分表优缺点

发表于 2021-12-30 | 分类于 学习 | 阅读次数 838
# 数据库 # 中间件
我不是教你zha-1
【随想录8 】是否允许重复选择元素的组合问题

学习小d课堂 新版ShardingJDBC分库分表mysql数据库实战 笔记

【Sharding-JDBC-1】Mysql架构演变升级+分库分表优缺点

数据库的演变升级

  • 单机

    • 请求量大查询慢
    • 单机故障导致业务不可用
  • 主从

    • 数据库主从同步,从库可以水平扩展,满足更大读需求
    • 但单服务器TPS,内存,IO都是有限的
    • 可以考虑用主节点负责业务,从节点负责统计
  • 双主

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

自研工具类、tddl、shardingsphere、mycat等

【面试题】业务增长-数据库性能优化

这边有个数据库-单表1千万数据,未来1年还会增长多500万,性能比较慢,说下你的优化思路

  • 思路
    • 千万不要一上来就说分库分表,这个是最忌讳的事项
    • 一定要根据实际情况分析,两个角度思考
      • 不分库分表
        • 软优化
          • 数据库参数调优
          • 分析慢查询SQL语句,分析执行计划,进行sql改写和程序改写
          • 优化数据库索引结构
          • 优化数据表结构优化
          • 引入NOSQL和程序架构调整
        • 硬优化
          • 提升系统硬件(为了更快的IO、更多的内存):带宽、CPU、硬盘
      • 分库分表
        • 根据业务情况而定,选择合适的分库分表策略(没有通用的策略)
          • 外卖、物流、电商领域
        • 先看只分表是否满足业务的需求和未来增长
          • 数据库分表能够解决单表数据量很大的时,数据查询的效率问题,
          • 无法给数据库的并发操作带来效率上的提高,分表的实质还是在一个数据库上进行的操作,受数据库IO性能的限制
        • 如果单分表满足不了需求,再分库分表一起
  • 结论
    • 在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案
    • 如果数据量极大,且业务持续增长快,再考虑分库分表方案

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

分库分表解决的现状问题

可以解决数据库本身的瓶颈以及系统本身的瓶颈

  • 解决数据库本身瓶颈
    • 连接数: 连接数过多时,就会出现‘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 等都是可能有性能问题SQL,清楚相关影响问题的情况可以kill掉
      • 也存在执行时间短,但是CPU占用率高的SQL,通过上面命令查询不到,这个时候最好通过执行计划分析explain进行分析

修订记录

2022-02-07 18:14:41

# 数据库 # 中间件
我不是教你zha-1
【随想录8 】是否允许重复选择元素的组合问题

  • 文章目录
  • 站点概览
erdengk

erdengk

91 日志
5 分类
24 标签
RSS
Github E-mail
Creative Commons
友链
  • 星球球友
  • Joey
  • 北松山(itwaix)-TP在职
  • JooKS' Blog-GSoC 2022 Mentor
  • Chever-John-Shein在职
  • 一堆网页小游戏
  • 飞鸟记
0%
© 2019 — 2025 erdengk
由 Halo 强力驱动
陕ICP备2021015348号-1
川公网安备 51011202000481号
轻点广告,请我喝水,非常感谢 (。・ω・。)ノ(*/ω\*)