什么是去IOE:
IBM的服务器,Oracle的数据库、EMC的存储设备
Mysql相关时间点:
96年发布1.0,2000年开源、2004年引入InnoDB引擎、08年被sum收购、5.5版本InnoDB作为默认引擎。
mysql架构演变:
单点–>主从复制,读写分离–>分库分表,水平拆分.
mysql结构:
客户端连接器
连接池
系统管理和控制工具
sql接口–>解析器–>查询优化器–>缓存(默认禁用,8版本移除)
可插拔存储引擎
系统文件–>文件和日志
mysql相关文件
db.opt 字符集,校验规则相关
frm,表相关的元数据文件。
myd 存储引擎myisam专用,用来存放表数据
myi 存储引擎myisam专用,用来存放表索引。
ibd 存储引擎innodb专用,用来存放表数据和索引。
每一个innodb表对应一个.ibd文件(独立表空间),共享表空间用ibdata
pid文件.linux系统专用,用来存放线程编号
socket linux系统专用,
sql执行顺序(mysql5.7)
客户端–>查询缓存(命中直接返回)–>解析器–>解析树–>预处理–>新解析树–>查询优化器–>执行计划–>查询执行器–>引擎–>文件–>存入缓存–>返回结果
sql运行连接机制:
半双工机制,某一时刻,要么发送数据,要么接收数据。不能同时进行。类似早期的对讲机
线程状态:
show prcesseslist /show full processeslist
可用kill+线程id干掉线程。
主要信息:
user:启动线程用户
Host:发送请求的客户端
db:当前命令在哪个库执行
command:正在执行的操作命令,如createDB dropDb execute prepareadStatement,query,sleep,quit等。
state: 线程状态,如updating sleeping starting checking locked等。
info sql信息,要看完整的加full,默认100个字符
sql优化器解析肝优化:
等价变换优化,如5=5 and a>5–> a>5,ab>5 and a>5
基于联合索引条件位置优化,调用条件位置顺序以期索引生效。
优化函数,如innodb对min取索引最左边,max取索引最右边。myisam count(*)直接返回。limit提前终止查询,对in条件进行排序,等。
为什么mysql会默认禁用缓存,mysql8直接取消缓存
缓存存在严重的可伸缩性问题,很容易造成性能瓶颈,如在大量写操作的情况下,只要一条记录更新,会清空所有缓存,命中系很低,除非是静态表才适合缓存。
现今大多应用在应用层做缓存,效率是其好几倍,显得很鸡肋。