Mysql 5.7 Gtid内部学习(三) Gtid和Last_commt/sequnce_number的生成时机
这里首先使用源码的解释给出三种类型:其中AUTOMATIC_GROUP通常用于主库开启Gtid的情况,GTID_GROUP通常用于备库和使用了GTID_NEXT的情况下。 /** Specifies that the GTID has not been generated yet; it will be generated on commit. It will depend on the GTID_MODE: if GTID_MODE<=OFF_PER...
Mysql 5.7 Gtid内部学习(二) Gtid相关内部数据结构
1、 Gtid基本格式单个Gtid:e859a28b-b66d-11e7-8371-000c291f347d:1-5 前一部分是server_uuid,后面一部分是执行事物的唯一标志集合,在内部使用Gtid_set中某个Sidno对应的Interval节点表示,后面会描述。2、server_uuid的生成既然说到了server_uuid这里就开始讨论server_uuid...
Mysql 5.7 Gtid内部学习(一) 导读
Mysql 5.7 Gtid内部学习(一) 导读 简书地址:http://www.jianshu.com/p/87f66cdeb49c本系列文章使用源码版本为percona 5.7.14,也比较过5.7.17,5.6.25的源码版本。占时没有能力比较全部的Mysql源码版本,有误导还请见谅。Gtid的全称为global transaction identifier,他在整个复制生态中完全唯一的,下面我...
Mysql Innodb中的Linux native异步I/O(一) 内存结构的初始化
一、前言二、几个基本概念mysql> show variables like '%io_threads%';+-------------------------+-------+| Variable_name | Value |+-------------------------+-------+| innodb_read_io_threads | 2 || innodb_write_io_threads | 2 |+-------------------------+-------+ mysql> s...
Mysql:从一个USE DB堵塞故障展开的探讨
今天一个朋友遇到数据库遇到一个严重的故障,故障环境如下:表现如下:情急之下他杀掉了一大堆线程后发现还是不能恢复,最后杀掉了一个没有及时提交的事物才恢复正常。也仅仅留下了如下图的一个截图:1.png还是回到上图,我们可以归纳一下语句类型如下:三、信息分析关于sending data这个...
MYSQL 5.7中临时文件的使用
使用临时文件一、使用tmpdir1、执行计划file sort 文件名字MY开头lsof|grep delete如:/tmp/MYdRH1GW (deleted)2、大事物binary log缓存 文件名字ML开头lsof|grep delete如:/tmp/MLq9INFu (deleted)3、压缩的tempory table CREATE TEMPORARY TABLE tmp_table1(id int) ROW_FORMAT=COMPRESSE...
Innodb:RR隔离级别下insert...select 对select表加锁模型和死锁案列
最近有网友遇到了在RR隔离级别下insert A select B where B.COL=** 由于select表也就是B表引发的死锁的问题。分析死锁日志后,笔者进行模拟重现了这位网友遇到了2种场景并且在本文中进行详细的描述。本文使用版本percona 5.7.14修改版,能够打印出事务所有的行锁信息结构链(不包含隐含锁)本文中的测试是在RR...
innblock 工具| InnoDB page观察利器
---#####鸣谢:- 笔者是知书堂的早期学生,最初有写这么一个工具的想法也得到叶金荣老师的认可和鼓励,这个想法也整整耗掉了好几个晚上的休息时间,这里也感谢叶金荣老师对工具审核,叶老师的经验和学识是每一位学员宝贵的财富.- 感谢主要作者周彦伟、王竹峰、强昌金对本工具的认可和授权引用部分内容,如...
[ERROR]Space id in fsp header but in the page header一列
原创转载请注明出处报错如下MYSQL不能正常启动2017-09-22 10:39:05 21409 [Note] InnoDB: Database was not shutdown normally!2017-09-22 10:39:05 21409 [Note] InnoDB: Starting crash recovery.2017-09-22 10:39:05 21409 [Note] InnoDB: Reading tablespace information from the .ibd files...2017-09-22...
innodb page重组空间压缩函数(btr_page_reorganize_low)注释
当innodb一个page碎片页过多会触发重组,这个重组过程在内存中完成,函数主要如下:点击(此处)折叠或打开boolbtr_page_reorganize_low{ buf_block_t* block &n...
关于innodb中查询的定位方法
原创转载请注明出处源码版本 5.7.14涉及源码文件page0cur.ccpage0page.hpage0page.ccrem0cmp.cc 为什么谈及定位方法,因为在innodb中,比如一个插入语句我们需要定位在哪里插入(PAGE_CUR_LE),比如一个查询语句我们需要定位到其第一个需要读取数据的位置,因此定位方法是查询的根本。而找到这个记录位置...
MYSQL ERROR 1146 Table doesnt exist 解析
原创其注明出处在MYSQL使用innodb的时候我们有时候会看到如下报错:ERROR 1146 (42S02): Table 'test.test1bak' doesn't exist先总结下原因:缺少frm文件innodb数据字典不包含这个表我们重点讨论情况2,因为情况1是显而易见的。在使用innodb存储引擎...
关于叶老师一个RR模式下UPDATE锁范围扩大案例的研究
一、前言叶金荣老师分享了一篇文章如下:https://mp.weixin.qq.com/s/09DJCyMq8kBn4mlezgzUgg这里只研究下锁的模式,借用叶老师的表和语句mysql> select * from t1;+----+----+----+----+| c1 | c2 | c3 | c4 |+----+----+----+----+| 0 | 0 | 0 | 0 || 1 | 1 | 1 | 0 || 3 | 3 | 3 | 0 || 4 |...
如何通过binlog 轻松的找到没有及时提交的事物(infobin工具)
工具获取https://pan.baidu.com/s/1jHIWUN0一、前言本文只是工具的展示,未过多介绍细节,如果要更多了解细节请参考MYSQL运维内参第21章,当然我也有阅读并且从源码级进行了验证,同时在书中也有一个用shell写成的脚本进行长期未提交的事物,但是这里我自己使用了自己的工具infobin。以前我也写过一个...
MYSQL中一个特殊的MDL LOCK死锁案列
版本:5.7.19 mysql+innodb本文中所说的上文是如下文章,也是讨论MDL LOCK死锁的基础,包含了很多MDL LOCK的基础知识建议好好阅读http://blog.itpub.net/7728585/viewspace-2143093/一、问题由来前段开发反馈时间线上数据库老是出现死锁情况,而我们设置了innodb_print_all_deadlocks,但是在相应的时间点没有找到...
MYSQL METADATA LOCK(MDL LOCK)学习(1) 理论知识和加锁类型测试
原创,水平有限如有错误请指出共同探讨源码版本:5.7.14一、前言 MYSQL中MDL锁一直是一个比较让人比较头疼的问题,我们谈起锁一般更加倾向于INNODB下层的gap lock、next key lock、row lock等,因为它很好理解,也很好观察,而对于MDL LOCK却了解得很少,因为它实在不好观察,只有出现问题查看show proces...
MYSQL 阿里的一个sql优化问题
今天研究了一天innodb事物,临近下班了同事田兴春告诉我有个阿里发出来的优化题,并且把建表和语句给我了,并且告诉我语句里面有隐式转换的可能昨天群里也有人说这道题但是一直没空看,刚好这会没事就看了一下,整个脚本如下:点击(此处)折叠或打开数据准备:...
MYSQL innodb中的只读事物以及事物id的分配方式
原创水平有限,如果有误请指出一、只读事物也许有人要问一个select算不算一个事物。其实在innodb中一个innodb的select是一个事物,他有trx_t结构体,并且放到了mysql_trx_list链表中,关于innodb事物系统一级的事都做了,但是这种事物叫做只读事物boolread_only;/*!< true if transaction is flaggedas a READ-ON...
MYSQL中对信号的处理(SIGTERM,SIGQUIT,SIGHUP等)
原创,因为LINUX系统编程水平有限某些用词不当请指出一、信号处理以及多线程先信号处理基础知识在LINUX中信号是一种由内核处理的一种软中断机制,他满足简单、不能携带大量信息、并且要满足一定条件才会发送等特征。信号会经历产生-->阻塞信号集-->未决信号集-->信号递达-->信号处理方式首先信号的产生可以有多种方式...
MYSQL INNODB主键使用varchar和int的区别
今天同事讨论关于主键使用varchar和int的区别。我现在总结的2个问题:1、tablespace中空间浪费 当然我们知道使用varchar可能会导致辅助索引比较大,因为用到varchar可能存储的字符较多,同时 在行头也存在一个可变字段字符区域(1-2)字节 而辅助索引叶子结点毕竟都存储了主键值,...