Server层按顺序执行SQL的步骤为:索引相关3

Server层依次执行SQL的步骤是:

索引相关3、MySQL为什么要用索引?

根本原因

扩张

4、三种常见的索引底层数据结构及其优缺点

用于索引的三种常见底层数据结构是哈希表、有序数组和搜索树。

5、常见的索引类型以及它是如何工作的?

根据叶子节点的内容,索引类型分为主键索引和非主键索引。

6、MyISAM 和 InnoDB 实现 B-tree 索引有什么区别?7、InnoDB 为什么要设计 B+ 树索引?

两个考虑:

为什么选择B+树:

8、什么是覆盖索引和索引下推?

覆盖指数:

索引下推:

9、什么动作会使索引失效?10、字符串加索引日志相关 11、什么是MySQL的change buffer?12、MySQL如何确定一行扫描的次数?13、MySQL的redo log和binlog有什么区别?

14、为什么需要重做日志?

15、为什么redo log有crash-safe能力,不能被binlog替代?

第一点:redo log可以保证innoDB可以判断哪些数据已经被flush了,哪些数据还没有

第二点:如果redo log写入失败,说明操作失败,事务无法提交。

16、数据库崩溃时,没有刷到内存的数据如何恢复?

根据redo log和binlog的两阶段commit,未持久化数据分为几种情况:

17、重做日志的写法?

重做日志由两部分组成,内存中的日志缓冲区(redo log buffer)和磁盘上的日志文件(redo log file)。

MySQL每执行一条DML语句,都会先将记录写入redo log buffer(用户空间),然后保存到内核空间的缓冲区OS-buffer中,然后在某个时间写入多条操作记录redo时间点。日志文件(刷盘)。这种先写日志,再写磁盘的技术称为 WAL。

可以发现redo log buffer是写到redo log文件中的,redo log文件是通过OS buffer传输的。其实可以通过参数innodb_flush_log_at_trx_commit来配置。参数值的含义如下:

18、redo log的执行过程?

我们来看看Redo log的执行过程,假设执行的SQL如下:

更新 T seta =1 whereid =666

MySQL客户端向MySQL Server层发送请求语句update T set a =1 where id =666。

MySQL Server层收到SQL请求后,进行分析、优化、执行等处理工作,并将生成的SQL执行计划发送给InnoDB存储引擎层执行。

InnoDB 存储引擎层在内存中记录了将 a 修改为 1 的操作。

记录在内存中记录后,会修改redo log的记录,增加一行记录,其内容就是在哪个数据页上需要修改的内容。

之后,将事务的状态设置为prepare,表示事务已准备好提交。

MySQL Server层处理完事务后,会将事务的状态设置为commit,即提交事务。

重做日志收到事务提交请求后,会将刚刚写入内存的操作记录写入磁盘,从而完成整个日志记录过程。

19、binlog是什么概念射频卡多线程读写原理及其实现 修改密码,起什么作用,能不能crash-safe?20、什么是两阶段提交?

MySQL将redo log的写入分为两个步骤:prepare和commit,然后穿插写入binlog,也就是“两阶段commit”。

两阶段提交是为了保持两个状态在逻辑上一致。redolog 用于在主机发生故障时恢复未更新的物理数据,binlog 用于备份操作。两者本身是两个独立的个体,为了保持一致性,必须使用分布式事务解决方案来处理。

为什么需要两阶段提交?

恢复数据时,如果redolog状态为commit,则表示binlog也成功,直接恢复数据;如果redolog是prepare,则需要检查对应的binlog事务是否成功,决定是回滚还是执行。

21、MySQL如何知道binlog完整?

事务的 binlog 具有完整的格式:

22、什么是WAL技术,有什么优势?

WAL,中文全称是Write-Ahead Logging,它的重点是日志先写入内存,再写入磁盘。MySQL 执行更新操作后,它会在实际将数据写入磁盘之前记录日志。

优点是每次操作都不需要实时将数据写入磁盘,即使在crash后也可以通过redo log恢复,因此可以实现对SQL语句的快速响应。

23、binlog日志的三种格式

图片[1]-Server层按顺序执行SQL的步骤为:索引相关3-老王博客

