首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《面试八股文》之 MySql 35卷

22.redolog 是怎么记录日志? 23.redolog 和 binlog 区别是什么? 24.说一说 mvcc 吧,什么作用? 25.一条 Sql 语句查询一直慢会是什么原因?...想想,如果没有目录会怎么样,最差结果是你可能翻到字典最后一页才找到你想要找字。 索引就「相当于我们字典目录」,可以极大提高我们在数据库查询效率。 8.索引失效场景哪些?...而且在数据库基于范围查询是非常频繁,效率更高。 10.WAl 是什么?什么好处?...假设事务A对某些行内容作了更改,但是还未提交,此时事务B插入了与事务A更改前记录相同记录行,并且事务A提交之前先提交了,而这时,事务A查询,会发现「好像刚刚更改对于某些数据未起作用」,但其实是事务...25.一条 Sql 语句查询一直慢会是什么原因?

1.1K21

如果有人问你数据库原理,叫他看这篇文章-4

这个算法原理是把更多历史记录考虑进来。简单LRU(也就是 LRU-1),只考虑最后一次使用数据。...由于检查循环是昂贵所有锁组成图表是很庞大),经常会通过简单途径解决:使用超时设定。如果一个锁在超时时间内没有加上,那事务就进入死锁状态。...2) Redo阶段:这一关从分析中选中一条日志记录开始,使用 REDO 来将数据库恢复到崩溃之前状态REDO阶段,REDO日志按照时间顺序处理(使用LSN)。...3) Undo阶段:这一阶段回滚所有崩溃时未完成事务。回滚从每个事务最后一条日志开始,并且按照时间倒序处理UNDO日志(使用日志记录PrevLSN)。...对于哪些需要 REDO 哪些需要 UNDO 信息 2 个内存表: 事务表(保存当前所有事务状态) 脏页表(保存哪些数据需要写入磁盘) 当新事务产生时,这两个表由缓存管理器和事务管理器更新。

79620
您找到你想要的搜索结果了吗?
是的
没有找到

10 个经典 Java 集合面试题,看你能否答得上来?(会员专享)

2、内连接 基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段; 从左表取出每一条记录,去右表所有记录进行匹配:匹配必须是某个条件左表与右表相同最终才会保留结果...其中 union 选项 2 个。ALL:保留所有;Distinct(默认):去重。 应用:查询同一张表,但是不同需求;查询多张表,多张表结构完全一致,保存数据也是一样。...联合查询,order by 不能直接使用。需要对查询语句使用括号才行。另外需要配合 limit 使用。 5、索引 如果说数据库表数据是一本书,那么索引就是书目录。...2、事务 ACID 是什么?事务并发会产生哪些问题? 3、数据库性能优化哪些方式? 9、数据库笔试题 (1)用一条 SQL 语句查询出每门课都大于 80 分学生姓名 ?...① 查询起飞城市是北京所有航班,按到达城市名字排序 ② 查询北京到上海所有航班记录(起飞城市,到达城市,起飞时间,航班号) ③ 查询具体某一天(2005-5-8)北京到上海航班次数

79130

我通过六个 MySQL 死锁案例,终于理解了死锁原因

对于这个问题改进很简单,直接把所有分配到借款人直接一次锁住就行了。...案例二 开发,经常会做这类判断需求:根据字段值查询索引),如果不存在,则插入;否则更新。...但是,删除状态记录会在索引存放一段时间。) RR隔离级别下,唯一索引上满足查询条件,但是却是删除记录,如何加锁?...因此,为了修改一条记录,InnoDB内部如何处理:根据给定查询条件,找到对应记录所在页面; 对页面加上X锁(RWLock),然后页面内寻找满足条件记录持有页面锁情况下,对满足条件记录加事务锁...此时,行锁获取没有任何锁保护,因此加上行锁之后,记录可能已经被并发修改。因此,此时要重新加回页面锁,重新判断记录状态,重新页面锁保护下,对记录加锁。

