MYSQL RC模式insert update 可能死锁的情况
涉及的语句为RC模式下update根据主键更新和insert其实这样的问题在RC模式下,要么是简单update问题,要么是insert造成的主键和唯一键检查唯一性时出现问题。下面以主键问题为列子进行分析一下可能出现的情况。update where条件更新为主键,锁结构出现在单行主键上,辅助索引包含隐含锁结构,当前读RC非唯一索引...
MYSQL INNODB中hash查找表的实现
原创有误请指出:版本:5.7.14源码位置为hash0hash.h hash0hash.cc作为一种时间复杂度最优为O(1)的数据结构,但是最坏时间复杂对位O(n)的一种数据结构,但是在良好的设计hash函数的情况下性能还是非常好的。关于hash表的图在最后给出。在innodb中各种数据结构都使...
MYSQL INNODB 中通用双向链表的实现
原创:如果有误请支持源码在Ut0lst.h中注意:这里我将链表中的实际的串联的数据叫做数据类比如:lock_t、mem_block_t链表作为一种的非常重要的数据结构,在任何地方都会用到,这里简单解释一下innodb双向链表的实现,让我们来看看innodb链表设计的魅力:经常在某些结构体中看到UT_LIST_BASE_NODE_T(mem_block_t) bas...
MYSQL INNODB replace into 死锁 及 next key lock 浅析
原创:全文带入了大量自我认知和理解,可能错误,因为水平有限,但是代表我努力分析过。一、问题提出问题是由姜大师提出的、问题如下:表:mysql> show create table c \G*************************** 1. row *************************** Table: cCreate Table: CREATE TABLE `c` (&nb...
show engine innodb status中关于锁部分内容的解释
LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)MySQL thread id 4, OS thread handle 140665176164096, query id 575 localhost root updateinsert into testpri&n...
MYSQL如何识别一个binlog中的一个事物
原创水平有限测试版本5.7.14设置GTID_MODE=ONON(3): Both new and replicated transactions must be GTID transactions(生成的是GTID事物,slave也只能应用GTID事物)设置binlog格式为row模式做如下操作mysql> insert into test values(1,2);Query OK, 1 row affected (0.01 sec)mysql> insert into test values(2,...
MYSQL INNODB innodb_thread_concurrency相关参数理解
原创水平有限请谅解虽然这几个参数我以前也有学习过,但是一直没有在源码级别进行证明,所以一直也没有写,但是今天群里有朋友问到,所以先按照官方手册的加上我自己的理解进行一下解释,以后一定要在源码级别进行下补充使用MYSQL版本:5.7.14OS平台: CentOS release 6.5 (Final) 64bit一、理论基础首先要理解几个...
MYSQL和INNODB分层实现
open table 的时候 当初次open table的时候会生成一个table_shared结构体 这个结构体记录很多来自frm 的信息,基本就是表的定义,我们叫他为静态缓存 换句话说这个东西整个mysql 一个接口为get_table_share然后会每个连接线程会打开这个表的时候会根据table_shared出来的信息建立一个table结构体这个结构体是动态的,每...
从源码解析ERROR 1129 (HY000)(2)以及unauthenticated user
原创 水平有限这里主要找一下m_connect是什么,以及怎么增加的,因为前文我没有找到,再次用断点的方式描述一下unauthenticated user一、m_connect是什么怎么增加的m_connect实际上就是m_handshake下面是点击(此处)折叠或打开Hostname.h void sum_connect_e...
从源码解析ERROR 1129 (HY000):Host is blocked because of many connection errors
原创水平有限今天群里一个朋友出现如下错误:ERROR 1129 (HY000): Host '10.0.0.8' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'为了找到这个问题原因,首先在源码中找到错误码点击(此处)折叠或打开{ "ER_HOST_IS_BLOCKED", 1129, "Host \'%-....
关于MYSQL 5.7 新连接建立流程源码接口(和5.6不同)
原创水平有限今天在看运维内参第三章源码的时候,发现书上很多代码入口函数和我用的5.7.14的源码对不上,然后再看了一下5.6的源码,书上写的基本都是5.6的源码(书是2015年开始写的)5.7.14在连接这一块做了相当大的改动,加了很多抽象类,变得更加复杂了。当然这也是软件模块划分的更加清晰的必然的结果,顺便说一下MYSQ...
MYSQL INNODB 如何计算B+树表的最大容量和行数
考虑表结构如下:create table testzh(id int primary key auto_increment ,id2 int,id3 int);插入数据:delimiter // create procedure ins3() begin declare i int; set i=0; while i<10000 do &...
转载 MYSQL-GroupCommit 和 2pc提交
组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。组提交伴随着MYSQL的发展不断优化,从最初只支持redo log 组提交,到目前5.6官方版本同时支持redo log 和binlog组提交。组提交的实现大大提高了mysql的事务处理性能,下文将以innodb 存储引擎为例,详细介绍组提交在...
MYSQL max_user_connections back_log max_connections参数和Max_used_connections
max_user_connections这个参数是单个用户允许连接的最大会话数量,在建立用户的时候也有类似的限制,这里仅仅说的是这个参数下面是官方文档说明:The maximum number of simultaneous connections permitted to any given MySQL user account. Avalue of 0 (the default) means “no limit.”This variable has a glo...
MYSQL中的type:index 和 Extra:Using index
原创水平有限,如有错误请指出考虑下面执行计划中的TYPE和Extra+----+-------------+--------+------------+-------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | ro...
MYSQL CLENT/SERVER数据包传输及net packet buffer作用解析
水平有限难免出现错误,请共同研究予以纠正本文参考源码:Net_serv.cc(主要参考)Mysql.h.ppMysql_socket.hViolite.hViosocket.cVio.c参考书籍:深入理解MYSQL核心技术MYSQL核心内幕internals-enMYSQL官方手册LINUX系统编程手册注意: 1、本文将主要解析非压缩MYSQL NET包,而尽量不考虑压缩...
关于MYSQL 5.6 super_read_only和Event Scheduler冲突导致启动失败
关于MYSQL 5.6 super_read_only和Event Scheduler冲突导致启动失败版本percona-server-5.6.22-72.0,这个版本肯定有这个问题这个问题出现在线上我们将库设置为super_read_only后启动报错,整个MYSQLD CRASH掉2017-04-23 01:15:46 22577 [ERROR] Event Scheduler: Failed to open table mysql.event2017-04-23 01:15:46...
MYSQL sync_relay_log对I/O thread的影响分析
搭建好的一套从库,发现延迟很高,一直追不上,从库的bin_log没开,flush_log_at_trx_commit设置为0,简化的状态如下:mysql> show slave status \G*************************** 1. row *************************** Slave_IO_State: Queueing master event t...
MYSQL innodb buffer 状态数据的保存和载入
本文参考官方手册原创转载请注明出处版本:MYSQL 5.7当数据库重启后,buffer中的数据需要重新预热,所谓预热就是等待常用数据通过用户调用SQL语句从磁盘载入到内存,这个过程ORACLE中叫做物理读取,对于较大的平台这个预热过程往往需要较大的代价,典型的就是第一次运行一个select语句很慢,过后再次执行就很快了。...
MYSQL5.7 MASTER-SLAVE 在线关闭和启动GTID
原创转载注明出处本文参考:MYSQL 5.7官方手册本文步骤中master slave代表主库和从库都需要更改、 slave代表从库更改、master代表主库更改在MYSQL 5.7.6后可以在线的开启和关闭gtid功能,为了做到这一点MYSQL对GTID_MODE做了改动增加了OFF_PERMISSIVE和ON_PERMISSIVE来完成平滑的切换,下面看看有关参数ENFORCE_G...