yzs87
专注于PostgreSQL、MySQL、GreenPlum及其生态
展开
-
死锁案例一
1、环境说明MySQL5.6.33,隔离级别是RR。表结构及数据:CREATE TABLE `t0` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) NOT NULL DEFAULT '0', `d` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `c` (`c...原创 2018-07-01 16:08:11 · 881 阅读 · 0 评论 -
InnoDB transaction history特性
InnoDB提供了两个参数innodb_max_purge_lag,innodb_max_purge_lag_delay 来调整,即当trx_sys->rseg_history_len超过了设置的innodb_max_purge_lag,就影响DML操作最大delay不超过innodb_max_purge_lag_delay设置的时间,以microseconds来计算。其核心算法是:该延迟的...原创 2018-06-10 21:30:19 · 473 阅读 · 2 评论 -
InnoDB事务锁-update search阶段加锁
原创 2018-06-30 23:02:58 · 662 阅读 · 0 评论 -
InnoDB事务锁-update update阶段流程
先处理聚集索引,再处理二级索引。原创 2018-06-30 23:04:32 · 1082 阅读 · 0 评论 -
undo log原理之InnoDB事务提交时undo页的相关操作
原创 2018-05-20 21:33:11 · 564 阅读 · 0 评论 -
InnoDB purge原理-readview和trx关系
原创 2018-05-27 15:24:39 · 814 阅读 · 0 评论 -
MySQL Timeout解析
http://ourmysql.com/archives/810?f=wb“And God said, Let there be network: and there was timeout”在使用MySQL的过程中,你是否遇到了众多让人百思不得其解的Timeout?那么这些Timeout之后,到底是代码问题,还是不为人知的匠心独具?本期Out-man,讲述咱们MySQL转载 2016-04-30 19:39:36 · 534 阅读 · 0 评论 -
innodb crash recovery流程
innobase_start_or_create_for_mysqllog_init();recv_sys_createrecv_sys_initopen_or_create_data_files:read first page in the ibdata, min_flush_lsn=max_flush_lsn=FIL_PAGE_FILE_FLUSH_LSNrecv_re原创 2016-05-29 16:18:17 · 833 阅读 · 0 评论 -
recovery判断正常关闭
recv_scan_log_recs scanned_lsn += data_len;if (scanned_lsn > recv_sys->scanned_lsn){//checkpoint_lsn肯定没刷完 需要recovery;}if (data_len finished = TRUE; break;}1)scanned_lsn是ch原创 2016-06-11 21:37:39 · 713 阅读 · 0 评论 -
mysql binlog与redo
redo和binlog的写入点不同。binlog只在事务提交完成后进行一次写入,而innodb的redo在事务进行中不断写入,并不是随事务提交的顺序写入的。比如写redo的顺序:T1,T2binlog写顺序:T2,T1如果T1是insert,T2是在T1的基础上update。将binlog传输到slave后,slave上执行顺序是T2,T1.这样岂不是造成主从不一致?各原创 2017-01-08 20:40:14 · 919 阅读 · 0 评论 -
InnoDB之MVCC机制与不可重复读
http://libisthanks.blog.163.com/blog/static/23527612320141016111027592/转载 2017-02-18 22:57:00 · 1940 阅读 · 0 评论 -
mysql5.7 group replication 几个有用的网址
http://mysqlhighavailability.com/performance-evaluation-mysql-5-7-group-replication/后面抽空看下原创 2017-03-06 22:13:43 · 622 阅读 · 0 评论 -
InnoDB undo tablespace使用及原理
前言Undo log是InnoDB MVCC事务特性的重要组成部分,对记录做了变更操作时会产生undo记录,默认存储到系统表空间中,但是从5.6开始,可以使用独立的undo表空间。Undo记录存储的是老版本数据,当一个旧事务需要读取数据时,为了能读取到老版本数据,需要顺着undo连找到满足其可见性的记录。当版本链很长时,可以认为这是要一个比较耗时的操作。大多数对记录的变更insert、update...原创 2018-05-20 15:48:22 · 2124 阅读 · 0 评论 -
MySQL5.6 CREATE TABLE分析
MySQL5.6之前的版本DDL是非原子的。也就是说对于复合的DDL,比如DROP TABLE t1, t2;执行过程中如果遇到server crash,有可能出现表t1被DROP掉了,但是t2没有被DROP掉的情况。即便是一条DDL,比如CREATE TABLE t1(a int);也可能在server crash的情况下导致建表不完整,有可能在建表失败的情况下遗留.frm或者.ibd文件。从原...原创 2018-05-13 21:10:39 · 653 阅读 · 0 评论 -
myloader原理解析
原创 2018-05-01 21:34:51 · 790 阅读 · 0 评论 -
InnoDB update原理解析
原创 2018-05-01 14:28:15 · 3066 阅读 · 0 评论 -
InnoDB delete原理解析
原创 2018-04-30 17:05:20 · 2214 阅读 · 0 评论 -
InnoDB insert原理解析
原创 2018-04-30 10:58:44 · 1353 阅读 · 0 评论 -
InnoDB search原理解析
原创 2018-04-29 15:39:29 · 339 阅读 · 0 评论 -
mydumper工作原理解析
1、简介逻辑备份小钢炮--mydumper是针对MySQL的高性能多线程备份工具。该工具是由MySQL、Facebook、skysql公司的开发人员一起开发的。是由轻量级C语言开发;执行速度据说比mysqldump快10倍;支持事务和非事务表的一致性备份;还支持导出binlog;支持多线程备份;支持以守护进程的形式工作,定时备份;并且是开源的,其协议为GPLv3.2、使用方法root@dd:~/m...原创 2018-04-28 21:59:14 · 915 阅读 · 0 评论 -
MySQL半一致性读原理解析-从源码角度解析
1、什么是半一致性读A type of read operation used for UPDATE statements, that is a combination of read committed and consistent read. When an UPDATE statement examines a row that is already locked, InnoDB retur...原创 2018-04-20 22:23:29 · 1180 阅读 · 0 评论 -
InnoDB MVCC实现原理及源码解析
1、原理介绍数据多版本(MVCC)是MySQL实现高性能的一个主要的一个主要方式,通过对普通的SELECT不加锁,直接利用MVCC读取指版本的值,避免了对数据重复加锁的过程。InnoDB支持MVCC多版本,其中RC和RR隔离级别是利用consistent read view方式支持的,即在某个时刻对事物系统打快照记下所有活跃读写事务ID,之后读操作根据事务ID与快照中的事务ID进行比较,判断可见性...原创 2018-04-15 15:44:38 · 2836 阅读 · 1 评论 -
InnoDB redo log格式-物理log
在页面上修改N个字节,可以看做物理log。包括以下几种类型:MLOG_WRITE_STRING、MLOG_8BYTES、MLOG_2BYTES、MLOG_1BYTES、MLOG_4BYTES。各种页链表指针修改以及文件头、段页内容的修改都是以这几种方式记录日志。具体格式如下:1、MLOG_2BYTES、MLOG_1BYTES、MLOG_4BYTES:2、MLOG_8BYTES3、MLOG_WRIT...原创 2018-04-07 12:57:25 · 1077 阅读 · 0 评论 -
解析MySQL binlog --(6)XID_EVENT、ROTATE_EVENT、STOP_EVENT
1、XID_EVENT当事务提交时,不论是statement还是row格式的binlog都会添加一个XID_EVENT作为事务的结束。该事件记录了该事务的ID。在mysql进行崩溃恢复时根据binlog中提交的情况来决定是否提交存储引擎中prepared状态的事务。2、ROTATE_EVENT当binlog文件大小达到max_binlog_size参数设置的值或执行flush logs命令时,bi...原创 2018-03-25 19:57:02 · 2056 阅读 · 0 评论 -
InnoDB数据字典--字典表加载
1、介绍在InnoDB启动时,如果是新建数据库则需初始化库,需要创建字典管理的相关信息。函数innobase_start_or_create_for_mysql调用dict_create完成此功能。即创建数据字典,因为InnoDB系统表的个数结构固定,所以初始化库的时候只需要创建这几个表的B+树即可并将B+树的根页号存放到固定位置。对于B+树,只要找到根页面,就可以从根页面开始检索数据。相关系统表...原创 2018-04-06 11:16:27 · 785 阅读 · 1 评论 -
InnoDB数据字典详解-系统表
1、简介InnoDB中,实际上看不到系统表。有4个最基本的系统表来存储表的元数据:表、列、索引、索引列等信息。这4个表分别是SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS。下面分别介绍2、SYS_TABLES存储所有以InnoDB为存储引擎的表,每条记录对应一个表。该表的列分别是: NAME:表名 ID:表的ID号 N_COLS:表的列...原创 2018-04-05 21:39:39 · 1091 阅读 · 0 评论 -
InnoDB rowid管理
1、流程原理图2、讲解在innodb表中,并不是每个行记录都存有row ID,只有表定义没有主键时,才会使用rowid并作为主键。rowid的分配是全局的,所有的表都共享这个ID,即从在dict_sys->mutex锁内获取dict_sys->row_id中的值。并不是每次插入操作都将rowid的值写入到字典页面中,插入操作相对于建表等操作频繁多了,所以如果每次都写入字典页面中的话,将...原创 2018-04-01 13:41:56 · 702 阅读 · 0 评论 -
解析MySQL binlog --(5)ROWS_EVENT:WRITE_ROWS_EVENT、UPDATE_ROWS_EVENT、DELETE_ROWS_EVENT
1、介绍对于statement格式的binlog,所有增删改的SQL语句都记录在QUERY_EVENT中,而row格式的binlog则以ROWS_EVENT格式记录对数据库的修改。ROWS_EVENT分为3种:WRITE_ROWS_EVENT、UPDATE_ROWS_EVENT、DELETE_ROWS_EVENT,分别对应insert、update、delete。WRITE_ROWS_EVENT包...原创 2018-03-25 16:05:08 · 3832 阅读 · 0 评论 -
解析MySQL binlog --(4)TABLE_MAP_EVENT
1、简介row格式的binlog文件中,每个ROW_EVENT之前都有一个TABLE_MAP_EVENT,用于描述表的内部ID和结构定义。mysql> show binlog events in "mysql-bin.000002";+------------------+-----+-------------+-----------+-------------+-------------...原创 2018-03-24 22:23:39 · 1738 阅读 · 0 评论 -
解析MySQL binlog --(2)FORMAT_DESCRIPTION_EVENT
该格式描述事件时binlog version 4中为了取代之前版本的START_EVENT_3事件而引入的。是binlog文件的第一个事件,并在一个binlog文件中仅出现一次。具体定义:binlog-version:binlog版本mysql-server version:服务器版本create timestamp:指明binlog文件的创建时间。如果该binlog是由于切换产生,那么该字段是0...原创 2018-03-11 17:08:31 · 682 阅读 · 0 评论 -
解析MySQL binlog --(3)QUERY_EVENT
一、介绍QUERY_EVENT事件以文本的形式记录信息。当binlog格式时statement时,执行的语句都存储在QUERY_EVENT中,如下所示:mysql> show binlog events in "mysql-bin.000002";+------------------+-----+-------------+-----------+-------------+------...原创 2018-03-16 21:49:39 · 1277 阅读 · 0 评论 -
MySQL mvcc实现讲解透彻的网址
http://www.sysdb.cn/index.php/2017/07/04/mysql-mvcc/:蒋老师讲解的,配图。很清晰,推荐阅读原创 2017-07-11 22:21:20 · 600 阅读 · 0 评论 -
MySQL复制--slave设置读取binlog的位置
change_master->global_init_info->Master_info::mi_init_info->Rpl_info_handler::init_info->Rpl_info_file::do_init_info ->mi->rli->rli_init_info()->初始化./relay-bin.000001,4原创 2017-10-03 12:17:42 · 1827 阅读 · 0 评论 -
mysqldump原理解析
mysqldump原理解析mysqldump过程中,server都执行了哪些操作呢?可以通过strace命令和打开general_log来查看。1、strace[mysql26@localhost ~]$ **strace mysqldump -uroot -p'db10$ZTE' --single-transaction --master-data=2 yzs t1 > 1.txt**exec原创 2017-11-26 11:39:39 · 1980 阅读 · 0 评论 -
InnoDB update操作原理图
原创 2018-02-18 09:23:24 · 672 阅读 · 0 评论 -
解析MySQL binlog --(1)大致结构及event type
1、简介binlog以事件的形式记录数据库变更情况。通过执行show binlog events in "binlog file"命令可以查看事件mysql> show binlog events in "mysql-bin.000002";+------------------+-----+-------------+-----------+-------------+---------...原创 2018-03-11 15:18:41 · 2340 阅读 · 0 评论 -
MySQL连接阶段原理解析
注:connect_timeout:默认10秒,The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. The default value is 10 seconds.Increasing the connect_timeout val...原创 2018-03-04 16:14:43 · 1055 阅读 · 0 评论 -
InnoDB事务锁之行锁-insert二级唯一索引插入duplicate案例
1、表结构CREATE TABLE `t3` ( `id` int(11) NOT NULL, `id2` int(11) DEFAULT NULL, `id3` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id2` (`id2`,`id3`)) ENGINE=InnoDB DEFAULT CHARSET=utf...原创 2018-02-09 21:11:10 · 484 阅读 · 0 评论 -
InnoDB事务锁之行锁-判断是否有隐式锁原理图
原创 2018-02-10 19:43:13 · 415 阅读 · 0 评论 -
InnoDB事务锁之行锁-隐式锁转换显示锁举例理解原理
原创 2018-02-14 21:02:53 · 772 阅读 · 0 评论