MySQL: kill 会话的实现原理
原创水平有限,有误请指出。仅仅作为学习参考和学习笔记。源码版本 5.7.22只研究了kill connection的情况。最近看了丁奇老师的mysql课程中 kill session的部分,在平时的工作的做,我们也经常用kill 命令进行杀掉某些会话,偶尔也会出现状态还是killed的情况,不由得感觉需要研究一下kill 会话的是如何实现的。刚好丁奇老师的这段提供了理论基础。一、简单的过程梳理和列
Innodb undo之 undo物理结构的初始化
水平有限,如果有误请指出。一直以来未对Innodb 的undo进行好好的学习,最近刚好有点时间准备学习一下,通过阿里内核月报和自己看代码的综合总结一下。本文环境:代码版本 percona 5.7.22参数 innodb_undo_tablespaces = 4 及使用了4个undo tablespace参数 innodb_rollback_segments = 128本文描述使用如上参数的设置。一
MySQL8.0:倒序索引数据的数据排列方式
MySQL8.0:倒序索引数据的数据排列方式 这里简单记录用到了我的一个工具详细见如下:innblock和bcview前者用于窥视innodb块的物理结构后者用于查看二进制文件免得肉眼撸。innblock | InnoDB page观察利器 https://www.jianshu.com/p/c5ef92b0c769bcview http://pan.baidu.co
MySQL:关于排序order by limit值不稳定的说明(1)
水平有限,有过有误请谅解和指正,仅仅作为抛砖引玉。谢谢!源码版本:5.7.14本文约定:PQ 就是 Priority Queue 及优先队列其核心是堆排序,文中代表一种算法。一、问题抛出数据如下:CREATE TABLE `testse` ( `id` int(11) NOT NULL, `nu
MySQL:Innodb 关于Handler_commit每次DML增加2的原因
简单描述一下,也是本人的问的,水平有限,如果有误请谅解。原问题如下@mysqDBA:请教一个问题。我每次insert一条语句,查询show global status like 'Handler_commit'; 发现每次增加值是2,难道不应该是1吗? 最简单的insert into table
MySQL:show slave status 关键值和MGRrelay log的清理策略
MySQL:show slave status 关键值和MGRrelay log的清理策略 gaopengtttt2018.11.27 16:13* 字数 437 阅读 7评论 0喜欢 0编辑文章简单记录一下,有朋友问 @richard一、show slave status关键值*************************** 1. row **********
MySQL:Innodb DB_ROLL_PTR指针解析
MySQL:Innodb DB_ROLL_PTR指针解析同步滚动:关源码版本5.7.22此处简单记录一下DB_ROLL_PTR指针解析的方法,水平有限,如果有误请谅解。一、引入我们知道每一条记录在聚集索引上都有如下的分布:rowid(主键)+DB_TRX_ID+DB_ROLL_PTR+其他字段这样格式其中DB_TRX_ID+DB_ROLL_PTR作为一致性读的关键信息存储下来,其中DB_TRX_I
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_