79531

Mysql关于锁方面和事务方面的问题

,也支持表级锁 二 数据库事务四大特性ACID 原子性(Atomic) 原子性是指事务包含所有操作要么全部成功,要么全部失败回滚 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态...如果此时又有一个事务对该记录进行了修改,则undo log日志又会增加一条日志。 这样就是快照读版本实现了。...这是因为比如A事务需要修改操作所有记录,此时B事务使用主键索引id来进行where条件查询来进行删除操作,此时只需要锁住where命中id记录即可,那么就能防止事务A出现幻读现象。...例子1:比如现在事务A要删除一条不存在id为7记录,此时事务B要新增一条id为8记录,会发现事务B一直 处于等待,这是因为精准查询全部都不命中,会对该记录范围加Gap锁。...RR隔离级别下,如果删、改、查语句where条件走是主键索引或者唯一索引 i. where条件全部命中,则给该记录加上记录锁。

57720

Quartz数据库表分析【面试+工作】

,这也是我们使用最多触发器,配置文件做如下配置,即可在qrtz_cron_triggers生成记录: ?...相同trigger和task,每触发一次都会创建一个实例;从刚被创建ACQUIRED状态,到EXECUTING状态最后执行完从数据库删除; 6.qrtz_triggers 存储定义trigger...和qrtz_fired_triggers存放不一样,不管trigger触发了多少次都只有一条记录,TRIGGER_STATE用来标识当前trigger状态;firstCalendarTask每天执行一次...查询保存在数据CronCalendar: ?...记录最后最新检查时间,quartz.properties设置了CHECKIN_INTERVAL为1000,也就是每秒检查一次; 11.qrtz_locks Quartz提供锁表,为多个节点调度提供分布式锁

2.2K40

MySQL锁

意思就是说MyISAM执行查询语句前,会自动给涉及所有表加读锁,执行更新语句(增删改操作)前,会自动给涉及表加写锁,这个过程并不需要用户干预。   ...MDL锁:事务,InnoDB会给涉及所有加上一个MDL锁,其他事务就不可以执行任何DDL语句操作。...(亲测只要在事务不管查询语句还是更新语句,涉及到表都会被加上MDL锁)   这三种锁,是InnoDB内部使用锁,是自动实现,不需要用户干预。...next-key锁(记录所和间隙锁组合)   当InnoDB扫描索引记录时,会先对选中索引记录加上记录锁(record Lock),再对索引记录两遍间隙加上间隙锁(gap lock)。   ...事务混合使用存储引擎会怎样?   MySQL服务层不管理事务,事务是由下层存储引擎实现(表锁是由MySQL服务层实现),所以同一个事务,使用多种存储引擎表是风险

1.8K10

一条简单更新语句,MySQL是如何加锁

也就是说一个事务不管有多少条增删改,都是加锁阶段加锁, commit 后,进入解锁阶段,才会全部解锁。...前提五:SQL执行计划是什么?索引扫描?还是全表扫描 根据上面的前提条件,可以九种组合,当然还没有列举完全。...与组合er唯一区别,组合二最多只有一个满足条件记录,而在组合三会将所有满足条件记录全部加上锁。 结论:若id列上有非唯一索引,那么对应所有满足SQL查询条件记录,都会加上锁。...一个等值查询,最多只能返回一条满足条件记录,而且新相同取值记录是无法插入。...直至第一条出现不满足条件记录,此时,不需要给记录加上X锁,但是需要给Gap加上Gap锁吗,最后返回结果。

3.7K20

自动驾驶 Apollo 源码分析系列,系统监控篇(三):Monitor模块如何监控通信中 channel 时延?

