Mysql基于ssd flashcache实践

32
MySQL+SSD Flashcache优化实践 天羽@

Transcript of Mysql基于ssd flashcache实践

Page 1: Mysql基于ssd flashcache实践

MySQL+SSD Flashcache优化实践

天羽@

Page 2: Mysql基于ssd flashcache实践

Who am I

天羽

[email protected]

@tb天羽SI

Oracle

Mysql

01:35 2

Page 3: Mysql基于ssd flashcache实践

议题

方案选型

性能调优

稳定测试

01:35 3

Page 4: Mysql基于ssd flashcache实践

方案选型-选型目标

数据量• 30亿

读写压力与分布

• TPS 500*16(峰值)

• QPS 7000*16 (峰值)

成本与余量• 150亿,5倍压力 tps 2500 qps 35000

01:35 4

Page 5: Mysql基于ssd flashcache实践

方案选型-选型目标

01:35 5

Page 6: Mysql基于ssd flashcache实践

方案选型-对比测试

Mysql tps --supersmack

01:35 6

Page 7: Mysql基于ssd flashcache实践

方案选型-ioDrive VS ssd

CPU —> 北桥 —> 南桥 —> SAS/RAID 控制器—> 背板—> 磁盘

01:35 7

Page 8: Mysql基于ssd flashcache实践

方案选型- ioDrive VS ssd

01:35 8

Page 9: Mysql基于ssd flashcache实践

Fusion IO

ioDrive 320G MLC

官方数据4PB 1W次

测试数据逻辑写134G/天,物理写809G/天,(4000*1024/8098)/356=14年

01:35 9

Page 10: Mysql基于ssd flashcache实践

方案选型- Flashcache介绍

01:35 10

Page 11: Mysql基于ssd flashcache实践

Flashcache介绍

元数据开销: 24byte in-memory(300G/4k,1.8G),16 byte on-flash

… … …

1 set = 512 blocks

01:35 11

Page 12: Mysql基于ssd flashcache实践

Flashcache测试

业务性能压测

风险评估• DB各种异常down机

• DDL、数据订正

• 数据库备份等维护操作

01:35 12

Page 13: Mysql基于ssd flashcache实践

业务压测-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

Page 14: Mysql基于ssd flashcache实践

业务压测-应用RT

• RT(1/4的热点数据) = 7ms

• RT(3/4的非热点数据) = 18ms

• RT(写Update)=7ms

• 线上压力4000 qps 1.2ms

01:35 14

Page 15: Mysql基于ssd flashcache实践

引入cache

01:35 15

Page 16: Mysql基于ssd flashcache实践

问题

预热

数据丢失

非业务操作干扰Cache效率

风险与管理

未知?

01:35 16

Page 17: Mysql基于ssd flashcache实践

Troubleshoot

预热cachehit测试,169G用8-13分钟左右,221MB/s

数据丢失验证各种down机后,持续监控cachehit%

备份/copy文件对cahce的影响白名单

增加风险点fio状态、温度、寿命、cachehit监控

01:35 17

Page 18: Mysql基于ssd flashcache实践

开机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

Page 19: Mysql基于ssd flashcache实践

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

Page 20: Mysql基于ssd flashcache实践

议题

• 方案选型

• 性能调优

• 稳定测试

01:35

20

Page 21: Mysql基于ssd flashcache实践

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

Page 22: Mysql基于ssd flashcache实践

OS优化

内存numa=off

FS mount参数noatime,nodiratime,barrier=0

IO调度器scheduler deadlinenr_requests 512 增大队列长度 default 128read_ahead_kb 16 减少预读default 128

01:35 22

Page 23: Mysql基于ssd flashcache实践

MYSQL优化

日志1、减少切换次数innodb_log_file_size=1300minnodb_log_files_in_group=3

2、独立硬盘redo log 240G/天

并发线程innodb_thread_concurrency

01:35 23

Page 24: Mysql基于ssd flashcache实践

MYSQL优化

IOinnodb_io_capacity

innodb_read_io_threads

innodb_write_io_threads

未定innodb_change_buffering=none

adaptive_flushing

ssd随机写,不需要顺序化的额外代价

01:35 24

Page 25: Mysql基于ssd flashcache实践

里程碑

日期 操作 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

Page 26: Mysql基于ssd flashcache实践

里程碑

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

Page 27: Mysql基于ssd flashcache实践

议题

• 方案选型

• 性能调优

• 稳定测试

01:35 27

Page 28: Mysql基于ssd flashcache实践

场景设计

Down硬件故障断网

Hangcpu/mem/io/db threads/日志空间满

Slow 异常sql/DDL/备份/清除binlog / threads running

APP/Cache异常

01:35 28

Page 29: Mysql基于ssd flashcache实践

稳定测试 连接数突然上升因为充分预热的原因,请求都在bufferpool,所以撑得住

Threads running

Threads running

01:35 29

Page 30: Mysql基于ssd flashcache实践

监控

• readhit 读命中

• writehit 写命中

• dirtywrhit 脏写命中

• cache_pct cache数据块占总空间比例

• dirty_pct dirty数据块占总空间比例

• lg_written 逻辑写

• phy_written 物理写

• fio_status Healthy(状态标志)

• reserves 预留空间百分比 10%预警

• Internal temperature 温度

01:35 30

Page 31: Mysql基于ssd flashcache实践

运维

OS crash或重启OS

1、检测fio是否attach,如果attach就flashcache_load2、准备flashcache参数3、挂载FS4、预热(目前没有自动做,默认是关闭的)5、启动mysqld,并加入flashcache白名单

手工运维脚本

01:35 31

Page 32: Mysql基于ssd flashcache实践

Q&A

• Do what you want,@北京&杭州

天羽 [email protected]

01:35 32

THANK YOU