Flash、SSD下的MySQL性能优化

kaka4523

贡献于2012-08-23

字数:0 关键词: MySQL 数据库服务器 SQL

Flash/SSD for MySQL 刘斌 liubin01@baidu.com 背景 • 2007年百度尝试Flash, 2008年百度网页搜索全面使用Flash • 2008年MySQL尝试使用Flash, 计划2011年百度MySQL全面使用SSD • 谁使用MySQL? • 为什么使用MySQL? • 问题 – 性能 – 数据规模伸缩 – 功能特性 – 服务化 – 自动化 单节点 • 目标 – 响应时间 – 吞吐 – 解放大部分产品线 – 节约资源 – 分布式数据库需求 • 功能 – Snapshot – Optimized alter – 其他 • QPS – 读 / 写 • 响应时间 – 平均响应时间 – 长耗时 • 数据规模 单节点性能 • 随机读 – 存储引擎cache & 系统 cache • 随机写 (LRU / checkpoint ...) – buffered write – ordered write – 长耗时 • 绝大部分的请求响应时间在1ms以内 –IOPS是读操作和写操作的瓶颈! 单节点性能 • Vs 硬盘 (sas 10k) – QPS 提升 700% • Vs SSD (FTL Optimized) – QPS 提升 250% – 长耗时减少 95% • 可用空间增多 & 使用寿命增加 • 通用型优化,读为主应用及写为主应用均适合 • 百度 MySQL innodb patch: 代码3000行 • 对应用完全透明,使用方式和以前一样 我们的优化结果 • IO 设备 (硬盘 & SSD & 内存) – 顺序写、顺序读、随机写、随机读 – 响应时间 – 带宽 – 访问密度 – 价格 • Tape is dead, disk is tape, flash is disk, ram locality is king. » —— Jim Gray IO设备特性 SSD Vs 硬盘 16K随机读 16K随机写 16K顺序写 1M顺序写 1M顺序读 SSD 0.3ms 0.54ms 0.1ms 3.8ms 1.77ms 硬盘 5.9ms 1.08ms 0.15ms SSD 16K随机读比硬盘提升 1860% SSD 16K随机写比硬盘提升 100% SSD 16K顺序写比硬盘提升 50% SSD 16K顺序写比其随机写提升 440% SSD 1M顺序写比64次16K随机写提升 800% SSD 1M顺序写比64次16K顺序写提升 68% SSD 1M顺序写比1次16K顺序写提升 3700% 如何针对这些数据来设计系统 ? • SSD Vs 硬盘 – 100% 随机读, 5倍 ~ 8倍 – 混合读写效果不好, 1倍 ~ 3倍 • 长耗时 • QPS • 问题 – 读写冲突 – 随机写 SSD直接作为数据存储 • FTL – in-page logging – 其他 • 文件系统 – l2fs,btrfs, zfs ... – BFTL • Kernel – flashcache • 存储系统逻辑 – append write – random read – merge 优化手段 性价比 通用型 • IO 模型 – 随机写 – 随机读 • In-page logging – 20% log 空间 – 75% raid5 – 60% 使用率 FTL BFTL • SSD/硬盘作为SSD/硬盘的写cache • SSD作为硬盘的读cache – SSD作为innodb buffer pool的二级读cache • 远程memory作为innodb buffer pool的二级读cache • 不同IO模型分离 存储系统逻辑 写cache • IO 模型 – 顺序写 (提升800%) – 随机读 • Merge • Pages mapping – mem: ssd = 1 : 350 • Multi-Write – 提升68% • 写瓶颈 – iops -> 吞吐 • 读瓶颈 – iops -> iops 写cache & 读cache • IOPS Vs 吞吐量 • 读Cache Vs 写Cache • 性价比 • 预热 • 可维护性 • 数据完整性 & 一致性 • 透明 & 通用 • Nand flash Vs Nor flash – 100ns、写性能、价格、容量、直接寻址 • Snapshot (Redirect write) • Btree (log-based 38x?) / Btree patch compaction 远程 memory作为读cache • IO 模型 – 随机写 – 随机读 • 减少本地 I/O • MRU Vs LRU • 存储层面透明 本地IO比远程内存更快、更便宜、更稳定。 网络延迟方面的革命性产品尚未出现。 本地IO比远程memory更快、更稳定、性价比更高。 • Data file (-doublewrite buffer) • Index file • Rollback log (+MVCC) • Binlog • Access log • Read/Write cache file • Transaction log – case1 : 顺序写, 重响应时间, ssd > harddisk 50%提升 – case2 : buffered write, 重吞吐, ssd ~ harddisk 68% > case1 • 随机io -> 顺序io, 分离io • 不同的IO模型分离 不同的文件有不同的IO模型。 不同的IO模型适合于不同的IO设备。 •故障 – ECC – SLC – Raid / Rebuild – 架构 •SSD适合场景 – 存储系统逻辑很好地配合SSD特性 – 应用特性 • 读写比 • 访问模式 – IO设备自身能力提升 SSD 情况 总结 & 未来 • 总结 • 单节点 • 500G • IO 模型 • append write • random read • merge-dump (patch compaction) • 分布式数据库 • 未来 • 继续优化该版本(read cache, btree patch compaction ...) • 单节点的其他性能优化 & 特性增强 • 开源 Thanks! Q & A

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档