数据库集群过大,迁移备份慢,易产生慢查,且问题容易扩散,保持小而美是一个健康集群的重要标准。
本文主要讲述了作者在MySQL数据库集群瘦身的一次重要实践。
集群释放800+G,业务稳定运行两年无忧。
背景调查
调研基本情况,防止对上下游产生影响
- 集群架构:一主N从,下游大数据
- 业务场景:业务影响如何,重要程度如何
- 数据现状:数据量级、耗时评估
free_G | data_G | index_G | sum_G |
---|---|---|---|
127.1 | 750.5 | 391.6 | 1269.1 |
# 集群概况
SELECT TABLE_SCHEMA
, sum(ROUND(DATA_FREE / 1024 / 1024 / 1024, 1)) AS free_G
, sum(ROUND(DATA_LENGTH / 1024 / 1024 / 1024, 1)) AS data_G
, sum(ROUND(INDEX_LENGTH / 1024 / 1024 / 1024, 1)) AS index_G
, sum(ROUND((DATA_FREE + DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 1)) AS sum_G
FROM `information_schema`.tables
WHERE 1 = 1
AND TABLE_SCHEMA = 'my_db';
# 各表情况
SELECT TABLE_NAME, TABLE_COMMENT, TABLE_ROWS
, ROUND(DATA_FREE / 1024 / 1024 / 1024, 1) AS free_G
, ROUND(DATA_LENGTH / 1024 / 1024 / 1024, 1) AS data_G
, ROUND(INDEX_LENGTH / 1024 / 1024 / 1024, 1) AS index_G
, ROUND((DATA_FREE + DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 1) AS sum_G
FROM `information_schema`.tables
WHERE 1 = 1
AND TABLE_SCHEMA = 'my_db'
ORDER BY sum_G DESC;
制定目标
制定优化目标,锁定关键大表
-
分库分表
数据不能删,变瘦了,集群没变,业务迭代复杂了;
适合业务稳定期做。 -
业务拆分
按照业务模块,拆分不同的集群存储,同时可拆分对应的微服务。成本高,适合业务成长期做。 -
数据清理
删除过期无效的数据,成本较低,需要周期执行。