一、数据库性能瓶颈分析
1、数据库的连接数
2、单表数据量大(空间)
没有索引的时候,全表的一个扫描。有索引的情况,B+树
实现的角度,硬盘级的存储(表存储空间大小,索引大小)
IO操作,从硬盘把索引加载到内存
3、硬件资源(QPS/TPS)
2、大数据量数据库性能瓶颈解决方案
读写分离、优化SQL、缓存、分区、分库、分表
3、读写分离、分库分表
读写分离(读写分离基于主从复制)
区别读、写多数据源方式进行数据的存储和加载
数据的存储(增删改)一般指定写数据源,数据的读取(查询)指定读数据源
一主一丛、互为主从、一主多从、级联主从(master、slave)
主从出现延时该怎么办?(优化、判断是否延时(Seconds_Behind_Master))
解决了 硬件资源(QPS/TPS)、连接数
分库分表,对数的库表进行拆分,用分片的方式对数据进行管理
垂直拆分
单库-----》用户库-订单库-账户库(分布式事物(一致性)、关联查询)
解决了 硬件资源(QPS/TPS)、连接数
水平拆分
user ----》userID%10=0--userID%10=1---userID%10=9
解决了空间问题、解决了单表数据量的问题
根据不同业务选择拆分规则
解析sql---》数据源管理---》数据源分配---》请求/相应---》结果整合
4、基于mycat实现读写分离(8066端口)
application---》jdbc协议---》mycat服务---》mysql服务
Mycat是开源的分布式数据库中间件,基于阿里的cobar的开源框架之上,
它处于数据库服务与应用服务之间,进行数据处理与整合。
一个彻底开源的,面向企业应用开发的大数据集群,
支持事物、ACID、可以代替MySQL的加强版数据库。
逻辑表(ER表(用户地址表,同意分片存储)、分片表(分片规则UID%2)、全局表(数据字典)、非分片表(指向一个DB的普通表)),数据冗余
节点(一个BD实例可能是一个节点)
Mysql基于binlog的主从复制原理
Master(主表)---》Data changes(操作)---》binary log(二进制日志)(这些记录叫做二进制日志事件binary log events)
Slave通过I/OThread异步将master的binary log events拷贝到它的中继日志(relay log)
Slave执行relay日志中的事件,匹配自己的配置将需要执行的数据,在slave服务商执行一遍从而达到复制数据的目的
Master操作
接入mysql并创建主重复制的用户
给新用户赋予权限
指定服务ID,开启binlog日志记录,在my.cnf中加入
通过SHOW MASTER STATUS;查看Master db状态
Slave
指定服务器ID,指定同步的binlog存储位置,在my.cnf加入
接入slave的mysql服务,并配置
start slave
show slave status\;查看slave服务器状态
目录
bin程序目录,存放了window版本和linux版本可执行文件 ./mycat{start|restart|stop|status...}
conf存放配置文件
server.xml是Mycat服务器参数调整和用户授权的配置文件
schema.xml是逻辑库定义和表以及分片定义的配置文件
rule.xml是分片
连续分片(按日期(天)分片、自定义数字范围分片、自然月分片)
优点:扩容无需迁移数据,范围条件查询资源消耗小
缺点:数据热点问题,并发额能力受限于分片节点
离散分片(枚举分片、数字取模分片、字符串截取数字hash分片、一致性哈希分片)
优点:数据分布均匀,并发能力强,不受分片节点
缺点:移植性差,扩容难
综合类分片(范围求模分片、取模范围约束分片)
log4j2.xml 配置logs目录日志输出规则
lib目录主要存放mycat依赖的一些jar文件
logs目录存放日志文件
Mycat关联查询的问题总结(Sharding-Sphere)
用好ER表
善用全局表(数据固定不经常改变)
使用注解(在mycat内存中进行数据关联)
db---》mysqldump(数据备份)---》mycat---》 ---》分片{1|2|3} 路由
导出---》-ER子表--》导入
数据库设计
规划(计划内、计划外)、扩展性(扩容、缩容)
分库分表