MySQL

  • 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…)

  • 详解MyISAM Key Cache(后篇)

    ·

    在前两篇(前篇中篇)中,分别介绍了Key Cache的基本原理(LRU和Midpoint Insertion Strategy)。最后,将介绍一些相关的参数、状态参数和命令。

    Key Cache的配置很灵活,可以针对全局配置,还可以针对某个单独数据表分配Key Cache的大小;如果一个数据表某部分的索引块被访问的非常频繁(较之其他索引块),那么可以配置Midpoint Insertion Strategy达到最大的利用率(参考)。 (more…)

  • Linux下C语言连接MySQL

    ·

    相对于Window下的设置,Linux要简单的很多。

    1. 示例程序

    $ vi mysql-c-api.c #include <stdio.h> #include "mysql/mysql.h" int main(){ MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_OPT_COMPRESS,0); mysql_options(&mysql,MYSQL_INIT_COMMAND,"SET autocommit=0"); if (!mysql_real_connect(&mysql,"10.2.3.4","user","passwd","database",0,NULL,0)) { fprintf(stderr, "Failed to connect to database: Error: %sn", mysql_error(&mysql)); } return 0; }

    2. 编译命令

    在MySQL编译后的二进制文件中,有一个很有用的二进制文件“mysql_config”(一般和mysql命令在同一个目录下),我们可以通过这个程序找到需要的头文件和连接库:

    $ gcc -o a.out $(mysql_config --cflags) mysql-c-api.c $(mysql_config --libs) $ ./a.out
  • 详解MyISAM Key Cache(中篇)

    ·

    前篇中介绍了Key Cache的基本机制,并且介绍了Key Cache的LRU算法。作为对LRU算法的改进,MyISAM还提供了另一个缓存算法:“Midpoint Insertion Strategy”。本文将重点介绍该算法的原理和配置。

    1. 相关参数

    该策略涉及的参数有:key_cache_division_limitkey_cache_age_threshold

    2. 原理介绍

    (1) 该策略将前面的LRU队列(LRU Chain)分成两部分,hot sub-chain和warm sub-chain。并根据参数key_cache_division_limit划分,总保持warm sub-chain在这个百分比以上。默认情况key_cache_division_limit是100,所以默认时候只有warm sub-chain,即LRU Chain。
    (注:Multiple Key cache情况,每个key cache都有对应的key_cache_division_limit值) (more…)

  • 详解MyISAM Key Cache(前篇)

    ·

    本文将分为前、中、后三篇,分别介绍MyISAM Key Cache的一般机制、Mid-point strategy、状态、参数和命令。

    “Cache为王”,无所不在。为了最小化磁盘I/O,MyISAM将最频繁访问的索引块(“index block”)都放在内存中,这样的内存缓冲区我们称之为Key Cache,它的大小可以通过参数key_buffer_size来控制。在MyISAM的索引文件中(MYI),连续的单元(contiguous unit)组成一个Block,Index block的大小等于该BTree索引节点的大小。Key Cache就是以Block为单位的。 (more…)