三 11 index merge的数据结构和成本评估 发布时间:2013 年 3 月 11 日 发布者: OurMySQL 本文将介绍index merge实现的主要数据结构以及MySQL如何评估index merge的成本。在开始本文之前,需要先理解Range访问相关的数据结构介绍:SEL_ARG结构,SEL_TREE结构。 继续阅读全文 →
三 07 MariaDB 特性介绍-动态虚拟列 发布时间:2013 年 3 月 7 日 发布者: OurMySQL MariaDB为NoSQL的扩展提供的另外一个特性 就是:动态列。对表的每一行都可以有一个“虚拟列”,该列可以用于保存一个对象的不同属性,每个属性在各行之间可以完全不同,“虚拟列”的个数和内容完全有应用程序来控制和解释。 继续阅读全文 →
三 05 MySQL源码:Range优化相关的数据结构 发布时间:2013 年 3 月 5 日 发布者: OurMySQL 泛读了整个MySQL Range优化的相关代码,这里将总结Range优化相关的数据结构。本文不是从宏观(High Level)角度介绍Range优化相关内容,如果看客对此感兴趣,建议绕过本文,直接阅读参考文献,相信会有收获。 继续阅读全文 →
三 05 MySQL源码:Range和Ref优化的成本评估 发布时间:2013 年 3 月 5 日 发布者: OurMySQL MySQL的一个执行计划,有两部分成本,CPU成本(CPU COST)和IO成本(IO COST)。CPU COST是指查询出纪录后,需要做过滤等处理的时候的CPU消耗,IO COST是指,从存储引擎读取数据时需要做的IO消耗。 总成本 = CPU COST + IO COST 补充说明:(1) IO成本计算不考虑缓存的影响。因为在优化器本身是无法预知需要的数据到底在内存中还是磁盘上。 继续阅读全文 →
三 05 MySQL源码:JOIN顺序选择的复杂度 发布时间:2013 年 3 月 5 日 发布者: OurMySQL 在看MySQL优化器代码过程中,这应该是相对较简单/代码较清晰的部分了。MySQL优化器有两个自由度:单表访问方式,多表顺序选择。前文已经介绍过MySQL单表访问的一些考量(ref/range等),本文将介绍JOIN在顺序选择上的复杂度分析。 继续阅读全文 →
三 03 MySQL slave error 1677 发布时间:2013 年 3 月 3 日 发布者: OurMySQL 今天一台slave突然报错,最终定位是有两个系统,有一个系统写入不规范引起。这边不详细介绍这个问题,记录一下。slave_type_conversions:在slave上进行字段类型转化的,因为主备之间可能在某些情况下,有相同的表名,但字段多少、字段类型、字段顺序不一样,可能导致1677错误,这时需要设置相应参数来进行处理。 继续阅读全文 →
二 28 量化InnoDB group commit的效果 发布时间:2013 年 2 月 28 日 发布者: OurMySQL InnoDB的redo log的group commit历史比较悠久了(有别于binlog的group commit)。如果设置为1,每次事务提交都至少需要写一次redolog。这对IOPS冲击严重,尤其是在HDD上,直接成为性能瓶颈。Group commit的基本想法是将多个并发线程对redo的fsync操作合并成1个。 继续阅读全文 →
二 27 [MySQL版本差异] 丢失frm文件之后drop database的不同结果分析 发布时间:2013 年 2 月 27 日 发布者: OurMySQL 丢失frm文件之后drop database的不同结果分析。 继续阅读全文 →
二 19 InnoDB一定会在索引中加上主键吗 发布时间:2013 年 2 月 19 日 发布者: OurMySQL 由衷的建议,所有的DBA建索引的时候,都在业务要求的索引字段后面补上主键字段,这没有任何损失,但是可能给你带来意外的惊喜。 继续阅读全文 →