06 2014 档案

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