在并发 LIST 变换时,`ListObject.DoSerialize` 中出现 `InvalidOperationException` 导致检查点失败,然后永远无法完成(「检查点已在进行中」)
** 环境 ** - Garnet 2.1.5,64 位 - .NET 10.0.10,Win32NT,X64 - Windows 在 VMware ESXi 8.0 U2 上,4 个 vCPU,8 GB RAM - 通过 `Garnet.Worker.exe` 运行为 Windows 服务 ** 配置(非默认选项)** - `LogMemorySize`:`512m`,默认值 16M - `IndexMemorySize`:`1m` - `SegmentSize`:`64m` - `EnableStorageTier`:true - `LogDir`:`C:/Program Files/Garnet/data` - `CheckpointDir`:`C:/Program Files/Garnet/checkpoints` - `CompactionType`:`Lookup` - `CompactionMaxSegments`:4 - `EnableAOF`:true - `AofMemorySize`:`64m` - `AofSegmentSize`:`64m` - `AofSizeLimit`:`256m` - `AofSizeLimitEnforceFrequencySecs`:15 - `EnableRevivification`:true - `Recover`:true - `MaxDatabases`:1 ** 工作负载 ** 客户端不断地修改 Redis LIST 值。列表中分别包含 5000 个条目,并按条目更新,列表还会定期删除和重新创建,因此列表修改接近常数。应用程序没有发出 `BGSAVE` 或 `SAVE` 指令。检查点完全由 `AofSizeLimit` 触发,写入量大约每 7 分钟达到该限制。 ** 错误 ** 大多数检查点正常完成,大约每 7 分钟执行一次: - `09::31::57 info: StoreWrapper[0] Enforcing AOF size limit currentAofSize: 271122428 > AofSizeLimit: 268435456` - `09::31::57 info: StoreWrapper[0] Initiating checkpoint; full = False, type = Snapshot, dbId = 0` - `09::31::57 info: StoreWrapper[0] Completed checkpoint for DB ID: 0` - `09::38::57 info: StoreWrapper[0] Enforcing AOF size limit currentAofSize: 270419944 > AofSizeLimit: 268435456` - `09::38::57 info: StoreWrapper[0] Initiating checkpoint; full = False, type = Snapshot, dbId = 0` - `09::38::57 info: StoreWrapper[0] Completed checkpoint for DB ID: 0` - `09::45::57 info: StoreWrapper[0] Enforcing AOF size limit currentAofSize: 270976216 > AofSizeLimit: 268435456` - `09::45::57 info: StoreWrapper[0] Initiating checkpoint; full = False, type = Snapshot, dbId = 0` - `09::45::57 info: StoreWrapper[0] Completed
内容来源: microsoft/garnet