Innodb检查点和redo写盘时机
我的学习记录,可能有误请谅解,提供了一些源码接口供有兴趣的朋友调试。版本:5.7.17一、LSNinnodb的lsn和oracle的scn一样,是一个重要的概念。是整个数据库数据同步的一种统一辨别标准,在很多地方都使用到了LSN比如在flush list中正是是使用page的oldest lsn作为链表的...
MySQL: Incorrect string value: '\xF0\xA4\xBD\x82'分析
今天应用报错:
MySQL 记一次 Bug发现过程
https://jira.percona.com/browse/PXC-2090一、问题描述操作系统层面基本看不出来任何负载:对于这种问题只能用pstack进行问题确认了。通过pstack我发现很多会话堵塞在trx_allocate_for_mysql()如下:简单的说对于innodb表进行任何操作即便是select也需要分配事物,如果在事物池中没有可用的...
MySQL:简单insert 一秒原因排查
语句截图如下:image.png耗时截图如下:image.png2、profile展示实际上这里的query end是一个非常有用的信息,基本确认是在order_commit函数上的等待。在我遇到的案例中有大事物造成的小事物commit慢的情况,且状态也是query end,但是这里...
MySQL 关于slave端Retrieved_Gtid_Set的读取改进初探
一、问题由来When using GTIDs, the slave tells the master which transactions it has already received, executed, or both. To compute this set, it reads the global value of gtid_executed and the value of the Retrieved_gtid_set column from SHOW SLAVE STATUS. The GTID of the last transmitted transa...
MySQL 中的myisam内部临时表
一个朋友问我下面的tmp目录的文件是干什么的,一会就删除了。他的版本是5.6_二、初步分析三、源码确认 sprintf(path, "%s_%lx_%i", tmp_file_prefix, current_pid, temp_pool_slot); #sql:来自tmp_file_prefix是宏定义bec0:来自mysqld的当前进程号14:临时表缓冲区的某种槽...
MySQL 5.7中sync_binlog参数和半同步中after_commit和after_sync的区别
这个参数大家都知道控制着binlog的刷盘时机,但是在5.7中其还有另外一个功能,我这里将解释他的两个功能。我摘取了源码中说明问题的部分进行展示如下:flush_error= process_flush_stage_queue(&total_bytes, &do_rotate,&wait_queue);//进行binlog的从binlog buffer或者临时文件写入到binlog文件(注意是写到kernel bu...
MySQL Bug导致异常宕机的分析流程
本文主要通过一个bug来记录一下如何分析一个MySQL bug的崩溃信息。版本:Percona 5.7.17-11一、数据库重启日志分析这部分是数据库崩溃的时候的栈帧,因为收到的是信号6 SIGABRT,只要捕获信号后改变其行为即可。这部分在MySQL官方文档中叫做Stack Trace,参考:实际上在这里我们已经可以看到大约是统计数据收...
Mysql slave 延迟故障一列
大事物延迟 延迟略为2*执行时间 状态为:reading event from the relay log大表DDL延迟 延迟略为1*执行时间 状态为:altering table长期未提交的事物延迟,会造成延迟的瞬时增加表上没有主键或者唯一键 状态为:system lock 或者 reading event from the relay loginnodb层锁造成延迟 状态为...
Mysql Prepared statement needs to be re-prepared
Compare metadata versions of an element obtained from the table definition cache and its corresponding node in the parse tree. 其逻辑有1 breakpoint keep y 0x0000000000ebd5f3 in main(int, char**) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/main.cc:25 breakpoint already hit 1 time ...
从Mysql slave system lock延迟说开去
本文基于5.7.17源码本文只考虑row 格式binlog主要考虑DML语句,DDL语句比较简单不做考虑其实每次show slave status命令的时候后台会调用函数show_slave_status_send_data进行及时计算,这个延迟并不是保存在哪里的。栈帧如下:其计算方式基本就是这段代码稍微解释一下:这里我们也看...
线程相关内存参数sort_buffer/join_buffer等的内存分配时机
今天一个朋友问我sort_buffer/join_buffer/binlog_cache_size/read_rnd_buff_size 等线程相关参数是什么时候分配内存的。我就特意做了gdb调试,得出结论这些参数都是在需要的时候才分配的,并不是建立线程就分配了,这里只是简单的给出我的结论并且给出栈帧以备后面学习和调试。水平有限有误请共同讨论。触发...
Mysql 5.7中数据量更改统计数据收集的逻辑
今天一个朋友在问Mysql什么时候收集统计数据,我就简单的找了一下源代码,现总结如下。如有错误请指出,因为我只是简单做了一下调试。Mysql统计数据分为持久化和非持久化前者是innodb表后者是memory表。他们受到参数innodb_stats_persistent的控制,默认为ON。关于这里还参考官方文档:二、持久化...
Mysql 5.7 Gtid内部学习(十) 实际案例(二)
简书地址:http://www.jianshu.com/p/052a03b68fabLast_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.' 三、故...
Mysql 5.7 Gtid内部学习(九) 实际案例(一)
简书地址:http://www.jianshu.com/p/2c25842d58d3binlog_gtid_simple_recovery=false。5.7.6以上版本。Gtid 关闭或者Gtid中途开启有大量的未开启Gtid的binlog。版本:MySQL版本 5.7.19。故障为:大概每半小时发生一次故障,整个Mysql压力巨大,很多简单的操作都相应缓慢。使用ioto...
Mysql 5.7 Gtid内部学习(八) Gtid带来的运维改变
简书地址:http://www.jianshu.com/p/caae9a019dbd如何跳过一个事物mysqldump导出行为的改变5.7中搭建基于Gtid的主从5.7中Gtid的主从的切换5.7中在线改变Gtid模式和传统基于位置的主从不同,如果从库报错我们需要获得从库执行的最后一个事物,方法有如下:然后构建一个空事...
Mysql 5.7 Gtid内部学习(七) 总结binlog_gtid_simple_recovery参数带来的影响
simplified_binlog_gtid_recovery=flasebinlog_gtid_simple_recovery=true一、Gtid关闭simple_recovery=flase重启Mysql需要扫描全部的binlog来获得正确的Gtid集合purge binlog或者超过参数expire_logs_days参数设置不触发全binlog扫描,由上层函数控制。因为不支持在线...
Mysql 5.7 Gtid内部学习(六) Mysql启动初始化Gtid模块
binlog文件mysql.gtid_executed表主库开启Gtid开启binlog。从库开启Gtid开启binlog不开启log_slave_updates参数。一、初始化Gtid 模块全局变量内存空间 if (init_server_components()) unireg_abort(MYSQLD_ABORT_EXIT); gtid_server_init()函数片段如下:二、初始化获得本...
Mysql 5.7 Gtid内部学习(五) mysql.gtid_executed表及其他变量更改时机
简书地址:http://www.jianshu.com/p/905d7e89a305mysql.gtid_executed表:Gtid持久化的介质,Mysql启动阶段会读取这个表来获取gtid_executed变量的值。gtid_executed变量(show global variables):Mysql数据库已经执行了哪些Gtid事物,处于内存中。show slave status中的Executed_Gtid_Set也取自这里。...
Mysql 5.7 Gtid内部学习(四) mysql.gtid_executed表Previous gtid Event的改变
一、Gtid event31704d8a-da74-11e7-b6bf-52540a7d243:100009 >Gtid Event:Pos:234(0Xea) N_pos:299(0X12b) Time:1513135186 Event_size:65(bytes) Gtid:31704d8a-da74-11e7-b6bf-52540a7d243:100009 last_committed=0 sequence_number=1-->Query Event:Pos:299(0X12b) N_Pos:371(0X173) Time:1513135186 Event_size...