mysql 原理 ~ 二阶段提交协议通说】的更多相关文章

一 简介: 今天是第二篇,讲解的是mysql的事务日志 二 具体 1 WAL技术(先写日志,再写磁盘) 2 binlog redolog 二阶段提交协议     目的 保持 redo log和binlog之间的逻辑一致,这样采用binlog方式就能恢复数据     第一阶段先写redo log,处于prepare状态    1 redo log记录的是物理日志,数据页的具体修改操作    2 控制参数与原理 原理系列 1 mysql写日志过程 log_buff ---mysql写 (write)…
简介: 来说说索引吧目的:为了加快数据库的数据查找速度,索引应用而生基础知识基本定义  1 遍历 所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次.由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示.  3 深度 节点的层数  4 NX树 宽度定义为具有最多结点数的层中包含的结点数.数据模型的选择   目的 为了让一个查询尽量少地读磁盘,就必须让查询过程访问尽量少的数据库   1 让树容纳更多的子节点,…
原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c150d31e8d1b8b59243bd5&chksm=f3f9c508c48e4c1ea64b00b25c226efa2b9e32910f83290bf383ce0d16ee0991c42ad59527da&mpshare=1&scene=1&srcid=0928OiKJlDA…
背景 在使用Oracle或者其它数据库时,使用like 关键字进行模糊查询是大家经常使用的功能,在纯中文环境中使用非常好用,还有一些通配符可以使用,但是在纯英文环境中,会出现大小需要精确匹配的问题,主要原因还是字符串的问题 FL like '%{0}%' and 这里like后是一个字符串,这样必然会有大小敏感的问题.比如如下的大小混编的字段 解决方案 方案1 使用Oracle系统函数对需要查询的列字符串进行小写转换(大写也行,变量相关部分都是大写转换),如下所示: select * from…
说起MySQL的查询优化,相信大家积累一堆技巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必.因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用.   MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图.…
## 主键 超键 候选键 外键 (mysql数据库常见面试题) 数据库之互联网常用架构方案 数据库之互联网常用分库分表方案 分布式事务一致性解决方案 MySQL Explain详解 ## 数据库事务的四个特性及含义 (mysql数据库常见面试题) ## drop,delete与truncate的区别(mysql数据库常见面试题) ## 索引的工作原理及其种类(mysql数据库常见面试题) ## 连接的种类(mysql数据库常见面试题) ## 数据库优化的思路(mysql数据库常见面试题) ##…
  要了解数据库索引的底层原理,我们就得先了解一种叫树的数据结构,而树中很经典的一种数据结构就是二叉树!所以下面我们就从二叉树到平衡二叉树,再到B-树,最后到B+树来一步一步了解数据库索引底层的原理! 二叉树(Binary Search Trees)   二叉树是每个结点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查找树和二叉堆.二叉树有如下特性: 1.每个结点都包含一…
