Undo Log,Redo Log和Binlog
- MySQL隔离级别,一致性视图,undo log,redo log和binglog MySQL索引结构,回表,最左前缀原则
- Mysql相关 1、innoDB跟myisam的区别; 2、InnoDB的索引实现,唯一索引、覆盖索引、前缀索引、联合索引、最左匹配原则; 3、什么时候需要索引,以及如何选择索引; 4、MVCC的原理、redo、undo、回滚段; 5、自增锁、共享锁、排他锁、意向锁、插入意向锁、记录锁、间隙锁是什么;
- 说一下undolog, redolog 9、MySQL如何保证redo log和binlog的数据是一致的,如果一个sql执行很慢,你能分析一下原因吗? 10、为什么数据库会选错了索引
- 5、MVCC,binlog,redolog,undolog都是什么,起什么作用? (1)undolog 也就是我们常说的回滚日志文件 主要用于事务中执行失败,进行回滚,以及MVCC中对于数据历史版本的查看。由引擎层的InnoDB引擎实现,是逻辑日志,记录数据修改被修改前的值,比如"把id='B' 修改为id = 'B2' ,那么undo日志就会用来存放id ='B'的记录”。当一条数据需要更新前,会先把修改前的记录存储在undolog中,如果这个修改出现异常,则会使用undo日志来实现回滚操作,保证事务的一致性。当事务提交之后,undo log并不能立马被删除,而是会被放到待清理链表中,待判断没有事物用到该版本的信息时才可以清理相应undolog。它保存了事务发生之前的数据的一个版本,用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。 (2)redoLog 是重做日志文件是记录数据修改之后的值,用于持久化到磁盘中。redo log包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。由引擎层的InnoDB引擎实现,是物理日志,记录的是物理数据页修改的信息,比如“某个数据页上内容发生了哪些改动”。当一条数据需要更新时,InnoDB会先将数据更新,然后记录redoLog 在内存中,然后找个时间将redoLog的操作执行到磁盘上的文件上。不管是否提交成功我都记录,你要是回滚了,那我连回滚的修改也记录。它确保了事务的持久性。 (3)MVCC多版本并发控制是MySQL中基于乐观锁理论实现隔离级别的方式,用于读已提交和可重复读取隔离级别的实现。在MySQL中,会在表中每一条数据后面添加两个字段:最近修改该行数据的事务ID,指向该行(undolog表中)回滚段的指针。Read View判断行的可见性,创建一个新事务时,copy一份当前系统中的活跃事务列表。意思是,当前不应该被本事务看到的其他事务id列表。 (4)binlog由Mysql的Server层实现,是逻辑日志,记录的是sql语句的原始逻辑,比如"把id='B' 修改为id = ‘B2’。binlog会写入指定大小的物理文件中,是追加写入的,当前文件写满则会创建新的文件写入。 产生:事务提交的时候,一次性将事务中的sql语句,按照一定的格式记录到binlog中。用于复制和恢复在主从复制中,从库利用主库上的binlog进行重播(执行日志中记录的修改逻辑),实现主从同步。业务数据不一致或者错了,用binlog恢复。
- 8.mysql的索引结构和优点 9.覆盖索引,事务acid如何实现(mvcc),如何回滚(根据undolog) 10.什么是回表(讲覆盖索引的时候提到不用回表)
- binlog 日志和 redolog 日志清楚吗? 说了两个日志的作用以及两阶段提交 mysql 有那些存储引擎,有哪些区别 mysql 索引在什么情况下会失效 mysql 主从同步怎么搞的?分哪几个过程?如果有一台新机器要加到从机里,怎么个过程。 乐观锁与悲观锁的区别? binlog 日志是 master 推的还是 salve 来拉的?
- 4、Spring的@Transactional如何实现的? (1)配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional标识。 (2)spring 在启动的时候会去解析生成相关的bean,这时候会查看拥有相关注解的类和方法,并且为这些类和方法生成代理,并根据@Transaction的相关参数进行相关配置注入,这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。 (3)真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的
- 隔离级别 慢查询如何定位?如何优化?遇见过什么样的case,怎么解决的? 项目用到了分库分表,分库一定会提升性能呢?分库分表的设计? 分布式事务出现过不一致吗?为什么?怎么解决?有什么方法避免?怎么监控?监控到怎么处理?什么时候需要人工接入?mysql innodb下,能不能不设置主键?主键可以为空吗?可以允许几个?主键跟非主键的区别?索引存储形式? 联合索引失效问题?索引失效问题? mysql索引,覆盖索引?回表?B+树叶子节点存储什么?为什么不用AVL树? 数据库锁,乐观,悲观,record lock?next-key lock? mysql mvcc 双写机制?binlog跟redo log先后顺序?一个写不成功怎么处理?当前读和快照读?事务隔离级别?线上sql优化经验? 分布式事务?用过哪些方式?还知道哪些方式?怎么实现?有没有想过自己实现?避免哪些坑? 跨库聚合怎么实现?分页?第几页?下一页? 分库分表 聚合查询 limit怎么实现 top的实现 不停机扩容?分表避免冷热?不停机扩库?不停机扩表?跨库事务? 分库分表为什么这么设计?数据增长怎么做?怎么扩容?数据不均匀怎么办?冷热数据怎么分离?聚合怎么做?跨库聚合怎么做,查询怎么做?跨库分页怎么做? mysql 线上的组群模式?一主多从?为什么这样?强一致性如何保证?为了解决读写分离吗?是为了一主多备吗?主库crash掉怎么办?从库呢? 分布式事务怎么做?什么原理?怎么实现的?出现过事务不一致性吗?为什么?怎么解决的? 访问请求暴增怎么做?怎么缓解压力?
- MySQL做过哪些优化?覆盖索引?limit两个参数区别?MySQL分页优化的其他方法 SQL调优你会怎么做?索引的数据结构?MYSQL的事务有哪些?比较常用的是哪些? 关键SQL优化怎么优化的?为什么性能不好?主键必须有吗? MySQL有哪几种索引?聚簇索引和辅助索引的区别?索引数据结构?为什么用B+树? MVCC?版本号怎么变化的?更新的数据的时候怎么确定版本的?幻读怎么解决的? 一个SQL怎么走的索引?MYSQL会怎么选的?MySQL哪些不正规的写法无法命中索引? MySQL有哪几种日志?redo log主要有什么用?提交之后100%落盘吗?为什么MySQL要写到redo log buff内存?
- mysql 自动提交事物:autocommit=20,binlog记录 5、mysql几种锁,区别? 3种,行(单行),表(单表),页(一组数据)。 6、100万页数据,分页查询:从100万跳转到100万01页最快,还是直接输入100万最快,为什么? 7、如何使用避免最小粒度的行锁:参数?
- 5、订阅分库分表的 Binlog 怎么订阅? 6、分库分表的数据源中假如存在主键冲突要怎么解决? 7、怎么保证下游对 Binlog 的消费顺序?
- 1、MySQL中常用存储引擎有哪些?它们相互之间有什么区别? 2、MySQL 索引在什么情况下会失效? (1)当使用like关键字时,如果查询条件以%开头,索引无效;当like前缀没有%,后缀有%时,索引依然有效。 (2)当使用or关键字时,or语句前后没有同时使用索引或当or关键字左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效。 (3)使用组合索引时,如果查询条件不包括该组合索引全部字段或查询条件不是该组合索引左边第一个字段时,索引失效。 (4)数据类型出现隐式转化。如某个索引字段的数据类型为varchar,查询内容为123,如不加引号的话可能会自动转换为int型,使索引无效,产生全表扫描。 (5)在索引字段上使用not及运算符 (6)对索引字段进行计算操作、字段上使用函数,索引失效。 3、innodb 与myisam 的区别? 4、MySQL 的索引模型; 5、MySQL 主从同步怎么搞的?分哪几个过程?如果有一台新机器要加到从机里,怎么个过程。 6、乐观锁与悲观锁的区别? 7、binlog 日志是 master 推的还是 salve 来拉的?
- 数据库,MVCC的实现讲一下?多版本体现在哪里实现上是怎样的?B+树索引有了解吗?怎么解决不可重复读的问题? MySQL 的主从同步机制?幻读是什么? 使用 MySQL 的心得?加 limit, 执行计划,是否有排序,是否可以使用覆盖索引解决排序,不要将自增主键给外部
欢迎关注和点赞,以及总结的分类面试题https://github.com/zhendiao/JavaInterview