2014中华架构师大会蓄势待发

会议官网

【大会介绍】
中华架构师大会又将与大家见面了!

2014年11月15日-16日,上海长城假日酒店,我们诚挚地欢迎您的参加!

自2010年11月首次举办以来,大会云集了国内水平最高的IT架构师、技术总监、项目经理、运维总监/经理、DBA经理、研发工程师等IT技术大牛,由最初的百人规模扩展到现今超千人的技术饕餮盛宴。大会一直受到业界广泛关注与赞誉,是目前华东与华南地区最受欢迎、人气最高的架构师技术交流盛会。本次大会将继续秉承分享IT最佳应用实践的宗旨,以“发现架构之美,实战为王”为主题,邀请国内知名互联网企业的资深架构师和工程师,探讨实下最热门的行业趋势与技术热点,分享架构在企业中的最佳实践。大会关键词:分布式文件系统、大数据、GO语言、自动化、分布式数据库、云计算架构设计等。

欢迎大家踊跃报名参会,大会期间将与各行精英面对面的交流,绝对让您不虚此行。

本届会议官方报名网站:http://meeting.zhdba.com

【大会详情】
会议名称: 2014中华架构师大会
会议时间: 2014年11月15日-16日
会议举办具体地址:上海恒丰路585号 上海广场长城假日酒店
票价: 免费
会议主办方:中华数据库行业协会
联系人:朱颖丹
电话:136 5197 9898
邮箱:zhuyingdan@zhdba.com

【主持人】

MySQL开发流程介绍

1. 功能开发(Feature Development)

功能开发过程如下:

  • MySQL的一个功能是指一个worklog.
  • Worklog的开发要经过规格定义,设计,架构评审,代码实现,代码评审和QA评审的过程(但是这几个过程并不是严格的按照先后顺序进行的).
  • MySQL的功能首先在一个功能树(feature tree,是指代码分支树)上实现.
  • 功能树是从MySQL的代码主开发树TRUNK上克隆出来的(一般是开发者自己创建),开发过程中不定期从TRUNK同步.
  • 当功能实现以后,必须要经过代码的评审。
  • 代码评审通过后,开发树被QA接手。
  • QA对功能进行测试,如发现缺陷(bugs),开发人员要进行修复.最终在测试通过后,QA将状态设置为开发过程完成(sign off).
  • 一旦QA验证完毕,功能就会被合并到TRUNK中.

通过这个过程,TRUNK上会不停的累积功能和缺陷修复的代码。额外的回归测试(Regression testing)一刻不停的在TRUNK上执行,以保证TRUNK始终能够保持候选发布版本(Release Candidate)的质量。

MySQL数据库InnoDB存储引擎中Adaptive hash index存在问题、Percona改进及一个bug

背景
Adaptive hash index (AHI)是MySQL数据库InnoDB存储引擎中用于加速索引查找的一个结构。InnoDB本身不支持hash索引,所有的索引检索都走B树查询。AHI可以认为是“索引的索引”。当对一个页面的访问次数满足一定条件后,将这个页面的地址存在一个hash表中,下次查询可以直接访问到页面,不需要走B树查询。

问题
天下没有免费的午餐,在加速查询的同时,AHI与其他缓存结构一样,也面临维护的问题。作为一个全局结构,在更新时必然有一个全局锁操作(btr_search_latch),一个查询里面可能会对其作多次加x_lock操作。

Percona的改进
如同Buffer Pool可以用多个instance减少锁冲突,Percona也用类似的策略来处理AHI的锁问题。由于本身就是Hash结构,这个处理既自然又方便。所有的数据节点都必然属于一个索引,AHI就用索引id来作分区的key(block->index->id).计算规则为(index_id % btr_search_index_num), 这个 btr_search_index_num 就是 Percona中引入的只读参数 innodb_adaptive_hash_index_partitions。
全局的btr_search_latch则分为btr_search_index_num 份,AHI中每个block中新增一个成员指向 btr_search_latch_part[i].

