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