Mysql实战45讲学习笔记
【Geek 时间 Mysql实战45讲 】
学习笔记
香山上的麻雀1008
大数据
展开
-
备用库做逻辑备份时,主库执行了一个DDL语句会怎么样
当备库用–single-transaction 做逻辑备份的时候,如果从主库的 binlog 传来一个 DDL 语句会怎么样?假设这个 DDL 是针对表 t1 的, 这里我把备份过程中几个关键的语句列出来: Q1:SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; Q2:START TRANSACTION WITH CONSISTENT SNAPSHOT; /* other tables */ Q3:SAVEPOINT sp; /* 时刻 1原创 2020-12-25 16:43:41 · 492 阅读 · 0 评论 -
Mysql的行锁(六)
Mysql的行锁是引擎层各个引擎独立实现的。 MyIsam引擎不支持行锁,意味着MyISAM表的并发只能用表锁,会影响业务并发度,但是InnoDB是支持行锁的。 行锁就是对数据库中某一行数据的加锁行为,行锁中也有一些特别的情况,如果考虑不全,就会导致非预期结果,比如接下来要说的两阶段锁。 两阶段锁 在事务中,行锁都是自动隐式开启的,某一行发生了数据修改行为,那么就会给这一行加上锁,一直到当前事务提交或回滚,行锁才会自动释放。 上图,假设id是表t的主键,事务B的执行会被阻塞,直到事务A执行commit之后原创 2020-12-25 10:34:26 · 382 阅读 · 3 评论 -
Mysql全局锁和表锁(五)
根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 对整个数据库实例加锁,mysql加全局读锁的方法:flush tables with read lock (FTWRL),当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 全局锁的典型使用场景是,做全库逻辑备份。也就是把整库每个表都select出来存成文本。 注意,在备份过程中整个库完全处于只读状态,原创 2020-12-23 20:42:40 · 340 阅读 · 1 评论 -
mysql 深入浅出索引(四)
执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 下面是这个表的初始化语句。 mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k))engine=InnoDB; insert into T values(100,1, 'aa'),(200,2,'b原创 2020-12-21 17:18:55 · 288 阅读 · 0 评论 -
Mysql如何避免长事务对业务的影响
这个问题可以从应用开发端和数据库端来看: 应用开发端: 确认是否使用了set autocommit=0。 这个确认工作可以在测试环境中开展,把MySQL的general_log开起来,然后随便跑一个业务逻辑,通过general_log的日志来确认。一般框架如果会设置这个值,也就会提供参数来控制行为,你的目标就是把它改成1。 确认是否有不必要的只读事务。有些框架会习惯不管什么语句先用begin/commit框起来。我见过有些是业务并没有这个需要,但是也把好几个select语句放到了事务中。这种只读事务可原创 2020-12-20 16:18:59 · 481 阅读 · 0 评论 -
深入浅出索引Mysql索引(三)
数据库索引的出现是为了提高数据查询的效率,就像书的目录一样。 索引常见的三种模型 哈希表,有序数组,搜索树。 哈希表 是一种以key-value存储数据的结构,我们只要输入待查找的键即可,当多个key值有相同的hash结果时,就会出现一种链表结构: 上图,user2和user4对应的key值都是N,查询user2的时候,就会先将ID_card_n2通过hash运算得到N,然后顺序遍历找到User2。 因为是key值的hash值确定索引的位置,这样做的好处,增加数据的时候插入会很快,等值查询时也很快,但转载 2020-12-20 16:08:43 · 301 阅读 · 1 评论 -
Mysql事务隔离(二)
文章目录mysql事务事务的四大属性ACID隔离性与隔离级别测试案例事务隔离的实现事务的启动方式总结 mysql事务 事务就是要保证一组数据库操作,要么全部成功,要么全部失败。 在 MySQL 中,事务支持是在引擎层实现的。 MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。 事务的四大属性ACID ACID(Atomicity、Consistency、Isolation、D原创 2020-11-25 19:58:14 · 503 阅读 · 0 评论 -
一条SQL查询语句时如何执行的(一)
一、Mysql的逻辑架构图 大体上Mysql可分为Server层和存储引擎层两部分。 Server层: 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层 主要负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5原创 2020-11-21 14:28:03 · 336 阅读 · 0 评论
分享