DynamoDB TTL删除速度跟不上过期标记速度,如何提升删除速率?
DynamoDB TTL删除速率优化方案
一、TTL原生速率限制说明
DynamoDB的TTL是后台异步低优先级任务,本身设计逻辑决定了其速率存在天然上限:
- TTL删除操作不占用你配置的读写容量单元(RCU/WCU),但系统限制其删除速率最多不超过表预置写容量的10%;如果是按需计费模式,则不超过最近30分钟平均写入量的10%
- 待删除的过期条目数量越多,TTL调度的资源会略有提升,但不会突破上述10%的上限,这就是你观测到待删条目到一定量级后速率不再上涨的原因
二、提升清理速率的可行方案
1. 临时调整表写容量(快速提升TTL速率)
如果你的表是预置容量模式,可以临时上调写容量WCU的配置,TTL的删除速率会同步按10%的比例上涨,等积压的过期数据清理完成后再调回原有配置即可,不会产生过多额外成本。
2. 手动批量删除(最可控,适合紧急清理)
如果要在48小时内完成清理,建议用Python脚本配合DynamoDB的扫描+批量删除接口主动清理过期数据,比等待TTL效率高得多。
Python3实现参考:
需要用到boto3库,核心逻辑是扫描出过期条目,用batch_write_item批量删除,注意控制速率避免超出表的WCU限制:
import boto3 import time from datetime import datetime, timezone # 配置参数 TABLE_NAME = "你的表名" TTL_ATTRIBUTE = "你的TTL字段名" # 30天前的时间戳,早于该时间的条目都会被清理 EXPIRE_BEFORE = int(datetime.now(timezone.utc).timestamp()) - 30*86400 BATCH_SIZE = 25 # batch_write_item单次最多支持25条操作 SCAN_PAGE_SIZE = 100 dynamodb = boto3.resource("dynamodb") table = dynamodb.Table(TABLE_NAME) client = boto3.client("dynamodb") def delete_expired_items(): last_evaluated_key = None deleted_count = 0 while True: # 扫描过期条目 scan_kwargs = { "FilterExpression": f"{TTL_ATTRIBUTE} < :expire_val", "ExpressionAttributeValues": {":expire_val": EXPIRE_BEFORE}, "Limit": SCAN_PAGE_SIZE } if last_evaluated_key: scan_kwargs["ExclusiveStartKey"] = last_evaluated_key response = table.scan(**scan_kwargs) items = response.get("Items", []) if not items: break # 分批删除 for i in range(0, len(items), BATCH_SIZE): batch = items[i:i+BATCH_SIZE] delete_requests = [ # 替换为你表的实际主键字段 {"DeleteRequest": {"Key": {"pk": item["pk"], "sk": item["sk"]}}} for item in batch ] client.batch_write_item(RequestItems={TABLE_NAME: delete_requests}) deleted_count += len(batch) print(f"已删除{deleted_count}条过期数据") time.sleep(0.1) # 按需调整休眠时间,避免打满WCU影响业务 last_evaluated_key = response.get("LastEvaluatedKey") if not last_evaluated_key: break if __name__ == "__main__": delete_expired_items()
注意:运行前需要替换代码中的表名、TTL字段名、主键字段,根据你的表的WCU配置调整批量大小和休眠间隔。
3. 长期优化建议
如果后续持续有大量过期数据需要清理,可以将数据按时间分片存储,比如按天/周创建不同的表,过期后直接删除整表,效率远高于逐行删除,也不需要依赖TTL机制。
内容的提问来源于stack exchange,提问作者UnclePhil
相关产品推荐
相关产品推荐

