Mysql
梦江河
聊聊高并发,数据库,存储
展开
-
insert唯一索引死锁问题-2
innodb mysql 死锁原创 2023-02-07 22:45:08 · 380 阅读 · 0 评论 -
insert唯一索引死锁问题-1
innodb 死锁原创 2023-02-06 23:26:35 · 453 阅读 · 0 评论 -
insert唯一索引加锁流程
mysql innodb锁原创 2023-01-11 22:55:42 · 611 阅读 · 0 评论 -
MySQL Innodb Insert语句加锁流程
mysql innodb 锁原创 2023-01-10 23:39:31 · 1144 阅读 · 0 评论 -
MySQL普通索引加锁分析
mysql innodb锁原创 2023-01-09 22:41:54 · 425 阅读 · 0 评论 -
MySQL执行器与存储引擎是怎么交互的
1)连接器2)查询缓存3)分析器4)优化器5)执行器6)存储引擎原创 2022-06-12 21:10:09 · 378 阅读 · 0 评论 -
MySQL--锁的奥秘--数据怎么锁
先看表结构有如下数据实验开始事务1事务2获取当前数据库锁占用信息可以看出事务1和2表面上操作staffid索引和staffno索引,但实际上锁的是对应的主键索引记录原创 2022-04-10 11:47:21 · 561 阅读 · 0 评论 -
innodb加锁在哪里?
上面的两个字段都是唯一索引,可以看到分别对这2个唯一索引进行行更新,竟然会互斥!!!不是说innodb存储引擎的行锁是加在索引上面吗,但是上面的staffno和staffid是两个唯一索引,两个索引树,怎么做到锁同一行的?...原创 2022-04-01 23:14:10 · 347 阅读 · 0 评论 -
架构师之路02-MySQL主从复制
MySQL主从复制意义1)数据备份2)读写分离 ,减轻主服务压力3)高可用复制内容1)Binlog2)GTID复制方式1)异步复制 (默认)2)同步复制3)半同步复制主从复制延迟问题1)MySQL5.6 基于schema的并行复制2)MySQL5.7 基于group commit的并行复制3)MySQL8.0 基于write-set的并行复制并行复制主从高可用...原创 2021-09-11 23:34:07 · 87 阅读 · 0 评论 -
mybatis事务原理与集成spring的事务原理
映射器Mapper实现事务的原理:mapper本质是一个接口代理类,调用接口等某个方法后,获取字符串等于接口全路径名称+方法名去缓存里面找相应的sql语句,然后调用Transaction#getConnection获取数据库连接,后续的提交回滚也是调用这个接口等方法。sqlsession实现事务的原理:同上,可以设置自动提交事务mybatis集成spring实现事务的原理1、spring实现事务有3种方法,声明式事务包括xml和注解,编程实现事务也就是利用spring事务相关API,xml和注解本原创 2021-07-29 22:07:41 · 1735 阅读 · 0 评论 -
一道MySQL事务与锁的面试题
问题:事务1:upate A set a = 2 where a = 1事务2:update A set a = 3 where a=1事务1提交了事务2能执行吗?分类讨论:1)a不是索引字段不能2)a是唯一索引或者主键索引不能3)a是普通索引不能结论:事务因为表锁或者行锁阻塞了,唤醒后会重新检查SQL获取锁...原创 2021-04-18 12:26:02 · 178 阅读 · 0 评论 -
MySQL Binlog格式
1)statement格式优点:只记录DML语句,占用空间少;缺点:某些情况会导致主从复制数据不一致;2)row格式优点:记录行记录修改前和修改后的内容,不会导致主从复制数据不一致;缺点:占用日志文件空间大;3)mixed格式优点:结合statement格式和row格式的优点,默认使用statement格式,某些情况使用row格式,如图;;...原创 2021-04-16 12:20:31 · 75 阅读 · 0 评论 -
MySQL-事务怎么实现
事务四大特性ACIDA-原子性 ,靠undo log实现C-一致性,最终目标,靠AID保证I-隔离性,靠MVCC+锁实现D-持久性,靠redo log+binlog实现持久性涉及两个日志,redo log和binlog,怎么实现这两个日志的写入的一致性呢?MySQL的写入过程是:1.Redo log刷盘成功->2.Binlog刷盘->3.BinLog名称和⽂件路径信息、commit标志写到Redo log中,事务两阶段提交的⽅式来保证。前提:写入binlog成功就代表事原创 2021-04-10 11:39:27 · 103 阅读 · 0 评论 -
MySQL Orderby实现原理
1)全字段排序(using filesort)2)rowid排序(using filesort)3)索引排序原创 2021-04-09 10:43:17 · 171 阅读 · 0 评论 -
MVCC多版本并发控制
MVCC-多版本并发控制,可以实现读写并行InnoDB的读已提交和可重复读隔离级别,普通读不加锁,读未提交隔离级别普通读也是不加锁,会出现脏读,为什么读已提交和可重复读隔离级别不会呢?原因是读已提交和可重复读隔离级别的普通读是一致性读,实现原理是一致性视图+版本链:一致性视图:事务数组是由当前已经启动但是还没有提交的事务id组成,比如现在最大的事务id是8,事务id为2,4,6的事务还没有提交,当前事务id是3,那么事务数组就是[2,3,4,6],高水位是9,每行记录会有两个隐藏字段:回滚原创 2021-04-02 10:20:56 · 67 阅读 · 0 评论 -
MySQL杂谈
联结类型https://www.cnblogs.com/canger/p/9760217.htmljoin:笛卡尔积left join:左连接right join:右连接左独有右独有inner join:内连接full join:左连接+union+右连接左独有uniuon右独有三大范式第一范式:每一列不可再分,具有原子性第二范式:每列都和主键相关(如订单表和商品表)第三范式:在第二范式基础上,通过外键关联不同表需求>性能>范式面试题1、为什么InnoDB原创 2021-03-02 10:47:19 · 101 阅读 · 0 评论 -
MYSQL-InnoDB-索引
InnoDB存储引擎支持以下索引:B+树索引全文索引哈希索引InnoDB存储引擎支持的哈希索引是自适应的,即会根据表的使用情况自动为表生成哈希索引,不能认为干预是否在一张表中生成哈希索引B+树类似于二叉树,根据键值快速找到数据,B+树的B不是指二叉(binary),而是代表平衡(balance),因为B+树由平衡二叉树演化来。B+树索引不能根据一个给定的键值找到具体的行,而是先找到数据行所在的页,然后把页读到内存,再再内存中进行二分查找,找到需要的行数据。InnoDB中每页Page Dire原创 2020-09-13 21:21:31 · 345 阅读 · 0 评论 -
MYSQL-InnoDB-表
索引组织表InnoDB逻辑存储结构索引组织表InnoDB逻辑存储结构关于InnoDB的表的逻辑存储结构是表空间、段、区、页(块),如图:表空间段常见的段有数据段(B+树的叶子节点)、索引段(B+树的非叶子节点)、回滚段区页...原创 2020-09-12 22:06:05 · 81 阅读 · 0 评论 -
MYSQL-InnoDB-重做日志
每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认的ib_logfile0和ib_logfile1。可以设置多个重做日志文件组来提高重做日志的高可用性。每个重做日志文件组的重做日志文件大小一致,并以循环写入的方式进行,如图:与二进制日志吧区别重做日志结构重做日志写入过程:先写重做日志缓冲redo log buffer,以512字节(扇区大小)写入磁盘,如图:重做日志缓冲写入磁盘的条件主线程每秒将重做日志缓冲写入到重做日志文件,不论事务是否提交原创 2020-09-12 14:46:46 · 182 阅读 · 0 评论 -
MYSQL-InnoDB-表空间
InnoDB通过表空间文件存储数据,所有基于InnoDB存储引擎的表的数据都会存储到共享表空间中innodb_data_file_pathinnodb_file_per_table设置每个基于InnoDB存储引擎的表产生一个独立的表空间,后缀是ibd。独立的表空间存储各自表的数据、索引和插入缓冲BITMAP等信息,其余信息还是存储在共享表空间中。...原创 2020-09-12 14:21:01 · 120 阅读 · 0 评论 -
MYSQL-InnoDB-锁
InnoDB支持表锁和行锁行锁共享锁S排它锁X表锁表意向共享锁IS表意向排它锁IX锁的兼容性意向锁的作用有了行锁为什么还要表锁?因为一个事务可能要同时操作几行数据,意向锁的作用正是表示希望获取表某几行的锁。而且意向锁是粗粒度的锁,获取锁的效率高。...原创 2020-09-11 17:45:30 · 68 阅读 · 0 评论 -
InnoDB多版本
1、InnoDB是一个多版本的存储引擎:它保留有关已更改行的旧版本的信息,以支持诸如并发和回滚之类的事务功能。该信息以称为回滚段的数据结构存储在表空间中。InnoDB使用回滚段中的信息来执行事务回滚中所需的撤消操作。它还使用该信息来构建行的早期版本,以实现一致的读取。2、在内部,InnoDB向数据库中存储的每一行添加三个字段。6字节的DB_TRX_ID字段指示插入或更新该行的最后一个事务的事务标识符。此外,删除在内部被视为更新,在该更新中,行中的特殊位被设置为将其标记为已删除。每行还包含一个7字节的DB原创 2020-06-27 10:00:42 · 260 阅读 · 0 评论 -
Mysql索引与优化-1
Mysql官网对于索引的解释是:索引条目的作用类似于指向表行的指针,从而使查询可以快速确定哪些行与WHERE子句中的条件匹配,并检索这些行的其他列值。所有MySQL数据类型都可以索引。索引还会增加插入,更新和删除的成本,因为每个索引都必须更新。您必须找到适当的平衡,才能使用最佳索引集来实现快速查询。可以知道索引只是对于select有利,不是万能的。所以我们聊聊怎么优化索引以达到平衡。1、怎样使用索引如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间查找的位置,而不必查看所有数据,.原创 2020-06-23 14:29:02 · 136 阅读 · 0 评论 -
InnoDB内存结构和相关主题
InnnDB的内存结构有四种1、Buffer PoolBuffer Pool是主内存中的一个区域,InnoDB在该区域中访问**表和索引数据,**这会加速数据库的访问,因为是内存,丝毫没有I/O压力。为了提高大容量读取操作的效率,缓冲池分为多个页面,这些页面可能包含多行,页即是mysql的存储单位-数据页,为了提高缓存管理的效率,缓冲池被实现为页面的链接列表,即java中的LinkedList,使用LRU算法的变体将很少使用的数据从缓存中老化掉,这里说的并不全是LRU算法,是一种变体-因为InnoD原创 2020-06-22 10:49:48 · 1051 阅读 · 0 评论