Innodb:insert 第一次进行乐观插入逻辑(二级索引)
水平有限,能力有限实际在这之前记录是每行每行的插入,而且是每行每个索引的插入,这里仅仅讲述的是某行关于某个二级索引的乐观插入流程,所谓乐观就是不会引起索引树的结构更改,换而言之当前块有足够的空间进行插入。本文仅仅记录乐观插入的流程,和函数的入口,实际上很多我们关心的东西在哪里比如,这里没有考虑压缩页:重用空间只会检查del链表的第一个成员,因此块中可能存在碎片是否触发悲观插入是通过计算整个块的剩余
MySQL:Innodb:innodb_flush_log_at_trx_commit参数影响的位置
源码5.7.22影响阶段:MYSQL_BIN_LOG::ordered_commit 的flush阶段一、影响的函数innobase_flush_logs函数,函数如下其实注释也写得很清楚了。binlog_group_flush 参数为1。/** Flush InnoDB redo logs to the file s
MySQL:一个死锁分析 (未分析出来的死锁)
最近一个朋友给了我一个死锁 没分析出来搞了好几天,但是把以前出现的一个死锁理了一下流程。这里大概记录一下,并且给出朋友的案例。RC 隔离级别很少出GAP我已经知道的继承和分裂会出LOCK_GAP这是代码写死的purge线程可能触发页的分裂融合可能触发内部回滚可能触发唯一性检查会出LOCK_ORDINARY[next_key_lock]一、构造死锁RC RR级别通用死锁表结构和数据drop 
MySQL:kill和show命令hang住一列
这个问题是一个朋友发给我的@mj环境如下:MySQL 5.6.25show processlist和pstack日志做了大量的删减,否则篇幅过大一、问题描述问题描述是这位朋友发给我的如下:问题描述收到从库xx.xx.xx.xx报警mysql宕机,实际上mysql没有宕机,而是因为下面这条SQL向表tmp_mds_cust_dealer_advisor_rela01插入的数据太多(这个表的数据文件高
MySQL:sending data状态包含了什么
MySQL:sending data状态包含了什么一、问题由来这是一个朋友问我的(@成都--麦涩可),原问题如下:数据库发送数据给客户端这个时间算是sql的执行时间嘛?要解决问题我们需要知道MySQL何时将数据传输给了客户端,既然是要传输实际的数据给客户端那么肯定是select语句了,同时我们要明白一个正常select运行到底要经历哪些阶段。二、一个简单SELECT语句经历的阶段 &nb
MySQL:Innodb 一个死锁案例
一、准备数据和问题RR隔离级别CREATE TABLE `ty` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int
MySQL:MGR 学习(2):Write set(写集合)的写入过程
MySQL:MGR 学习(2):Write set(写集合)的写入过程水平有限,有误请谅解。源码版本5.7.22一、前文总结前文 <<MySQL:MGR 学习(1):写集合(Write set)>>中已经说明了Write set的生成过程,但是Write set是需要封装如下Transaction_context_log_event中进行广播到其他节点进行认证的。本文就描述
MySQL:mysqldump 导出数据异常重启及drop栈帧
MySQL:mysqldump 导出数据异常重启及drop栈帧一、现象在进行mysqldump的时候只要访问到库中一个表,只要一访问就抛错重启如下:stack_bottom = 7f656f792e28 thread_stack 0x30000 /dbdata/mysql5600/bin/mysqld(my_print_stacktrace+0x35)[0
MySQL:MGR 学习(1):写集合(Write set)
水平有限,有误请谅解。源码版本5.7.22一、什么是写集合(Write set)实际上写集合定义在类Rpl_transaction_write_set_ctx中,其中主要包含两个数据结构std::vector write_set;std::set write_set_unique;第一个是一个vecotr数组,第二个是一个set集合,它们中的
MySQL:Innodb 让MDL LOCK和ROW LOCK 记录到errlog
本文是一个说明文档,主要是为MySQL和Innodb做了两个比较简单的输出功能用于便于大家学习这两种锁,其实这个方法也是我学习的时候用到的:MySQL 层 MDL LOCKInnodb 层ROW LOCK但是由于能力有限肯定有考虑不周的地方,请指出。参数名字gaopeng用于快速查找自己加入的参数标志。仅用于学习测试。一、新加入的参数和保留的参数mysql> show v
MySQL:Innodb恢复的学习笔记
本文只是记录无可读性,供自己参考MySQL · 引擎特性 · InnoDB 崩溃恢复过程enum { SRV_FORCE_IGNORE_CORRUPT = 1, /*!< let the server run even
MySQL:slave 延迟一列 外键检查和自增加锁
本文没有太多可读性,完全是自己的笔记一、现象延迟大,大事物。表结构image.png无IOimage.pngSQL THREAD占用CPU 100%image.png二、pscak 采样采样30个点外键检查 占70%image.png自增锁获取 占30%image.png三、自增锁获取逻辑逻辑如下其实也是innodb_autoinc_lock_mode参数的作用switch (lock_
MySQL插件调用
简单记录以备学习,如果有误请指出。一、核心类Observer_info:观察者 rpl_handler.hclass Observer_info { //插件观察者public: void *observer; //这个void指针是具体的观察者,使用指针函数实现多态 st_plugin_
MySQL:FLTWL的堵塞和被堵塞总结
水平有限有误请指出,简单记录一下建议阅读:http://blog.itpub.net/7728585/viewspace-2143093/这是我以前写的一篇MDL LOCK的文章,比较详细。FTWRL = flush tables with read lockMDL = META DATA LOCK一、FTWRL的作用总的说来flush tables with read lock多用于备份的时候对
MySQL:Innodb Handler_read_*参数解释
本文为学习笔记,有误请指出。本文使用源码版本:Percona 5.7.14一、Handler_read_*值的实质内部表示如下: {"Handler_read_first", (char*) offsetof(STATUS_VAR, ha_read_fir
MySQL:Innodb page clean 线程 (二) 解析
MySQL:Innodb page clean 线程 (一) 基础
MySQL中binlog cache使用流程解惑
最近老是看到有朋友报错如下:ERROR 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again虽然错误提示非常明确,但是我还是对binlog cache的使用方式进行了学习整理下来,这部分也是我一直疑惑的地方,也希望通过本...
MySQL:一个简单insert语句的大概流程
我建了一个简单的表,插入一个简单的数据。mysql> create table testin(id int);Query OK, 0 rows affected (2.38 sec) mysql> insert into testin values(10);Query OK, 1 row affected (0.02 sec) 主要集中在:两个阶段可以看到整个语句的流程大概为innodb进行组提交,确保redo落盘binlo...
MySQL慢查询记录原理和内容解析
我的学习记录,可能有误请谅解,也提供了一些源码接口供有兴趣的朋友调试。源码版本:percona 5.7.14本文并不准备说明如何开启记录慢查询,只是将一些重要的部分进行解析。如何记录慢查询可以自行参考官方文档:5.4.5 The Slow Query Log本文使用了Percona 版本开启来了参数log_slow...