一.背景 昨天早上,交流群有一位同学提出了一个问题.看下图: 我不是大佬,而且当时我自己的想法也只是猜测,所以并没有回复那位同学,只是接下来自己做了一个测试验证一下. 他只简单了说了一句话,就是同样的sql,一个没加 order by 就全表扫描,一个加了 order by 就走索引了. 我们可以仔细点看一下他提供的图(主要分析子查询即可,就是关于表 B 的查询,因为只有表 B 的查询前后不一致),我们可以先得出两个前提: 1.首先可以肯定的是,where 条件中的 mobile 字段是没有索引…
MySQL基础: sql语句的执行过程: 连接器:登录连接sql数据库 分析器:分析解读sql语句,并检查是否符合SQL语法规则 优化器:对实现方式进行优化,比如在查询时决定使用哪个索引. 执行器:执行. 事务:一系列聚合性操作,一组不可分割的sql语句.要么全部执行,要么全部不执行. 原子性:不可分割.undo log保证可以回滚 隔离性:事务不可被其他事务干扰.MVCC保证. 一致性:数据库处理结果应与其所代表的客观世界中真实状况保持一致.由其他三个特性保证 持久性:即便故障也不应该使数据的…
一 简介:redo log二 文件   ib_logfile0 ib_logfile1 两个redo log 默认为一组 循环覆盖写入三 相关参数   innodb_log_file_size=256M 不能太大也不能太小,推荐256M  innodb_log_file_in_group=16M redo log buffer的大小,不宜太大  innodb_log_buffer_size=2 日志文件数量默认为2,可根据情况适当调节四 redo log 与binlog的不同  1 产生的机制不…
一 简介:今天来聊聊具体的线程和IO 二 具体线程与作用 1 master thread    mysql的主要工作触发线程 1 redo and binlog日志      2 合并插入缓冲.      3 脏页的刷新      4 undo页回收      5 产生一个ckp点 2 IO THREAD insert buffer thread->insert buffer merges插入缓冲线程 1个     log thread -> asynchronous log flushes…
一 简介:mysql是如何创建用户的二 基本语法:  1 grant 权限 on db.table to 'user'@'ip' identified by 'password'     目的 创建用户,如果已存在用户就修改密码  2 revoke 权限 for 'user'@'ip'  3 drop 'user'@'ip三 基本过程  0 'user'@'ip'为一个标准用户  1 grant会将执行的信息录入到mysql.user中,插入用户信息,更改权限设置  2 grant会将内存中维护…
一 简介:针对查询和事务的页在内存中的处理,是如何进行的 二 LRU算法 普通 : 实现的是末尾淘汰法,当整个链表已满时,淘汰尾部,将新的数据页加入头部 mysql_lru改进 : 分为两部分 yang和old,对过期页实行末尾淘汰没有问题,针对新插入的数据页需要做二次判断 1 如果数据页保持1S以上时间,则推进到yang头部 2 如果数据页不能保持1S,则依然保留到old区,等待被淘汰 改进优点:防止一次性的大查询读取的数据页污染整个LRU列表,影响整体的事务命中率 三 相关参数 1 inno…
一 简介:kill session为什么需要很久 二 kill语句分为三类  1 DML语句   2 select语句   3 DDL语句 三  kill都要做什么操作   1 kill对session的处理       1 正在执行的session        2 正在等待的session    2 把session的状态改成THD::KILLQUERY -> 给session发送一个信号->线程执行到判断session状态的逻辑->执行后续操作终止session四 kill慢的原因…
一 简介:今天来DDL的变革二 DDL演化方式:  1 copy table : 1 创建临时表2 copy数据到临时表 3 rename进行交换 缺点 1 阻塞事务 2占用磁盘空间  2 inplace : 1 在线更改表,不会拷贝临时表 缺点 1 阻塞事务  3 online_ddl :1 在线更改表,不会拷贝临时表 优点 1 不会阻塞事务  因此MySQL最新版本中,InnoDB支持了所谓的Online方式DDL.与以上两种方式相比,online方式支持DDL时不仅可以读,还可以写,对于d…
一 锁1 锁的定义   1 按照宏观角度     共享锁[S锁]     又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁.这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改.     排他锁[X锁]    又称写锁.若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁.这保证了其他事务在T释放A上的锁之前不能再读取和修改A.  2 按照微观角度…
简介: 事务隔离知多少内容  一 基础知识  1 事务特性 ACID   A 原子性 C 一致性 I 隔离性 D 持久性  2 并行事务出现的问题    1 脏读 读取了其他事务未提交的数据     2 不可重复性读 1 在同一个事务内多次查询的结果不一致 2 可以通过for update or RR模式的MVCC避免这种现象 3 针对的是update/delete操作      3 幻读 1 当前事务读第一次取到的数据比后来读取到数据条目少 通过 next  key lock避免 这里要注意…
一 普通sql执行的具体过程1 连接器  管理连接,权限验证2 分析器  词法分析,语法分析   比如 数据表和数据列是否存在, 别名是否有歧义,是否符合标准sql语法等3 优化器检测   执行计划生成,索引选择4 执行器   1 判断是否拥有操作权限->这里包含更为复杂的权限验证,比如触发器,存储过程等   2 执行sql,返回结果集到客户端5 存储引擎层  存储引擎层提供和server端进行交互的读写接口,存储真正的数据注意   1 本文不考虑查询缓存的情况,因为现在线上数据库都建议关闭查询…
一 简介:今天来聊聊double write 二 细节 1 Double write 是InnoDB在 tablespace(ibdata1)上的128个页(2个区)是2MB: 2 何谓页断裂 所谓页断裂是数据库宕机时(OS重启,或主机掉电重启),数据库页面只有部分写入磁盘,导致页面出现不一致的情况3 具体过程 为了解决 partial page write 问题 ,当mysql将脏数据flush到data file的时候, 先使用memcopy 将脏数据复制到内存中的double write…
一 简介:今天咱们来聊聊mysql的change buffer二 详细说明   1 +-change Buffer和数据页一样,也是物理页的一个组成部分,数据结构也是一颗B+树,这棵B+树放在共享表空间中,默认ibdata1中.change buffer 写入系统表空间机制应该和普通表的脏页刷新到磁盘是相同的机制--Checkpoint机制  2  具体查看   show engines inndo status 过滤   Ibuf: size 1, free list len 14316, s…
一 模式 RR模式二 mysql锁相关场景  1 有间隙的地方就可能有间隙锁,并非只有辅助索引的场景下才会存在gap lock,典型场景 id主键的范围查询  2 varchar的范围锁定原理和int类似,不过是按照字母排列顺序  3 rc模式同样可能存在间隙锁 典型场景 外键三 间隙锁加锁顺序 查询方式  1 等值查询,如果是唯一索引,next-key lock会退化为行锁,如果不是唯一索引,需要访问到第一个不满足条件的值,此时next-key lock会退化为间隙锁:  2 范围查询:无论是…
一 简介:今天咱们来聊聊 mysql 两阶段提交二 事务过程    perpare-commit 两个过程1  perpare阶段 redo日志   1.设置undo state=TRX_UNDO_PREPARED: //trx_undo_set_state_at_prepare调用   2.刷事务更新产生的redo日志:[步骤1产生的redo日志也会刷入]2   commit阶段 binlog日志  1.将事务产生的binlog写入文件,刷入磁盘:  2.设置undo页的状态,置为TRX_UN…
一 简介:今天咱们来聊聊checkpoint 二 定义: checkpoin是重做日志对数据页刷新到磁盘的操作做的检查点,通过LSN号保存记录,作用是当发生宕机等crash情况时,再次启动时会查询checkpoint点,在该检查点之后发生的事物修改恢复到磁盘. 三 作用: 1 缩短数据库的恢复时间 数据库恢复时间重做日志中记录了的checkpoint的位置,这个点之前的页已经刷新回磁盘,只需要对checkpoint之后的重做日志进行恢复.这样就大大缩短了恢复时间. 2 缓冲池不够用或者触发脏页百…
一 简介:undo管理 二 各版本说明 1 5.5     undo位置:默认ibdata1中,不支持独立表空间   缺点:大事务可能造成ibdata1暴涨,只能dump导出导入或者从新搭建  参数:rollback_segment(默认128个回滚段)2 5.6 undo位置:默认ibdata1中,支持独立表空间 参数   innodb_undo_logs(代替5.5的名字,默认128个回滚段)   innodb_undo_directory 设置undo位置,默认当前文件夹   innodb…
mysql undo详谈1 简介:undo是MVCC机制的基础部分之一2 作用:为了实现可重复性读,存储历史数据3 存储:5.6以前undo都存储在内存和ibdata1中,5.6以后undo可以独立成单独的文件,更可以进行truncate表空间,减少磁盘容量4 处理过程       1 针对于 update/delete操作.会进行记录快照数据.统称为update_undo.针对insert操作,会进行记录但是随后会删除,毕竟没人关注这个.      2 本文不考虑对临时表的undo段操作5 回…
逻辑架构 MySQL逻辑架构整体分为三层: 客户端层,连接处理.授权认证.安全等功能均在这一层处理. 核心服务层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等. 存储引擎,其负责MySQL中的数据存储和提取.和Linux下的文件系统类似,每种存储引擎都有其优势和劣势.中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异 存储引擎 主要介绍InnoDB引擎和MyISAM引擎 Inn…
本文基于 MySQL 8 在前面的两篇文章,我们分析了 MySQL InnoDB 引擎的两种行记录存储格式: Compact 格式 Redundant 格式 在这里简单总结下: Compact 格式结构: 变长字段长度表:包括数据不为NULL的每个可变长度字段的长度,并按照列的顺序逆序排列 NULL 值列表:针对可以为 NULL 的字段,用一个 BitMap 来标识哪些字段为 NULL 记录头信息:固定 5 字节,包括: 无用位:2 bits,目前没用 deleted_flag:1 bits,标…
1.索引 http://blog.codinglabs.org/articles/theory-of-mysql-index.html…
一 概念1 MTS(Prepared transactions slave parallel applier)   主库在同一时间进入prepare状态的事务可以被从库并行回放2 传统与改进   mariadb 从库回放处理(Commit-Parent-Based模式) 一组事务全部执行完才会执行下一组事务,时间:所有一组事务并行执行的总和 问题 一旦一组事务其中一个为大事务,那么整组事务的执行时间会被拖延,导致并行复制下的延时,拖累回放进度   mysql5.7 从库回放处理(Lock-Bas…
FTWRL 锁与MDL一 简介:今天来聊聊为什么备份会卡住,申请不到全局FTWRL二 FTWRL 1 FTWRL主要包括3个步骤:        1.上全局读锁(lock_global_read_lock)        2.清理表缓存(close_cached_tables)->        3.上全局COMMIT锁(make_global_read_lock_block_commit)  2  FTWRL针对阻塞的对象      1 DDL操作 2 DML操作 3 FOR UPDATE操作…