Mysql学习
高并发,高性能,高可用概念
高并发:同时处理的事务数高
高性能:事务/sql执行速度快
高可用:系统可用时间高
如何实现高并发,高性能,高可用
高并发:通过复制和扩展,将数据分散至多个节点
高性能:复制提升速度,扩展提升容量
高可用:节点间身份切换保证随时可用
实现高并发,高性能,高可用手段
主要手段:复制,扩展,切换
手段 | 复制 | 扩展 | 切换 |
---|---|---|---|
目的 | 数据冗余 | 扩展数据库容量 | 提高可用性 |
方法 | binlog传送 | 数据分片,分库,分表 | binlog主从身份切换 |
优点 | 并发量提升、可用性提升 | 性能、并发量的提升 | 性能、并发量的提升 |
缺点 | 占用更多的硬件资源 | 可能降低可用性 | 丢失切换时期的数据 |
如何提升单点性能
建表:表结构合理,索引高效。
查询:优化SQL语句,选择正确索引
更新:正确的使用锁,合理优化事务
MySQL软件架构
MySQL服务端三层架构
可分为连接层、SQL层、存储层
MySQL常见的四种存储引擎
InnoDB:MySQL5.5.5之后的默认存储引擎,支持事务,外键,支持崩溃修复能力和并发控制,适合各种互联网业务。
MyISAM:MySQL5.5.5之前的默认存储引擎,插入数据库,空间利用率高,适合对查询效率要求非常高的需求。
Memory:所有数据都在内存,速度快,但是数据安全性差(本身还是一张表),适合做临时表(不需要持久化的场景)。
Archive:数据压缩,空间利用率高,插入速度较快(没有并发控制和log),不支持索引,查询性能差。适合日志信息归档。
SQL语句执行过程
在启用缓存的情况下,连接器监听客户端请求并将客户端指令转发给缓存(之前执行过的语句会以key=>value的形式存在缓存中,key是SQL语句,value是执行结果。缓存缺点:数据表修改后,会删除所有相关缓存,MySQL8.0以后无缓存功能),查询缓存有无执行过的相同语句,没有查询到,连接器将客户端指令转发给分析器,分析器做词法分析(识别SQL关键字)和句法分析(判断是否符合SQL语法)。分析后,优化器决定要怎么处理(类似指定计划),如:索引使用。执行器校验权限,调用SQL(先校验用户对目标数据有无权限,然后以行为粒度,调用存储引擎,执行SQL,注:没有索引的情况下,执行器会循环查询所有行)。存储引擎将执行器指令落实到数据文件上。未开启缓存情况下,连接器请求分析器。SQL语句是按照分析-优化-执行-落盘步骤执行的。