腾讯云上MySQL实例使用gh-ost hang住问题

执行gh-ost,信息如下:

2018-06-21 21:43:26 INFO Listening on unix socket file: /tmp/gh-ost.hy_billing.hy_hyvertiser_daily_cost.sock
2018-06-21 21:43:26 INFO Migration min values: [2018-06-01,8]
2018-06-21 21:43:26 INFO Migration max values: [2018-06-21,999985668]
2018-06-21 21:43:26 INFO Waiting for first throttle metrics to be collected
2018-06-21 21:43:26 INFO First throttle metrics collected
# Migrating `hy_billing`.`hy_hyvertiser_daily_cost`; Ghost table is `hy_billing`.`_hy_hyvertiser_daily_cost_gho`
# Migrating 172.20.51.5:3306; inspecting 172.20.51.5:3306; executing on
# Migration started at Thu Jun 21 21:43:26 +0800 2018
# chunk-size: 400; max-lag-millis: 2000ms; dml-batch-size: 10; max-lohy: Threhys_connected=3000; critical-lohy: Threhys_connected=5000; nice-ratio: 0.000000
# throttle-hyditional-flag-file: /tmp/gh-ost.throttle
# panic-flag-file: /tmp/ghost.panic.flag
# Serving on unix socket: /tmp/gh-ost.hy_billing.hy_hyvertiser_daily_cost.sock
Copy: 0/3485150 0.0%; Applied: 0; Backlog: 34/1000; Time: 0s(total), 0s(copy); streamer: mysql-bin.017134:104412871; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 1640; Backlog: 947/1000; Time: 1s(total), 1s(copy); streamer: mysql-bin.017134:105206424; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 3000; Backlog: 1000/1000; Time: 2s(total), 2s(copy); streamer: mysql-bin.017134:105645974; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 4620; Backlog: 1000/1000; Time: 3s(total), 3s(copy); streamer: mysql-bin.017134:106148767; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 6330; Backlog: 1000/1000; Time: 4s(total), 4s(copy); streamer: mysql-bin.017134:106678437; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 8070; Backlog: 1000/1000; Time: 5s(total), 5s(copy); streamer: mysql-bin.017134:107219154; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 9870; Backlog: 1000/1000; Time: 6s(total), 6s(copy); streamer: mysql-bin.017134:107777731; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 11670; Backlog: 1000/1000; Time: 7s(total), 7s(copy); streamer: mysql-bin.017134:108335789; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 13470; Backlog: 1000/1000; Time: 8s(total), 8s(copy); streamer: mysql-bin.017134:108893997; State: migrating; ETA: N/A
Copy: 0/3485150 0.0%; Applied: 15290; Backlog: 1000/1000; Time: 9s(total), 9s(copy); streamer: mysql-bin.017134:109458007; State: migrating; ETA: N/A


gh-ost生成的后台临时表一直没有数据,gh-ost后台命令一直运行,表添加字段一直没有执行完成。


问题原因是:

1、主键是联合主键(id、gt_date)

2、mysql实例的tps比较高,>2000,而gh-ost的chunk-size=400,一直追不上,日志信息Backlog: 1000/1000可以证明此。


解决办法:

1、实例cpu负载不高,加大chunk-size=1000

扫描二维码关注公众号,回复: 1725455 查看本文章

2、dml-batch-size值从10改成100


PS:类似主键带有分区字段gt_date的,一般是大数据的实例,可以拉维护,直接原生ddl操作。


猜你喜欢

转载自blog.csdn.net/mchdba/article/details/80778252