07 | 行锁功过:怎么减少行锁对性能的影响二阶段锁协议:在执行某条SQL时加锁,在事务提交后统一释放锁。设置锁等待的超时时间:innodb_lock_wait_timeout,默认情况下是50秒。发起死锁检测,innodb_deadlock_detect设置为on,默认情况下是on,缺点就是会耗费大量的CPU资源(发现死锁后主动回滚某一个事务,让其他事务得以继续执行)。如果你的事务中需要锁多个行
《沉淀》是云栖社区品牌栏目,在品味技术人百味人生的同时,也能够帮助你沉淀技术,获得点拨。工作中,如果有不错的大牛让你受益匪浅,也欢迎通过电子邮件(lose.zy@alibaba-inc.com)推荐采访,让更多人受益。我们的想法是:“如果你觉得某个技术挺棒的,不妨品味这些技术人背后的沉淀。” 认为,MySQL设计简单,非常适合初创公司使用 (真
23 | MySQL是怎么保证数据不丢失的?事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。每一个线程都会分配一个binlog cache,由参数binlog_cache_size控制单个线程内binlog cache的大小,如果超过了这个参数规定的大小,那么就会暂存到磁盘的临时空间中。在事务提价后,会清空binlog ca
        如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。    &nbsp
05 | 深入浅出索引(下)覆盖索引:如果查找的列本身就在二级索引上,那么就不要回表了,这样子的索引叫做覆盖索引,通常用来减少回表的次数以提高性能。联合索引:使用多个字段组合的索引,假设有联合索引(a,b),那么在索引树中它会先根据a的大小进行排序,如果有相同值的a在按照b的大小进行排序。最左前缀:可以是联合索引的最左N个字段,比如说有联合索引(a,b,c),那么等值查询条件是a = 1的时候会用
01 | 基础架构:一条SQL查询语句是如何执行的?MySQL架构图左侧图是老师原本的图,右侧是个人理解所画的,按照在文中的理论来说,个人认为应该是先查询缓存,如果查不到才会进行词法分析,比如有一条SQL:select * from T where ID = 10;,先去缓存中以该条SQL为key开始查询缓存,如果没查询到才会开始解析该SQL,通过select关键词分析可以知道该条SQL是要做
索引维护image.pngB+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行 ID 值为 700,则只需要在 R5 的记录后面插入一个新记录。如果新插入的 ID 值为 400,就相对麻烦了,需要逻辑上挪动后面的数据,空出位置。而更糟的情况是,如果 R5 所在的数据页已经满了,根据 B+ 树的算法,这时候需要申请一个新的数据页,然后挪动部分数据过去。这个过
[3. 事务隔离:为什么你改了我还看不见?]基本概念复习:事务的特性:原子性、一致性、隔离性、持久性多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读事务隔离级别:读未提交、读提交、可重复读、串行化 一.Mysql的隔离级别1.读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。(可以读到其他事务未提交的数)2.读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。(
课程内容1.基础架构:一条SQL查询语句是如何执行的?首先我们在学习Mysql的时候,一开始是不会学习很深的原理的都是先学习操作。比如下面这条SQL查询语句。mysql> select * from T where ID=10;可以知道我们是查询当ID=10时所有字段的内容。但现在我们要把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,能够对 MySQL 有更深入的理
03 | 事务隔离:为什么你改了我还看不见事务的特性:ACID,即对应原子性、一致性、隔离性、持久性。通过undo log来保证原子性,能够撤销事务内的所以操作来保证原子性,要么是全部都成功,通过redo log来保证持久性,会根据策略进行刷脏,通过锁+MVCC的方式来保证隔离性,而一致性指的是从一个正确的状态迁移到另外一个正确的状态下,其实就是通过事务中的AID来保证C。并发事务可能出现的问题:
04 | 深入浅出索引(上)B+树特点:1、非叶子结点不保存数据,只用于索引,所有数据保存在叶子结点。2、叶子结点之间使用指针相连,并且按照从小到大的顺序排列。3、子结点元素中的最大值或是最小值出现在父结点的元素中。哈希索引:以键值对的结构存储数据,只要输入键就可以找到对应的值,通过key计算出它要存储的位置,但可能会发生碰撞,就是不同的key落到同一个位置上了,这就形成了链表,是不是就是Hash
转载 10月前
58阅读
14 | count(*) 这么慢,我该怎么办?InnoDB下count的实现方式是一行一行地读取数据然后累积计数,这也是为什么记录越来越多会导致查询越来越慢。之所以这么设计是因为一行数据可能存在多个版本,InnoDB也无法确定,只能一行一行地获取并判断。InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*
转载 3月前
13阅读
12 | 为什么我的MySQL会抖一下?这一篇将的云里雾里的感觉,比如数据页和redo log的脏页到底是一起刷还是分开刷的,还有它们之间的LSN是如何比较的,这部分应该属于很复杂的内容,老师说后续的篇章会阐述这块的内容,等着吧。内存中的数据页什么情况下会刷盘redo log缓冲池满了,放不下脏页了(在这种情况下个人理解也会触发redo log刷盘)。系统内存不足,当需要新的数据页而内存不足时
06 | 全局锁和表锁:给表加个字段怎么有这么多阻碍全局锁:对整个数据库实例加读锁,命令是Flush tables with read lock,使用这个命令后其他线程的增删改、修改表结构、建表将会被阻塞(使用unlock tables可以解除)。主要用来做全局备份。为什么使用全局锁而不要使用全库只读(set global readonly = true):一方面是readonly通常会被用来做其
一.概述[1.基础架构:一条SQL查询语句是如何执行的?]Mysql可以分为Server层和存储引擎两部分下面的是mysql的逻辑架构图1.Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。且****不同的存储引擎共用一个Se
1.基础架构:一条sql查询语句是如何执行的?mysql> select * from T where ID=10;.基础架构:一条sql更新语句是如何执行的?mysql> update T set c=c+1 where ID=2; redo log(1)存储引擎的日志,InnoDB特有的;(2)物理日志(3)循环写,空间固定会用完;binlog (1)server端日志,
        在深入MySQL之前, 不妨分析一下如下的sql语句是如何在MySQL执行的呢?        select * from t where id = 10         
24 | MySQL是怎么保证主备一致的?主从同步流程:在备库上执行change master命令,设置主库的IP、端口、用户、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。在备库上执行start slave命令,这个时候会启动两个线程,一个是IO_Thread、一个是SQL_Thread,其中IO_Thread负责与主库建立连接。主库校验完用户密码后,按照备库指定的
转载 2021-04-02 10:58:03
276阅读
2评论
务的特性:原子性、一致性、隔离性、持久性多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读事务隔离级别:读未提交、读提交、可重复读、串行化不同事务隔离级别的区别: 4.1 读未提交:一个事务还未提交,它所做的变更就可以被别的事务看到 4.2 读提交:一个事务提交之后,它所做的变更才可以被别的事务看到 4.3 可重复读:一个事务执行过程中看到的数据是一致的。未提交的更改对其他事务是不可见
此文为极客时间:MySQL实战45的 3、8、18、19节事务相关部分的总结一、事务的启动方式mysql 主要有两种事务的启动方式: begin 或 start transaction显式启动事务。对应的提交语句是 commit ,回滚是 rollback set autocommit = 0关闭自动提交,然后在执行第一条 sql 的时候启动事务,这个事务会一直持续到你主动 commit 或者
转载 2023-07-02 20:26:55
171阅读
  • 1
  • 2
  • 3
  • 4
  • 5