通过 channel 名字获取相应 Reader 和最后一条 msg 判断是否 Reader,如果没有提示这个channel 没有注册,并返回 通过 reader 判断时延,如果小于0或者大于则设置状态为...通过 MonitorManager 去创建不同 Reader,然后开始观测,并获取这个 channel 最后一次信息,然后保存下来并返回。...这个逻辑就是一个 LatencyRecordMap 中有一组 LatencyRecord,获取第一条记录开始时间,获取最后一条结束时间。...是从点云信息到各个模块输出时间,也就是端到端时间。 这里个重要变量kE2EStartPoint 。 它是什么呢?其实是一条字符串,它被赋值为FLAGS_pointcloud_topic。...也就是: E2E Latency 逻辑: 记录一条点云数据开始时间 依次记录那些不是点云数据记录开始时间,计算它们之间差值,就成了这一个测试周期 E2E 时延。

83620

如何能在实战完成分布式事务

背景 一年前我写过一篇关于分布式事务文章: 再有人问你分布式事务,把这篇扔给他,在这篇文章我详细介绍了分布式事务是什么,实现分布式事务哪些常用方案,但是其中东西很多是偏于理论,很多读者对其真正在实战上使用可能还是有点差距...3:支付券 Step 4:支付金币 Step 5:更新订单状态为已完成 差不多这里就是简简单单4行,很多人会把这5步直接放进事务之中,也就是加上@Transactional注解,但其实加上这个注解不仅没有起到事务作用...了这个重做记录之后我们只需要在每一次执行记录下我们的当前资源transaction_record,回滚时候根据我们OrderId将所有的资源回滚,我们优化之后代码可以如下: int...我们分布式任务逻辑每次查询我们处于订单状态为init 并且 创建时间超过一分钟订单,我们对其进行回滚,回滚完成之后将订单状态置为FAILED。...所以幂等我们重试时候非常重要,实现幂等关键是什么?我们想让多次操作和一次操作是一样,那么我们只需要比较第一次已经做过了,而这个标记通过什么来完成呢?

42210

SQL语句执行底层实现

本文参考了极客时间里林晓斌老师【MySQL实战45讲】 一、一条查询语句执行流程 1.MySQL逻辑架构 image.png Server层包含MySQL大多数核心服务,和所有内置函数,所有跨存储引擎功能实现...) 1.redo log模块 先分析问题,如果每一次更新操作都需要写进磁盘,然后磁盘也要找到对应那条记录,然后再更新,整个过程IO成本、查找成本都很高 这时候就需要redo log了,当一条记录需要更新时候...,binlog也还没有记录,所以不会影响 redo log已经了commit标识,则直接提交事务,同时因为binlog记录,则恢复数据也不受影响 三、事务隔离 MySQL,事务是引擎层实现,...最后,事务B读取到张三工资为8000数据即为脏数据,事务B做了一次脏读 不可重复读 一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。...所以从A角度看,V1、V2值是1,V3值是2 4.事务隔离实现 以可重复读为例,MySQL,每条记录在更新时候都会同时记录一条回滚操作。

1.5K20

MySQL数据库事务隔离级别

数据库隔离级别有四种,应用《高性能mysql》一书中说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,最后加上 1 #可选参数:READ-UNCOMMITTED...,B,A修改事务隔离级别,B开启事务并修改数据,然后A事务查看B事务修改效果: 1.READ-UNCOMMITTED(读取未提交内容)级别 1)A修改事务级别并开始事务,对user表做一次查询...2)B更新一条记录 3)此时B事务还未提交,A事务内做一次查询,发现查询结果已经改变 4)B进行事务回滚 5)A再做一次查询查询结果又变回去了 6)A表对user表数据进行修改 7)B表重新开始事务后...事务对某条记录修改,会对记录加上行共享锁,直到事务结束才会释放。...B修改处于等待状态,等待A事务结束,最后超时,说明A在对user表做查询操作后,对表加上了共享锁 SERIALIZABLE事务隔离级别最严厉,进行查询时就会对表或行加上共享锁,其他事务对该表将只能进行读操作

2.4K71

关于MySQL锁机制详解

