高性能MySQL笔记(下)

来自Alex's wiki
Admin讨论 | 贡献2016年9月10日 (六) 02:24的版本 9.4.7使用Flashcache

跳转至: 导航搜索

相关文章:高性能MySQL笔记(上)

第九章操作系统和硬件优化

9.1什么限制了MySQL的性能

最常见的两个瓶颈是CPU和I/O

9.2如何选择CPU

快速CPU还是多CPU,有两个目标:

低延时(快速响应)
要做到这一点就需要高速CPU
高吞吐
如果能同时运行很多查询,则可以从多CPU中受益

MySQL复制,也能在高速CPU下工作的非常好,而多CPU对复制的帮助不大。而备库的瓶颈通常是I/O子系统而不是CPU(因为在备库上已经被简化成了串行化任务)

9.3平衡内存和磁盘资源

顺序I/O比随机I/O快
内存随机访问比磁盘随机访问快了2500倍,但顺序读只比磁盘快了10倍左右
假设每次读取100字节:
  • 磁盘 随机寻道:100次/S ; 50M/S的顺序读
  • 内存 随机访问:25万次/S; 顺序访问:500万次/S。内存的顺序读写速度一般都在10G/S以上
缓存命中率
缓存命中率实际上也会决定使用了多少CPU,所以评估缓存命中率的最好方法是看CPU的使用率。
例如,若CPU使用了99%的时间工作,用了1%时间等待I/O,那缓存命中率还是不错的。(REF: 7.12节论述了查询缓存,不要和这里的概念混了)

9.4固态存储

闪存最重要的两个特性:1、提升随机I/O;2、提高并发操作
写放大垃圾收集 对性能影响较大(尤其是空间快满了的时候)

9.4.2闪存技术

有两种闪存类型:

  1. 单层单元(SLC):每个单元存储一个比特(0或1)。SLC相对更昂贵,但非常快,并且擦写寿命高达100000个写周期(20年左右)缺点是存储密度相对较低
  2. 多层单元(MLC):每个单元存储2个比特(3个比特设置也正在进入市场中)。这使得存储密度提高了,但速度和耐擦写性能降低了。一个不错的MLC设备可能被定为10000个写循环周期(2年)

9.4.3闪存的基准测试

闪存的三阶段模式,我们称为A-B-C模式:

  1. A:开始阶段,通常运行比较快
  2. B:过度状态状态,此时垃圾回收开始工作
  3. C:稳定状态,此时最慢

作者的基准测试:

http://www.ssdperformanceblog.com   http://www.mysqlperformanceblog.com

9.4.4固态硬盘

SSD是否配置电容或者电池是我们必须关注的特性

9.4.5PCIe设备

没有什么能比得上PCIe设备上获得的性能。缺点是它们太贵了。

9.4.6什么时候应该使用闪存

  1. 一些事务或插入繁忙的工作负载
  2. 单线程负载是另一个闪存的潜在应用场景。MySQL复制是单线程工作的典型例子,它可以从低延迟中获得很多收益
  3. 闪存也可以为服务器整合提供巨大的帮助,尤其是PCIe方式的。我们已经看到了机会,把很多实例整合到一台物理服务器——有时高达10或15倍的整合都是有可能的(详见11章)

然而缓存也可能不一定是你要的答案。一个很好的例子是,像InnoDB日志文件这样的顺序写的工作负载,闪存不能提供多少性能优势,因为这种情形下,闪存连续写方面不比标准硬盘快多少。这样的工作负载也是高吞吐的,会耗尽缓存的寿命。在标准硬盘上存放日志文件通常是一个更好的主意,用具有电池保护的写缓存的RAID控制器。
有时答案在内存/磁盘的比例,而不只是磁盘。

9.4.7使用Flashcache

Flashcache创建了一个块设备,并且可以被分区,也可以像其他块设备一样创建文件系统,特点是这个块设置是由闪存和磁盘共同支撑的。闪存设备用作读取和写入的告诉缓存。

  • 尽管理论上Flashcache可能更高效,但最终性能并不如低层闪存那么好。
  • 从测试来看,尚不清楚对写负载有多大好处,但对读肯定有好处。于是它适合这样的情况:有大量的读I/O,并且工作集比内存大的多。
  • 除了实验,这里有个生产环境的实例经验:有个4T的数据库,这个数据库遇到了很大的复制延迟。我们给系统加了半个TB的Virident PCIe卡作为存储。然后安装了Flashcache,并且把PCIe作为绑定设备的闪存部分,复制速度就翻了一倍
Flashcache的IOPS思想实验
磁盘IPOS: 3,5" 15.000 rpm FC 150 IOPS(参考中列出的最好的一个)参考常见硬盘IOPS参考值 磁盘性能指标--IOPS 理论
假设闪存支持100000IPOS,未命中率为10%,则按磁盘150IPOS计算,则本Flashcache设备仅可以支持 150/10% = 1500IPOS,受制于磁盘!

9.4.9优化固态存储上的MySQL

InnoDB三大特性之 - 插入缓冲