论坛首页 Web前端技术论坛

Google在修补,改进MySQL

浏览 2697 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-18   最后修改:2010-07-03

根据Google工程师Mark Callaghan的最近一篇blog所说,Google是使用MySQL的大用户,并且是MySQL的爱好者. Callaghan介绍了Google对MySQL代码基础做的一些修改和强化来使DBMS的更具可扩展展性和可管理性. 这些修改已经以GPL license方式捐献给了MySQL社团.
<!-- --> <!-- -->

当MySQL宣布支持这个流行的开源DBMS的公司的收益已经达到$50M,并且准备进行一次IPO的这一天,我们就可以感觉到大企业在关键使命的项目上 对MySQL的依赖正在增加. Google就是这样的大公司其中之一,Google工程师Mark Callaghan最近发表的这篇blog描述了Google对MySQL基础代码做的一些贡献.

我们认为MySQL是个很棒的数据存储方案,当我们的项目需求需要这个数据在某些领域有所提高时,我们对MySQL做了些改善,主要是针对高效性和可管理性领域.

高可用性的特征包括支持半同步复制,监视从一个master到一个slave的binlog,应急恢复时及时把一个slave提升到master,在应急修复中保持InnoDB和复制的状态.

可管理性特征包括用来监视table和account使用的资源的新的SQL语句. 这个包括了计算每个account和每个table取到的或者是被改变的行数的能力. 这同样也包括测量一个account执行SQL命令使用数据库的时间.

Google Code页面中子项目的Wiki对这些改进有较详细的描述:

  • Semi-synchronous replication

    MySQL的复制协议是异步的. master并不知道何时或者是否一个slave得到了复制事件. 这样很高效. 一个slave会请求一个file的某个偏移处的所有复制事件. 当它们准备好时master会把事件推给它们...

    每个发送给半同步的slave的复制事件都需要额外的两个字节放在头部来指明这个事件是否需要答复. 这些字节会被slave IO线程剥去,剩下的事件信息会被正常处理. 当需要答复时,slave IO线程会用现有的连接去回应master.指示一个事务结束的事件,例如commit或者允许自动提交的insert,一般需要回复.

  • Mirrored Binlogs

    我们已经修改了slave IO线程让它在master写入relay log时维护master的binlog的副本. 通过拷贝,保证这个文件拥有相同的名称和内容. 当这个完成后,slave就会在复制代理slave中透明的启用应急备份,直到所有的代理都镜像了binlog.

  • Transactional Replication

    slave复制状态被存在两个文件里:relay-log.info and master.info. slave SQL线程向存储引擎提交事务,然后更新这些文件,指示relay log里的下一个事件将会被执行. 事务提交过程中如果slave mysqld被终止了,这个file update状态和复制状态不一致,slave SQL线程就会在slave mysqld重启时重复最后一个事务.

    这个功能通过将复制状态存储在InnoDB事务log里来保护InnoDB 储存引擎. On restart, this state is used to make the replication state files consistent with InnoDB.

  • Activity monitoring per table, account and index

    我们增加了一些代码来测量数据库的活动,统计每个account,table,和index的数据. 我们同时新增了一些SQL声明来显示这些数据.

  • Asynchronous IO in InnoDB

    InnoDB在Windows上支持异步IO. Linux上,它在后台使用4线程去执行IO任务而且每个线程都是要同步IO... 当InnoDB在random IO中发现locality,当它检测到一个序列扫描时,它会发出预取请求. 然而,它只会使用一个线程去执行这些请求. 越多的IO请求被并行的执行时,多磁盘的server就被利用的越充分.

    因为现在的服务器都使用大GB的内存,所有应该尽可能的使用直接的IO操作. 我们修改了InnoDB,让它能够配置用来在后台执行读写请求的IO线程的数目.

  • Fast Master Promotion

    这些指令可以让一个slave迅速的提升为master. 因为我们可以让它不需要重启就能实现,所有很快. 有脏页面的数据库引擎,例如InnoDB,通常需要花很长时间去shutdown(超过一分钟)

  • What features do you believe MySQL would really need in order for developers to use the open-source DMBS in demanding enterprise projects?

     

    外刊IT评论  

    论坛首页 Web前端技术版

    跳转论坛:
    Global site tag (gtag.js) - Google Analytics