yumi-golang/migrations/060_task_center_archive_gc.sql
2026-07-18 18:56:15 +08:00

66 lines
4.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Task center archive GC metadata only. These tables are deliberately small and do not alter the
-- 35M-row outbox; the heavy Game King secondary index remains the independently scheduled DDL in 058.
CREATE TABLE IF NOT EXISTS `task_center_archive_manifest` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'manifest主键',
`object_type` varchar(32) NOT NULL COMMENT 'ARCHIVE或GC_RECOVERY',
`run_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'GC运行ID普通归档为空',
`cos_key` varchar(512) NOT NULL COMMENT 'COS对象Key',
`parent_cos_key` varchar(512) NOT NULL DEFAULT '' COMMENT '恢复包对应的原始归档Key',
`sha256` char(64) NOT NULL COMMENT '压缩对象SHA256',
`etag` varchar(128) NOT NULL DEFAULT '' COMMENT 'COS ETag',
`compressed_size` bigint NOT NULL COMMENT '压缩对象字节数',
`row_count` int NOT NULL COMMENT '对象JSONL行数',
`min_outbox_id` bigint DEFAULT NULL COMMENT '对象最小outbox ID旧对象无法完整推导时为空',
`max_outbox_id` bigint DEFAULT NULL COMMENT '对象最大outbox ID旧对象无法完整推导时为空',
`min_occurred_at` datetime(3) DEFAULT NULL COMMENT '对象最早业务时间',
`max_occurred_at` datetime(3) DEFAULT NULL COMMENT '对象最晚业务时间',
`verification_status` varchar(32) NOT NULL COMMENT 'VERIFIED或FAILED',
`verified_at` datetime(3) DEFAULT NULL COMMENT '最后一次完整回读校验时间',
`create_time` datetime(3) NOT NULL COMMENT '创建时间',
`update_time` datetime(3) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_center_archive_manifest_cos_key` (`cos_key`),
KEY `idx_task_center_archive_manifest_run` (`run_id`, `object_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务中心COS归档与GC恢复包校验清单';
-- id 固定为 1所有 API/consumer 实例锁定同一行取得数据库租约,避免多节点并发清理。
CREATE TABLE IF NOT EXISTS `task_center_archive_gc_run` (
`id` tinyint unsigned NOT NULL COMMENT '固定为1的全局控制行',
`run_id` varchar(64) NOT NULL DEFAULT '' COMMENT '本次固定cutoff运行ID',
`status` varchar(32) NOT NULL DEFAULT 'IDLE' COMMENT 'IDLE/DRY_RUN/RUNNING/PAUSED/COMPLETED/FAILED',
`cutoff_time` datetime(3) DEFAULT NULL COMMENT '预检时冻结的清理截止时间',
`batch_size` int NOT NULL DEFAULT '200' COMMENT '单tick删除上限代码限制200到500',
`scanned_rows` bigint NOT NULL DEFAULT '0',
`eligible_rows` bigint NOT NULL DEFAULT '0',
`protected_rows` bigint NOT NULL DEFAULT '0',
`deleted_rows` bigint NOT NULL DEFAULT '0',
`recovery_object_count` bigint NOT NULL DEFAULT '0',
`cursor_create_time` datetime(3) DEFAULT NULL COMMENT '最后成功删除行的create_time仅展示不用于跳过数据',
`cursor_id` bigint NOT NULL DEFAULT '0' COMMENT '最后成功删除行ID仅展示不用于跳过数据',
`lease_owner` varchar(160) NOT NULL DEFAULT '' COMMENT '当前tick实例',
`lease_until` datetime(3) DEFAULT NULL COMMENT '短租约到期时间',
`last_error` varchar(1000) NOT NULL DEFAULT '',
`create_time` datetime(3) NOT NULL,
`update_time` datetime(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务中心归档GC全局控制与租约';
INSERT INTO `task_center_archive_gc_run`
(`id`, `status`, `batch_size`, `create_time`, `update_time`)
VALUES
(1, 'IDLE', 200, NOW(3), NOW(3))
ON DUPLICATE KEY UPDATE `id` = VALUES(`id`);
-- 补数水位让服务重启后仍从已确认游标继续GC即使完成一批也不能依赖调用方内存判断历史是否补齐。
CREATE TABLE IF NOT EXISTS `yumi_game_king_backfill_state` (
`activity_id` bigint NOT NULL COMMENT '活动ID',
`last_outbox_id` bigint NOT NULL DEFAULT '0' COMMENT '最后确认的outbox ID',
`last_occurred_at` datetime(3) DEFAULT NULL COMMENT '与ID组成稳定复合游标',
`scanned_rows` bigint NOT NULL DEFAULT '0',
`accepted_rows` bigint NOT NULL DEFAULT '0',
`completed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '最近一次扫描是否到达当前末尾',
`create_time` datetime(3) NOT NULL,
`update_time` datetime(3) NOT NULL,
PRIMARY KEY (`activity_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Yumi游戏王持久化补数水位';