SuperAPI AI 工具集

alibabacloud-history-lock-diagnose

部署与运维

查看项目

更新于 10-15 19:54

技能介绍

用途:诊断 PolarDB MySQL 与 RDS MySQL 实例的历史锁等待问题,定位根因、完整锁链与锁持有者。架构为 PolarDB/RDS MySQL + DAS(数据库自治服务)+ Aliyun CLI。支持锁类型:InnoDB 行锁(Record/Gap/Next-Key)、MDL 元数据锁、表锁、死锁、FLUSH 级联、AUTO-INC 锁。

安装与前置检查:需 Aliyun CLI >= 3.3.3,可用 aliyun version 验证;未安装或版本过低时运行 curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash 安装或更新。必须执行 aliyun configure set --auto-plugin-install true 启用插件自动安装,并执行 aliyun plugin update 更新已有插件。调用云 API 的每条 aliyun 命令都须带 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-history-lock-diagnose/{session-id}。运行时需 Python >= 3.7(仅标准库)。

认证与权限:禁止读取、回显或打印 AK/SK,禁止要求用户直接输入 AK/SK,仅用 aliyun configure list 检查凭证状态;无有效 profile 则停止。所需权限包括 hdm:GetDasSQLLogHotData、hdm:GetDeadLockHistory、hdm:GetDeadLockDetail、hdm:CreateLatestDeadLockAnalysis、hdm:DescribeSqlLogConfig、hdm:GetMySQLAllSessionAsync;权限失败时查阅 references/ram-policies.md 并用 ram-permission-diagnose 技能引导,等待授权。

参数确认:执行前必须与用户确认全部参数——InstanceId(RDS rm-xxx 或 PolarDB pc-xxx)、ProblemTime(如 2026-06-08 17:02:35.894)、ThreadID(被阻塞线程 ID)、BlockedSQL(被阻塞 SQL)。

核心流程:加载技能时生成一次 32 位小写十六进制 session ID 供整个会话使用。先做环境检查(aliyun version、aliyun configure list),再直接运行诊断脚本(不要读取 scripts/smart-lock-diagnosis.py,其 3700+ 行会浪费上下文):SKILL_SESSION_ID={session-id} python3 scripts/smart-lock-diagnosis.py --instance-id {InstanceId} --time "{ProblemTime}" --thread-id {ThreadID} --sql "{BlockedSQL}"。脚本内部完成 SQL 审计查询、锁类型检测、阻塞链分析、死锁诊断与报告生成,并检查 SQL Insight 配置、按智能时间范围查询审计记录、通过时间重叠分析识别锁持有线程。最后提取关键结论呈现:锁持有线程及其 SQL、阻塞链、锁类型、事务时间线(BEGIN → DML → 未提交)、基于实际 SQL 的建议;不要粘贴完整原始输出,时间戳须含毫秒,建议须严格基于观察到的 SQL。

限制:实例须启用 SQL Insight(SQL 审计);热数据保留取决于实例配置(查看 HotRetention 字段),超出保留窗口可能不可用;死锁分析可查询热数据窗口之外的历史记录。本技能不修改任何用户数据或实例配置,CreateLatestDeadLockAnalysis 会触发 DAS 服务端死锁解析(属写操作)但不改动数据库;无需清理。参考文件包括 ram-policies.md、related-commands.md、best-practices.md、acceptance-criteria.md、cli-installation-guide.md、transaction-lifecycle.md、verification-method.md。