-
Notifications
You must be signed in to change notification settings - Fork 9
/
MySQL面试题.txt
116 lines (76 loc) · 4.84 KB
/
MySQL面试题.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
1.讲下MVCC原理
2.MySQL高可用架构介绍
3.OSC(在线更改表结构)原理
检查原表是否有主键和触发器
创建别名表和触发器---三类触发器
根据主键分多批量进行导入别名表并加上share lock仿止数据写入
INSERT LOW_PRIORITY IGNORE INTO `test`.`_b_new` (`a`) SELECT `a` FROM `test`.`b` FORCE INDEX(`PRIMARY`) WHERE ((`a` >= ?)) AND ((`a` <= ?)) LOCK IN SHARE MODE /*pt-online-schema-change 7609 copy nibble*/
SELECT /*!40001 SQL_NO_CACHE */ `a` FROM `test`.`b` FORCE INDEX(`PRIMARY`) WHERE ((`a` >= ?)) ORDER BY `a` LIMIT ?, 2 /*next chunk boundary*/
最后swap表
4.MySQL性能调优有哪些关键点/经验
Linux 关闭NUMA,vm.swappiness=1,tw_reuse = 1
文件系统 XFS
IO调度算法 deadline noop
网卡中断 set_irq_affinity.sh service irqbalance stop
MySQL参数 innodb_buffer_pool_size 占内存60%-80%
innodb_io_capacity
MySQL文件 分散到各磁盘比如数据文件放SSD 随机IO,SATA盘跑日志 顺序IO
SQL优化 持续关注慢日志
5.MySQL在线备份方案,xtrabackup原理
可以使用mydumper,myduper相当于多线程的mysqldump,使用这个时一定要用--trx-consistency-only
6.MySQL监控有哪些指标
MySQL Handlers (select,insert,delete,update)
MySQL Transaction Handlers
Thread Running
MySQL Networking
Process state
LINUX io network cpu memory
7.如何在线迁移MySQL
8.MySQL5.7有哪些新功能
online buffer pool resize
并行复制功能
9.update t1 set c1 = v1 where id = 123;id 为普通索引,该操作会加哪些锁
10.空隙锁是解决了什么问题
11.服务器参数调优,有哪些关键点
12.了解哪些中间件,对LVS,MHA中间件的理解
13.运维MySQL主从复制集群中,遇到过哪问题,如何解决
14.运维MySQL过程中,遇到过什么重大故障,如何处理的
15.数据库监控自动化方案
16.innodb_autoinc_lock_mode 自增锁并发怎么设?设哪个参数,值多少,为什么
https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html
innodb_autoinc_lock_mode = 2
17.varchar与char的区别
Varchar存储可变长字符串,小于255字节时需要1个额外字节(大于255需要2个额外字节)存储长度,最大长度为65532字节(所有列总和);
char存储定长(right padding),读取时会截断末尾空格,长度最大为255字符;
18.int(20)中20的涵义
20表示最大显示宽度为20,但仍占4字节存储,存储范围不变;
5.1 数据库性能的优化
5.2 深入理解mysql的Record Locks、Gap Locks、Next-Key Locks
例如下面的在什么情况下会出现死锁:
start transaction; DELETE FROM t WHERE id =6; INSERT INTO t VALUES(6); commit;
5.3 insert into select语句的加锁情况
5.4 事务的ACID特性概念
5.5 innodb的MVCC理解
5.6 undo redo binlog
1 undo redo 都可以实现持久化,他们的流程是什么?为什么选用redo来做持久化?
2 undo、redo结合起来实现原子性和持久化,为什么undo log要先于redo log持久化?
3 undo为什么要依赖redo?
4 日志内容可以是物理日志,也可以是逻辑日志?他们各自的优点和缺点是?
5 redo log最终采用的是物理日志加逻辑日志,物理到page,page内逻辑。还存在什么问题?怎么解决?Double Write
6 undo log为什么不采用物理日志而采用逻辑日志?
7 为什么要引入Checkpoint?
8 引入Checkpoint后为了保证一致性需要阻塞用户操作一段时间,怎么解决这个问题?(这个问题还是很有普遍性的,redis、ZooKeeper都有类似的情况以及不同的应对策略)又有了同步Checkpoint和异步Checkpoint
9 开启binlog的情况下,事务内部2PC的一般过程(含有2次持久化,redo log和binlog的持久化)
10 解释上述过程,为什么binlog的持久化要在redo log之后,在存储引擎commit之前?
解释上述过程,为什么binlog的持久化要在redo log之后,在存储引擎commit之前?
怎么保证redo log的写入和binlog的写入是原子的?
mysql内部通过一个分布式的事务进行写入,最后提交过程很复杂
1.先在InnoDB引擎写一个prepare redo log(fsync)
2.再写binlog(fsync)
3.最后再写InnoDB commit redo log(fsync)
recovery过程
在InnoDBn层,prepare redo log中会记录一个trxid,宕机重新起来恢复时,
先scan binlog,把所有的trxid拿出来做一个hash table(扫最后一个binlog文,一个事务的日志是不能跨文件的)
11 为什么要保持事务之间写入binlog和执行存储引擎commit操作的顺序性?(即先写入binlog日志的事务一定先commit)
12 为了保证上述顺序性,之前的办法是加锁prepare_commit_mutex,但是这极大的降低了事务的效率,怎么来实现binlog的group commit?
13 怎么将redo log的持久化也实现group commit?至此事务内部2PC的过程,2次持久化的操作都可以group commit了,极大提高了效率