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...
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也需要分配事物,如果在事物池中没有可用的...
使用Python队列和多线程实现生产者消费者
这个模型使用python来实现相比POSIX来做简单太多太多了,轮子python都可以写好了直接调用即可,队列就已经封装好了对共享数据的安全访问。在POSIX多线程中考虑Mutex和条件变量是一个重点。这是我以前用POSIX pthread函数实现的一个生产者和消费者模型:一、实现方式import threading import time import queue from...
MySQL:简单insert 一秒原因排查
语句截图如下:image.png耗时截图如下:image.png2、profile展示实际上这里的query end是一个非常有用的信息,基本确认是在order_commit函数上的等待。在我遇到的案例中有大事物造成的小事物commit慢的情况,且状态也是query end,但是这里...
Python 3.6:多态的实现
多态的作用不用多说,C++用如下条件来实现多态:1 要有继承2 要有虚函数函数重写3 要有父类指针(父类引用)指向子类对象实际上C++使用VPTR指针来完成这个事情,其是设计模式的基础,软件分层的基石。最近看了一下Pyhon,很欣慰python3.6(因为我学的时候已经是3.6了)中支持不错,基本也是遵循C++的3个要点需要模块支持...
Python:字典列表字符串方法测试
作者微信:
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进行及时计算,这个延迟并不是保存在哪里的。栈帧如下:其计算方式基本就是这段代码稍微解释一下:这里我们也看...