大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以 MySQL 为例,1 个运行很久的 TB 级 MySQL 实例中,极有可能数百 GB 的数据,对业务来说是”过期数据”可直接归档后清理。如果不能发现和及时清理,这部分“过期数据”对生产数据库备份资源消耗,占用工作集数据内存 (过期数据行可能分散 InnoDB 的 page 中),影响数据还原的 RTO 等。从成本和运维的角度看,代价都是很大的。针对 MySQL 这类”过期数据”问题,通过 MySQL 巡检系统发现问题,使用 MySQL 归档系统备份和删除数据等。
Redis 死键的定义
本文简单聊下 Redis ”死键”的问题,从业务角度对”死键”的 2 个定义:
- 设置有生存时间 Time to live:TTL 的键,已经过期”死亡”,但因 Redis 主动清理不及时,导致这类键堆积.(这里可能不清晰,后文会详解)
- 未设置有 TTL 键,使用这批键的程序功能已下线,导致这类键在集群中堆积,无人管理;有的键长达 6 个月访问过一次。