MySQL5.6.7-rc index condition pushdown代码解读

对index condition pushdown很感兴趣,并且跟踪代码让自己受益良多,因此就来跟一下相关代码。

看的是mysql5.6.7-rc官方社区版。

 

先说说我对研究MySQL源码的看法:

每个使用MySQL数据库的人都应该看代码吗?不是的,那意味着MySQL数据库的使用门槛太高,几乎不可用;但另一方面,如果看MySQL代码的人多了,意味着有更多的人对MySQL数据库的了解更加深入。能够进一步推动MySQL数据库广泛而恰当地使用,为使用者、相关从业者创造更多的赢利机会和就业机会。

MariaDB数据库5.5.27 HASH JOIN源码解读

MariaDB数据库加入了对HASH JOIN算法的支持,我对HASH JOIN不了解,借此机会学习一下,测试的数据库版本为MariaDB5.5.27。

先是配置文件,这是我为了方便跟踪源码,在windows上建的环境。

 

D:mariadb-5.5.27sqlDebug>more my.ini
[mysqld]
innodb_file_per_table
optimizer_switch='index_condition_pushdown=on'
optimizer_switch='mrr=on'
optimizer_switch='mrr_sort_keys=on'
optimizer_switch='mrr_cost_based=off'
mrr_buffer_size=32M
optimizer_switch='join_cache_incremental=on'
optimizer_switch='join_cache_hashed=on'
optimizer_switch='join_cache_bka=on'
join_cache_level=4

 

Transfer在MySQL数据库双主同步架构中的应用

有同学讨论到Transfer能否支持双主结构,答案是支持的,这里简要描述下。

背景

       Transfer既可以当作主从库之外的工具来用,也可以本身充当slave的角色。本文分别描述在这两种使用场景下的部署结构和切换动作。 

Slave模式

a)      结构

这个就是最简单的双主啦,Transfer呢?代码直接写到这两个Master里面啦,所以他们就是Transfer.

MySQL数据库Filesort过程

看mysql源码的收获

•为优化提供理论依据
•为优化提供方向
•学习解决问题的算法和思路

 

filesort algorithm

  • 读取所有需要排序的数据
  • 每行数据
  •     算法1(original):存储排序key和行指针
  •     算法2(modified):存储排序key和select中的字段
  • 每次排序sort_buffer_size能容纳的行数,排序结果写入IO_CACHE对象(不妨称为IO1),本次排序结果的位置信息写入另一个IO_CACHE对象(不妨称为IO2);
  • IO_CACHE超过64k时写入临时文件
  • 当order by有limit n时,只需要把前n条排序结果写入IO_CACHE;
  • 排序KEY长度<=20且排序KEY数量在一千和十万之间时使用radixsort,否则使用quicksort
  • Merge buffer
  • 读取排序结果(算法2直接从临时文件读取结果;算法1从临时文件读取行指针,再从表中读取数据)

MySQL数据库中QueryCache的锁模型

有同学在问 MySQL数据库中 QueryCache(QC)的锁是 “全局锁”还是 “表锁”。这里简要说明一下。

1、  QC基本概念

这个是实现在MySQL层(非引擎层)的一个内存结构,基本规则是将满足一定条件的查询结果缓存在内存中,若同样的查询再执行第二次,而且缓存没有失效,则可以直接返回查询结果,无需到引擎获取数据。

几个说明:

a) QC的结构是hash,key为查询字符串的原文,因此若想命中QC,要求查询语句与之前的一模一样,包括大小写必须一致、不能增减空格等等。

MySQL多线程同步MySQL-Transfer介绍

一、关于Transfer

MySQL-Transefer(下称Transfer)是一个基于MySQL+patch后得到的主从同步工具。
其主要目的是为了解决原生版本的主从同步里,从库是单线程apply主库的binlog,导致的延迟。

最近完成测试的版本将multi-master (by P.Linux)合并到Transfer中并针对支付宝的应用需求做了定制性能改进。

这里做一个已经完成的完整功能介绍。