意思就是说MyISAM执行查询语句前,会自动给涉及所有表加读锁,执行更新语句(增删改操作)前,会自动给涉及表加写锁,这个过程并不需要用户干预。   ...MDL锁:事务,InnoDB会给涉及所有加上一个MDL锁,其他事务就不可以执行任何DDL语句操作。...(亲测只要在事务不管查询语句还是更新语句,涉及到表都会被加上MDL锁)   这三种锁,是InnoDB内部使用锁,是自动实现,不需要用户干预。...next-key锁(记录所和间隙锁组合)   当InnoDB扫描索引记录时,会先对选中索引记录加上记录锁(record Lock),再对索引记录两遍间隙加上间隙锁(gap lock)。   ...事务混合使用存储引擎会怎样?   MySQL服务层不管理事务,事务是由下层存储引擎实现(表锁是由MySQL服务层实现),所以同一个事务,使用多种存储引擎表是风险

47730

一文讲清楚MySQL事务隔离级别和实现原理,开发人员必备知识点

此时,事务B中使用 select 语句进行查询,我们发现在事务A提交之前,事务B查询记录 age 一直是1,直到事务A提交,此时事务B select 查询,发现 age 值已经是 10 了...这就出现了一个问题,同一事务(本例事务B),事务不同时刻同样查询条件,查询出来记录内容是不一样,事务A提交影响了事务B查询结果,这就是不可重复读,也就是读提交隔离级别。 ?...还是要强调,两者主要区别就是快照创建上,可重复读仅在事务开始是创建一次,而读提交每次执行语句时候都要重新创建一次。 并发写问题 存在这情况,两个事务,对同一条数据做修改。...MySQL 会为这张表中所有行加行锁,没错,是所有行。但是呢,加上行锁后,MySQL 会进行一遍过滤,发现不满足行就释放锁,最终只留下符合条件行。...这是索引情况,如果 age 不是索引列,那么数据库会为整个表加上间隙锁。所以,如果是没有索引的话,不管 age 是否大于等于30,都要等待事务A提交才可以成功插入。

1.1K10

MySQL死锁产生原因和解决方法

对于这个问题改进很简单,直接把所有分配到借款人直接一次锁住就行了。...案例二 开发,经常会做这类判断需求:根据字段值查询索引),如果不存在,则插入;否则更新。...(注:这些标识为删除状态记录,后续会由后台Purge操作进行回收,物理删除。但是,删除状态记录会在索引存放一段时间。) RR隔离级别下,唯一索引上满足查询条件,但是却是删除记录,如何加锁?...因此,为了修改一条记录,InnoDB内部如何处理: 根据给定查询条件,找到对应记录所在页面; 对页面加上X锁(RWLock),然后页面内寻找满足条件记录持有页面锁情况下,对满足条件记录加事务锁...此时,行锁获取没有任何锁保护,因此加上行锁之后,记录可能已经被并发修改。因此,此时要重新加回页面锁,重新判断记录状态,重新页面锁保护下,对记录加锁。

5.3K40

逻辑删除还是物理删除

一个携程网工作DBA朋友,他说“如果那里数据出了问题,停机维护成本还是挺大,因为好多人都用携程app来买机票跟酒店” 他以前跟我说过一次,携程网停机一小时损失差不多是一两百万情形,如果业务系统停机还好说...具体执行时这样: 平时我们数据库执行SQL语句时候是这样,这些操作记录在binlog日志里面,恢复数据时候,你们编写程序提取binlog日志里面的内容然后逐条分析,看看是那一条sql语句导致误删除...LIMIT 1000,20 ; 我想从1000条数据取20条记录,这个语句就写成了limit 1000,20 ,那这条sql执行时候,数据库可要从第一条计数,数到1000条时候,开始往后查询20条数据...,当然我现在要想查询10万条以后数据, 数据库就得从头计数,从第一条数到10万条记录,然后再往后查询你想要数据,越是数据越多,这个limit后面你所要查询就越慢,所以我们要像一个办法去解决分页查询问题...当然了,一些必须要物理删除情形下,还是折中加速分页查询方法 什么样数据不适合物理删除 核心业务表数据不建议做物理删除,因为物理删除后,真的就只能停机恢复数据,这个代价真的非常大,反之我们可以对需要删除记录状态变更

