06 2014 档案
摘要:MySQL purge log简单吗?简单: purge log的功能很简单,purge master logs to 指定一个binlog,然后删除之前的文件系统上的binlog文件,并更新binlog.index文件。复杂: 需要保证purge的原子操作吗, 怎么保证, 有崩溃恢复吗?之前没有读...
阅读全文
摘要:MySQL ddl丢表: MySQL server层为了和innodb层保持数据一致性,在写binlog和redo log时,引入了两阶段提交,但不同的变更产生的日志并非都使用这种策略。下面就来看看ddl语句产生的binlog日志写入交互过程,从源码的角度理解大家熟知的MySQL ddl丢表。 ...
阅读全文
摘要:今天小伙伴问了一个sql的问题: update t set status=2 where id in(select id from t where status=1)这个sql,在并发的情况下,会不会有问题?假设:下面的讨论,数据库的事务隔离级别是read_committed其实这个可以很容易测试...
阅读全文
摘要:编译DBD 项目中经常使用perl,但perl在连接数据库时,需要依赖DBI,DBD驱动,但默认安装DBD驱动时,需要依赖数据库的lib库。 比如perl连接MySQL,需要安装MySQL client。 下面使用静态编译,把DBI, DBD, MySQL client的libclient库静态...
阅读全文
摘要:MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构变更的一致性。MDL锁的加锁模式和源码上的组织上和上一篇blog中MySQL表锁的实现方式一致,都采用了【mutex+condition+queue】来实现并发,阻塞,唤醒的控制。下面就来看看MD...
阅读全文
摘要:上一篇介绍了MySQL源码中保护内存结构或变量的锁,这里开始介绍下MySQL事务中的表锁。注1: 在表锁的实现上面,使用【mutex+condition+queue】的结构实现并发,阻塞,唤醒的表锁功能。注2: 本文进行的一些实验,重要的配置项:1. autocommit=02. tx_isol...
阅读全文
摘要:MySQL的锁: MySQL内部有很多种类的锁,按照用途不同,可以分为两类: 1. 保护内存结构的锁,实现同步机制 server层对于线程共享的变量,基本上使用mutex,rwlock来做保护。 innodb层会增加使用spinlock自旋锁 2...
阅读全文
摘要:背景: MySQL经常会遇到Too many open files,MySQL上的open_files_limit和OS层面上设置的open file limit有什么关系? 源码中也会看到不同的数据结构,TABLE, TABLE_SHARE,跟表是什么关系? MySQL flush ...
阅读全文
摘要:前一篇介绍了cost的计算方法,下面测试一下两表关联的查询:测试用例CREATE TABLE `xpchild` ( `id` int(11) NOT NULL, `name` varchar(100) DEFAULT NULL, `c1` int(11) DEFAULT NULL, `c2...
阅读全文
摘要:记录MySQL 5.5上,优化器进行cost计算的方法。第一篇: 单表的cost计算数据结构:1. table_share: 包含了表的元数据,其中索引部分:key_info:一个key的结构体,代表一个索引,包含了:key_length:key的长度key_parts:key一共有多少个colum...
阅读全文
摘要:完成了sql的解析过程后,开始进入优化器:调用的流程分为: mysql_select: JOIN::prepare: JOIN::optimize: JOIN::exec: prepare过程: 组装各个组件,包括:stepup tables, fields, con...
阅读全文

浙公网安备 33010602011771号