Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mysql基于ssd flashcache实践

3,255 views

Published on

Published in: Technology
  • Be the first to comment

Mysql基于ssd flashcache实践

  1. 1. MySQL+SSDFlashcache优化实践<br />天羽@<br />
  2. 2. Who am I<br />天羽 <br />tianyu@taobao.com<br />@tb天羽<br />SI<br />Oracle<br />Mysql<br />16:26<br />2<br />
  3. 3. 议题<br /><ul><li>方案选型
  4. 4. 性能调优
  5. 5. 稳定测试</li></ul>16:25<br />3<br />
  6. 6. 方案选型-选型目标<br /><ul><li>数据量</li></ul>30亿<br /><ul><li>读写压力与分布</li></ul>TPS 500*16(峰值)<br />QPS 7000*16 (峰值) <br /><ul><li>成本与余量</li></ul>150亿,5倍压力 tps 2500 qps 35000<br />15:46<br />4<br />
  7. 7. 方案选型-选型目标<br />15:46<br />5<br />
  8. 8. 方案选型-对比测试<br />Mysqltps --supersmack<br />15:46<br />6<br />
  9. 9. 方案选型-ioDrive VS ssd<br />CPU —> 北桥 —> 南桥 —> SAS/RAID 控制器 —> 背板 —> 磁盘<br />15:46<br />7<br />
  10. 10. 方案选型- ioDrive VS ssd<br />15:46<br />8<br />
  11. 11. Fusion IO<br />ioDrive 320G MLC <br /><ul><li>官方数据</li></ul>4PB 1W次<br /><ul><li>测试数据</li></ul>逻辑写134G/天,物理写809G/天,<br />(4000*1024/8098)/356=14年<br />15:46<br />9<br />
  12. 12. 方案选型- Flashcache介绍<br />15:46<br />10<br />
  13. 13. Flashcache介绍<br />元数据开销: 24byte in-memory(300G/4k,1.8G),16 byte on-flash<br />…<br />…<br />1 set = 512 blocks<br />…<br />15:46<br />11<br />
  14. 14. Flashcache测试<br /><ul><li>业务性能压测
  15. 15. 风险评估</li></ul>DB各种异常down机<br />DDL、数据订正<br />数据库备份等维护操作<br />15:45<br />12<br />
  16. 16. 业务压测-DB数据<br /><ul><li>%user 45% %iowait 8.20</li></ul>BPhit 99.3%flashcache hit 98.2%<br />/proc/flashcache_setutil 79441(2MB)个util99%<br />15:45<br />13<br />
  17. 17. 业务压测-应用RT<br />RT(1/4的热点数据) = 7ms<br />RT(3/4的非热点数据) = 18ms<br />RT(写Update)=7ms<br />线上压力4000 qps 1.2ms<br />15:45<br />14<br />
  18. 18. 引入cache<br />15:45<br />15<br />
  19. 19. 问题<br /><ul><li>预热
  20. 20. 数据丢失
  21. 21. 非业务操作干扰Cache效率
  22. 22. 风险与管理
  23. 23. 未知?</li></ul>15:45<br />16<br />
  24. 24. Troubleshoot<br /><ul><li>预热</li></ul>cachehit测试,169G用8-13分钟左右,221MB/s<br /><ul><li>数据丢失验证</li></ul>各种down机后,持续监控cachehit%<br /><ul><li>备份/copy文件对cahce的影响</li></ul>白名单<br /><ul><li>增加风险点</li></ul>fio状态、温度、寿命、cachehit监控<br />15:45<br />17<br />
  25. 25. 未知?<br /><ul><li>开机attach时间
  26. 26. Hang </li></ul>DDL hang、Dmsetup hang、copy hang<br />FIX:调整FLASHCACHE_COPY_PAGES and FLASHCACHE_ASYNC_SIZE<br />dosync.fast_remove=0再dmsetup remove会hang<br />FIX:Fast_remove=1,主动刷并限制力度,调整合并后写块上限<br />验证:dmsetup remove ,完全4K往SAS刷,不hang。每秒100M/S,100G需17分钟<br />15:45<br />18<br />
  27. 27. DDL测试<br /><ul><li>数据量</li></ul>单表130W 数据量,2GB<br /><ul><li>SAS写入</li></ul>加索引(83MB/S)>其他DML(5MB/S) > 平时2.5MB/S<br /><ul><li>DDL时间</li></ul>扩字段,减字段,重命名,改类型,删字段,1分钟07秒<br />加索引9s,删索引0.08s<br />第1个操作用5分钟,和很多tps抢锁,表load到内存<br />15:45<br />19<br />
  28. 28. 议题<br />15:45<br />方案选型<br />性能调优<br />稳定测试<br />20<br />
  29. 29. Flashcache配置<br />白名单<br />cache_all=0 <br />LRU<br />reclaim_policy=1<br />脏刷新率<br />dirty_thresh_pct=90<br />快速remove<br />fast_remove = 1<br />刷出力度<br />max_clean_ios_set=2<br />max_clean_ios_total=4<br />15:45<br />21<br />
  30. 30. OS优化<br /><ul><li>内存</li></ul>numa=off<br /><ul><li>FS mount参数</li></ul>noatime,nodiratime,barrier=0<br /><ul><li>IO调度器</li></ul>scheduler deadline<br />nr_requests 512 增大队列长度 default 128<br />read_ahead_kb 16 减少预读default 128<br />15:45<br />22<br />
  31. 31. MYSQL优化<br /><ul><li>日志</li></ul>1、减少切换次数<br />innodb_log_file_size=1300m<br />innodb_log_files_in_group=3<br />2、独立硬盘<br />redo log 240G/天<br /><ul><li>并发线程</li></ul>innodb_thread_concurrency<br />15:45<br />23<br />
  32. 32. MYSQL优化<br /><ul><li>IO</li></ul>innodb_io_capacity<br />innodb_read_io_threads<br />innodb_write_io_threads<br /><ul><li>未定</li></ul>innodb_change_buffering=none<br />adaptive_flushing<br />ssd随机写,不需要顺序化的额外代价<br />15:45<br />24<br />
  33. 33. 里程碑<br />15:45<br />25<br />
  34. 34. 里程碑<br />15:45<br />26<br />
  35. 35. 议题<br />方案选型<br />性能调优<br />稳定测试<br />15:45<br />27<br />
  36. 36. 场景设计<br /><ul><li>Down</li></ul>硬件故障<br />断网<br /><ul><li>Hang</li></ul>cpu/mem/io/db threads/日志空间满<br /><ul><li> Slow </li></ul>异常sql/DDL/备份/清除binlog / threads running<br /><ul><li>APP/Cache异常</li></ul>15:45<br />28<br />
  37. 37. 稳定测试<br /><ul><li>连接数突然上升</li></ul>因为充分预热的原因,请求都在bufferpool,所以撑得住<br /><ul><li>Threads running</li></ul>Threads running<br />15:38<br />29<br />
  38. 38. 监控<br />readhit读命中<br />writehit 写命中<br />dirtywrhit脏写命中<br />cache_pct cache数据块占总空间比例<br />dirty_pct dirty数据块占总空间比例<br />lg_written逻辑写<br />phy_written物理写<br />fio_status Healthy(状态标志)<br />reserves 预留空间百分比 10%预警<br />Internal temperature 温度<br />15:38<br />30<br />
  39. 39. 运维<br /><ul><li>OS crash或重启OS</li></ul>1、检测fio是否attach,如果attach就flashcache_load<br />2、准备flashcache参数 <br />3、挂载FS<br />4、预热(目前没有自动做,默认是关闭的) <br />5、启动mysqld,并加入flashcache白名单<br /><ul><li>手工运维脚本</li></ul>15:38<br />31<br />
  40. 40. Q&A<br />Do what you want,@北京&杭州<br />天羽 tianyu@taobao.com<br />15:40<br />32<br />THANK YOU <br />

×