"MySQL性能优化" - InfoQ & Baidu技术沙龙小记
来源:互联网 发布:常用中文数据库有哪些 编辑:程序博客网 时间:2024/06/05 02:26
上周六去参加了一次InfoQ举办的百度技术沙龙。主题是关于MySQL的。当天到场了不少人,有些出乎我意料之外,也许是因为免费的吧:)
一共有两个演讲嘉宾,第一个来自百度,主要介绍了百度在SSD/Flash上做的工作,第二个来自terradata,主题是关于spatial database的。坦率的说,第一个演讲非常的棒,看得出来百度在SSD方面做了很多的工作,讲述得也很详细。第二个则有些像白开水,平淡无味,而且东西比较浅。
重点写一下第一个讲座的心得。
其实思想很简单,既然是想在SSD上做文章,自然就是想利用SSD特有的性能优势。SSD有什么好处呢,演讲嘉宾举了好些数据,简单的说,SSD对于随机读支持得很好,随机写性能一般,追加写(append write)性能不错。所以用SSD,要么应用场景切合SSD的优势,要么,从架构上改变应用场景的IO模式,使其适合SSD的特点。
对于Mysql,对于数据库来说,肯定是有大量的读操作,这点用SSD当然会有很大的性能提高,但另一方面,很多时候也会面临大量的写操作,尤其是随机写,这种情况就不是很适用于SSD了。所以,百度对Mysql的存储引擎Innodb写了一个3000行的patch。这个patch干什么用呢,说白了就一句话,将随机写转变为追加写。
那么,这事怎么做呢?
由于当时的PPT还没有放出来,所以我只是根据自己的记忆画了个草图,当然架构中的很多部分我都忽略掉了。凑合着看吧。
当mysql需要对数据库的数据进行写操作时,它并不是直接写原来的data file,而是把写好的page放在内存中,当内存中攒满了几个page后,它就将这些page组织成一个block,将这个block以append write的方式写入到另一个cache file中。这一步很重要,因为它将本来是随机写入原始data file中的操作编程了对cache file的追加写。
再看读数据,内存中会维护一份page mapping,这样当database需要读某个page的数据的时候,它会写在page mapping中查找这个page是在data file还是在cache file中,然后再从相应的file中将数据取出来。虽然cache file中的数据是非常凌乱的组织,但由于SSD的随机读性能很好,所以这一点就不成问题。
最后,cache file在某个时刻要合并到原始的data file中。这一步其实会产生大量的随机写。但是,系统可以通过调度和控制,找到一个系统负荷很小的时刻来执行这个merge操作,比如深夜。这样,就避免了大量的随机写对系统的性能造成影响。
换个角度看,其实它并不是真正的将随机写变成了追加写,而是暂时将随机写变成了追加写,然后找到一个合适的时机将这些追加写再变回为随机写。看起来似乎设计得也挺简单的。但我相信,这个方案肯定也是经过了很多次的实验和讨论才能成型的。
另外,SSD另一个遭人诟病的地方是它的故障率。百度给出的一个指标是每周千分之二的故障,可以说这已经是很高了。会后我私下问是怎么解决这个问题的。答案大体分为几层,首先,在设备层面,SSD本身会有一些容错恢复机制,其次,可以采用raid方式进行容错,最后,在分布式架构上设计容错算法。
-- END --
- "MySQL性能优化" - InfoQ & Baidu技术沙龙小记
- MySQL性能优化" - InfoQ & Baidu技术沙龙
- 百度技术沙龙&InfoQ笔记
- MySQL性能优化小记
- Django+Mysql性能优化小记
- 【20110115 InfoQ 百度技术沙龙 2010 第 10 期】会议记录
- 小记“性能瓶颈定位”测试沙龙
- infoQ 百度技术沙龙第25期回顾:海量数据处理技术解析
- 【预告】CSDN TUP第四期:Hadoop技术沙龙——Hadoop应用性能优化实战
- 【预告】CSDN TUP第四期:Hadoop技术沙龙——Hadoop应用性能优化实战
- 【MySQL性能优化】Mysql索引技术详解
- Baidu 优化和排名技术
- Baidu 优化和排名技术
- mysql 性能小记
- MySQL优化策略小记
- MySql优化小记
- 数据库性能优化学习小记
- 技术沙龙
- JDK tomcat Axis的安装及使用
- 添加帮助文档链接
- (牛人总结)背包九解
- SVN版本库迁移过程遇到的问题
- 修改oracle11g的系统日期格式
- "MySQL性能优化" - InfoQ & Baidu技术沙龙小记
- 一次性删除数据库内所有表数据
- asp.net Gridview DataFormatString 用法
- Wince电源管理(一) ---- Windows CE设备驱动开发之电源管理
- PHP默认的上传限定是最大2M
- 关于真实
- MPI批生成问题LNK2001错误
- Perl 与MYSQL
- 七界传说第十卷