MySQL面试题准备
1. MVCC原理
英文全称为Multi-Version Concurrency Control,翻译为中文即 多版本并发控制。
保存数据在某个时间点的快照来实现的。这意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。
重点是 事务的隔离级别 可重复读
2.Xtrabackup原理
start xtrabackup_log、
copy .ibd .ibdata1、
flush table with read lock、
copy .frm 、.myd .myi
get 二进制日志的位置点、
解锁表、
stop copy xtrabackup log
Xtrabackup备份的优势
备份和恢复非常快
增量备份
流式备份
(解)压缩算法相比逻辑备份的zlib库更快
自身多线程支持
Xtrabackup备份的劣势
不够灵活,无法单独备份 指定库的指定表
无法同逻辑备份那样grep特定业务存在的字符串
空间损耗,且不支持逻辑备份恢复时的碎片整理功能
依赖于备份过程中生成的redo log大小,若过大会极大的影响备份和恢复速度
3.MySQL 5.7有哪些新特性/功能
在线修改 innodb_buffer_pool_size |
增加 gtid 复制 |
支持 主主从 |
多线程复制 slave_parallel_type(逻辑时钟) |
4.聊聊锁
Update t1 set c1=v1 where id=123;
id是普通索引,该操作会加哪些锁?
行级排它锁 表级意象排他锁
如果id 是主键 还会添加 next-key-lock ,Gap锁可以很完美的避免 幻读
5.聊聊执行计划
1 id
2 select type
A:simple:表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple,且只有一个
B:primary:一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type即为primary。且只有一个
C:union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union
3)table
显示的查询表名
5)possible_keys
查询可能使用到的索引都会在这里列出来
6)key
查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
7)key_len
用于处理查询的索引长度
0)extra
这个列可以显示的信息非常多,有几十种,常用的有
A:distinct:在select部分使用了distinc关键字
B:no tables used:不带from字句的查询或者From dual查询
C:使用not in()形式子查询或not exists运算符的连接查询,这种叫做反连接。即,一般连接查询是先查询内表,再查询外表,反连接就是先查询外表,再查询内表。
D:using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中
E:using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据。
I:using where:表示存储引擎返回的记录
5.聊聊double write双写
double write工作流程
请直接看图:
1.运行一个 transaction 然后会产生dirty page,进而会写redo log
2.接下来拷贝对应的dirty page 到 doublewrite buffer;
3.假如doublewrite buffer 满或是有checkpoint 操作,会把doublewrite buffer中的一部分dirty page 拷贝到 shared tablespace;
4.最后一步写入 datafile
6.聊聊半同步复制
AFTER_SYNC
Master将新的事务写进缓冲区的binlog,然后发送给Slave,再sync到本地磁盘上的binlog file。之后才允许接收Slave的ack回复,接收到ack之后才会提交事务,并返回成功信息给客户端。
7.聊聊存储引擎
MyISAM 并发性差、表级锁、不支持事务、底层有 .frm .myd .myi 等数据文件;
innodb 自增列适合主键使用、支持事务、行级锁、支持外键、在线备份、数据索引聚簇;
memory 存在内存 数据易丢失 不支持 blob text
csf 类似oracle的外部表
Archive 不支持 update delete 适用
8.聊聊B Tree和B+Tree
B树索引
B Tree 是一个绝对平衡树,所有的叶子节点在同一高度。每一个节点都包含key和value,因此经常访问的元素可能离根节点更近
B+Tree索引
B+Tree叶子节点是顺序排列的,并且相邻的节点具有顺序引用的关系
树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录,便于区间查找和遍历