1.3K30

MySQL 死锁产生原因和解决方法

对于这个问题改进很简单,直接把所有分配到借款人直接一次锁住就行了。...案例二 开发,经常会做这类判断需求:根据字段值查询索引),如果不存在,则插入;否则更新。...(注:这些标识为删除状态记录,后续会由后台 Purge 操作进行回收,物理删除。但是,删除状态记录会在索引存放一段时间。)...因此,为了修改一条记录,InnoDB 内部如何处理: 根据给定查询条件,找到对应记录所在页面; 对页面加上 X 锁 (RWLock),然后页面内寻找满足条件记录持有页面锁情况下,对满足条件记录加事务锁...此时,行锁获取没有任何锁保护,因此加上行锁之后,记录可能已经被并发修改。因此,此时要重新加回页面锁,重新判断记录状态,重新页面锁保护下,对记录加锁。

70361

这六个 MySQL 死锁案例,能让你理解死锁原因!

对于这个问题改进很简单,直接把所有分配到借款人直接一次锁住就行了。...案例二 开发,经常会做这类判断需求:根据字段值查询索引),如果不存在,则插入;否则更新。...(注:这些标识为删除状态记录,后续会由后台Purge操作进行回收,物理删除。但是,删除状态记录会在索引存放一段时间。) RR隔离级别下,唯一索引上满足查询条件,但是却是删除记录,如何加锁?...因此,为了修改一条记录,InnoDB内部如何处理: 根据给定查询条件,找到对应记录所在页面; 对页面加上X锁(RWLock),然后页面内寻找满足条件记录持有页面锁情况下,对满足条件记录加事务锁...此时,行锁获取没有任何锁保护,因此加上行锁之后,记录可能已经被并发修改。因此,此时要重新加回页面锁,重新判断记录状态,重新页面锁保护下,对记录加锁。

40410

MySQL更新语句加锁

也就是说一个事务不管有多少条增删改,都是加锁阶段加锁, commit 后,进入解锁阶段,才会全部解锁。...5、SQL执行计划是什么?索引扫描?还是全表扫描 根据上面的前提条件,可以九种组合,当然还没有列举完全。...与组合er唯一区别,组合二最多只有一个满足条件记录,而在组合三会将所有满足条件记录全部加上锁。 结论:若id列上有非唯一索引,那么对应所有满足SQL查询条件记录,都会加上锁。...一个等值查询,最多只能返回一条满足条件记录,而且新相同取值记录是无法插入。...直至第一条出现不满足条件记录,此时,不需要给记录加上X锁,但是需要给Gap加上Gap锁吗,最后返回结果。

2K20

这六个 MySQL 死锁案例,能让你理解死锁原因!

对于这个问题改进很简单,直接把所有分配到借款人直接一次锁住就行了。...案例二 开发,经常会做这类判断需求:根据字段值查询索引),如果不存在,则插入;否则更新。...但是,删除状态记录会在索引存放一段时间。) RR隔离级别下,唯一索引上满足查询条件,但是却是删除记录,如何加锁?...因此,为了修改一条记录,InnoDB内部如何处理: 根据给定查询条件,找到对应记录所在页面; 对页面加上X锁(RWLock),然后页面内寻找满足条件记录持有页面锁情况下,对满足条件记录加事务锁...此时,行锁获取没有任何锁保护,因此加上行锁之后,记录可能已经被并发修改。因此,此时要重新加回页面锁,重新判断记录状态,重新页面锁保护下,对记录加锁。

94240

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券