testing-04

MySQL

  • InnoDB Plugin特性介绍-1

    ·

    迫于开源社区、团体(Google Facebook Percona Xaprb等)的巨大压力,InnoDB Plugin相比Built-in版本有了很大的提升,这些提升多数来自开源社区贡献的代码,虽然本身也有一些改进。

    1. 关于Fast locking

    在多个线程并发访问相同资源的时候,需要使用一些InnoDB实现的互斥量(mutex)和读写锁(read/write lock)。在Unix-like平台上,InnoDB是通过Pthread的互斥量(这是POSIX标准的一部分)来实现的。在现代OS和硬件平台中,一般都有了更有效的替代方案,多数情况下这些替代方案使用更少的CPU指令和时钟周期来完成这些互斥处理。
    (more…)

  • InnoDB Plugin新特性:压缩表

    ·

    Plugin的一个重要的特性就是增加了压缩存储。对于数据中有很多Long column(包括TEXT BLOB或者大VARCHAR)的场景能够大幅节约空间,并提升效率。

    1. 谁需要压缩?

    在InnoDB中,是以16K的页(Page)为基本的存储单位的。我们知道,InnoDB是的数据是在Clustered index中存储的,在Secondary index中仅存储对应数据的PK。Clustered index和Secondary index都是B-Tree结构的,所以对InnoDB数据页和索引页的压缩很大程度上就是对B-Tree节点页的压缩

    在InnoDB中,除了B-Tree节点页,还有一类数据页(Page),称为“overflow page”。当需要存储Long column时,如果当前页能够完全存储全部字段时,则存储在当前页中;如果当前页不足以存储全部,则InnoDB选择最长的字段,将其存储到一个单独的页中,我们称这样的页为“overflow page”,而原数据页仅仅需存储一个20Bytes的指针。参考下图:

    InnoDB_overflow_page

    所以InnoDB除了有上面的B-Tree页外,InnoDB还存储overflow页。事实上,需要压缩的数据页也就是这两类,InnoDB为了获得更好的效率,针对这两类数据页的压缩是使用不同的策略的。

    (more…)

  • InnoDB Plugin文件格式(概述)

    ·

    本文将介绍InnoDB Plugin数据表格式的基本概念。

    1. 配置参数innodb_file_format

    这是一个很容易混淆的概念。目前,在InnoDB Plugin(1.0.6)配置文件中innodb_file_format支持两种:Antelope/ˈæntɪləʊp/、Barracuda/ˌbærəˈkjuːdə/。他们分别是两种文件格式的代号,在未来版本中,InnoDB将继续延续这种代号机制,它们会是Antelope, Barracuda, Cheetah, Dragon, Elk, Fox等等。

    Antelope_Barracuda

    (more…)

  • InnoDB Plugin安装

    ·

    InnoDB Plugin较之Built-in版本新增了很多特性:包括快速DDL、压缩存储等,而且引入了全新的文件格式Barracuda。众多测试也表明,Plugin在很多方面优于Built-in版本。当前Plugin版本是1.0.6,一个RC版本。MySQL的官方版本中从5.1.42开始也内置了InnoDB Plugin1.0.6。

    这里简单的介绍InnoDB Plugin的编译安装

    1. 下载源码

    这里使用MySQL5.1.45和InnoDB Plugin1.0.6版本安装。需要单独下载MySQL和InnoDB Plugin的源码:MySQL Community ServerInnoDB Plugin

    2. 解压并替代源码

    我们需要使用下载的Plugin源码代替MySQL源码中的storage/innobase目录。

    tar zxvf mysql-5.1.45.tar.gz $tar zxvf innodb_plugin-1.0.6.tar.gz $rm -rf mysql-5.1.45/storage/innobase $mv innodb_plugin-1.0.6 mysql-5.1.45/storage/innobase

    (more…)

  • MySQL5.5版本信息

    ·

    本文完全参考MySQL Manual,毫无新意。

    MySQL5.5之后,版本的信息会像这个样子:MySQL-5.5.2-m2,Why?

    以前MySQL开发进程是将大量特性加入到MySQL代码库进行测试开发,然后分发5.1.0……5.1.44等版本。缺点是某个小特性(代码)的测试有可能会影响到整个版本。这也是MySQL6.0迟迟没有RC的一个原因。

    现在使用“里程碑模式”(milestone mode),而每一个milestone版本则仅关注某一小部分特性进行开发测试,这样可以让MySQL能够更快的放出对应的RC。下一个milestone则在原来(上一个milestone)基础上进行开发,仅关注某一小部分特性进行开发和测试,并对这一小部分特性进行全面、彻底的测试。

    例如,MySQL 5.5.0-m2 是Milestone 2的第一个版本。该milestone专注于代码基本的稳定性。在m2发展历程中,我们还会看到MySQL 5.5.1-m2,MySQL 5.5.2-m2等。

    为什么不是m1呢?(认为5.4就是m1)。

  • InnoDB Double write

    ·

    记得刚开始看InnoDB文档的时候,Double Write一节(其实只有一小段)就让我很困惑。无奈当时内力太浅,纠缠了很久也没弄明白。时隔几个月,重新来整理一下。

    涉及到的概念:Buffer Pool简称BP,Dirty PageLog fileFlushinnodb tablespace

    1. 什么是Double Write

    在InnoDB将BP中的Dirty Page刷(flush)到磁盘上时,首先会将Page刷到InnoDB tablespace的一个区域中,我们称该区域为Double write Buffer。在向Double write Buffer写入成功后,再择机将数据拷贝到正在的数据文件对应的位置。

    咋一看,这个过程有些多余 (more…)