binlog 日志有三种格式

报表格式

每条修改数据的 SQL 都会记录在 binlog 中

行格式

不记录有关 SQL 语句上下文的信息,只记录修改了哪条记录。

混合格式

其实就是Statement和Row的结合。一般语句修改使用语句格式保存binlog。比如有些功能,语句无法完成主从复制操作,binlog以行格式保存,MySQL会根据每条具体执行的SQL语句区分要记录的日志格式。

24、redo log 日志格式

重做日志缓冲区(在内存中)由端到端连接的四个文件组成:ib_logfile_1、ib_logfile_2、ib_logfile_3、ib_logfile_4。

25、可以执行得非常快的SQL语句执行得比预期慢很多。是什么原因?怎么解决?

原因:从大到小,可以分为四种情况

解决:

26、InnoDB数据页结构

一个数据页大致分为七个部分

数据相关27、MySQL如何保证数据不丢失?28、误删数据怎么办?

DBA 的核心工作是确保数据的完整性。首先,必须做好预防工作。预防大概是通过以下几点:

29、drop、truncate和delete的区别30、MySQL中有两个kill命令

杀不死的理由

31、如何理解MySQL边读边发送32、为什么MySQL的大表查询不爆内存?33、MySQL临时表的用法和特点34、MySQL存储引擎介绍(InnoDB、MyISAM、MEMORY)35、都说InnoDB好射频卡多线程读写原理及其实现 修改密码,那你要不要用内存引擎?36、数据库误操作如何进行数据恢复?

如果数据库在某个时间误操作,可以找到离误操作最近的时间节点的bin log,重放到临时数据库,然后选择误删的数据节点,恢复到在线数据库。

主从备份相关37、MySQL如何保证主从同步?

主从关系的建立:

MySQL主备切换流程:

一个事务完成同步过程:

38、什么是主从延时

执行同一事务时,主库和备库之间存在时间差。主要原因是:

39、为什么需要多线程复制策略?40、MySQL的并行策略有哪些?41、MySQL中的一主一备和一主多从有什么区别?

在主备双M架构下,主备切换只需将客户端流量切换到备库;而在主多从架构中,主备切换不仅将客户端流量切换到备库,还将客户端流量切换到备库。从库需要连接到新的主库。

42、如何解决主库的问题?

43、MySQL读写分离涉及读过期问题的几种解决方法?44、MySQL的并发链接和并发查询有什么区别?性能相关45、短时间内提升MySQL性能的方法46、为什么MySQL自增主键ID不连续?47、为什么InnoDB使用自增ID作为主键?48、如何最快的复制一张表?49、授予和刷新权限语句 50、你想使用分区表吗?51、join 用法 52、MySQL 有哪些自增ID?各自的场景是什么?53、MySQL内部如何生成Xid?

MySQL内部维护了一个全局变量global_query_id,每次执行一条语句(包括一条select语句)时都会给Query_id赋值,然后给这个变量加1。如果当前语句是事务执行的第一条语句,MySQL 也会将 Query_id 分配给事务的 Xid。

而global_query_id是纯内存变量,重启后会清零。所以你知道在同一个数据库实例中,不同事务的Xid可能是相同的。但是MySQL重启后会重新生成一个新的binlog文件,保证Xid在同一个binlog文件中必须是唯一的。

锁相关54、说说MySQL锁

55、什么是幻读?

在同一个事务中,前后两次查询相同范围的数据,第二次看到的是第一次没有查询到的数据。

出现幻觉的场景:

幻读引起的问题:

解决:

其他Why系列56、MySQL为什么会抖动?57、为什么删除表格后表格文件大小还是不变?58、count(*)实现及各种计数的比较59、orderby排序内部原理60、如何高效使用MySQL显式随机消息

持续更新。

参考:

程序员专属卫衣

产品直接购买链接

最后!我找到了程序员爱穿毛衣的原因

mysql的这些坑你踩过吗?很难预防

谈谈MySQL数据备份杀手binlog

MySQL数据查询会不会太OOM?

京东:MySQL主备延迟有哪些陷阱?主备倒换策略

4件专属极客毛衣,程序员秒懂!

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论