【IT168 现场报道】2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕。在为期三天的会议中,大会将围绕大数据应用、数据架构、数据管理(数据治理)、传统数据库软件等技术领域展开深入探讨,并将邀请一批国内顶尖的技术专家来进行分享。本届大会将在保留数据库软件应用实践这一传统主题的基础上,向大数据、数据结构、数据治理与分析、商业智能等领域进行拓展,以满足于广大从业人士和行业用户的迫切需要。
自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix技术社区已经连续举办了三届数据库技术大会,每届大会超过千人规模,云集了国内技术水平最高的数据架构师、DBA、数据库开发工程师、研发总监、IT经理等,是目前国内最受欢迎的数据库技术盛会。
在DTCC2013大会的MySQL架构与优化专场,Twitter高级工程经理Calvin Sun(孙春生)为我们带来了《深入解析MySQL InnoDB引擎》的演讲。Calvin目前负责Twitter的MySQL开发团队。在加盟Twitter团队之前,他在Oracle公司任高级工程经理,负责InnoDB存储引擎的技术方向和开发工作。在2008年加盟Oracle之前,他负责MySQL存储引擎的开发和管理工作,包括和第三方MySQL存储引擎供应商的协调工作。他有超过15年的数据库内核开发经验。Calvin 1989年从中科大毕业获得计算机科学硕士学位,1989年到1993年间在该校从事教职工作。
▲Twitter高级工程经理Calvin Sun
InnoDB由Innobase Oy公司开发,被包括在MySQL所有的二进制发行版本中,是Windows下默认的表存储引擎。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发),行锁设计,支持MVCC,提供类似于Oracle风格的一致性非锁定读,支持外键,被设计用来最有效地利用内存和CPU。如果你熟悉Oracle的架构,你会发现InnoDB与Oracle很类似,也许这也是为什么Oracle要急于在MySQL AB之前收购该公司的原因。
InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool)、重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool),分别由配置文件中的参数innodb_buffer_pool_size和innodb_log_buffer_size的大小决定。
InnoDB存储引擎的关键特性包括插入缓冲、两次写(double write)、自适应哈希索引(adaptive hash index)。这些特性为InnoDB存储引擎带来了更好的性能和更高的可靠性。
▲MySQL服务器架构
插入缓冲是InnoDB存储引擎关键特性中最令人激动的。不过,这个名字可能会让人认为插入缓冲是缓冲池中的一个部分。其实不然,InnoDB缓冲池中有Insert Buffer信息固然不错,但是Insert Buffer和数据页一样,也是物理页的一个组成部分。
如果说插入缓冲带给InnoDB存储引擎的是性能,那么两次写带给InnoDB存储引擎的是数据的可靠性。当数据库宕机时,可能发生数据库正在写一个页面,而这个页只写了一部分(比如16K的页,只写前4K的页)的情况,我们称之为部分写失效(partial page write)。在InnoDB存储引擎未使用double write技术前,曾出现过因为部分写失效而导致数据丢失的情况。