You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL数据库执行EF迁移中CREATE PROCEDURE时出现过量锁问题

问题分析与解答

为何已完成的EF迁移仍会触发CREATE PROCEDURE相关锁?

  • EF Core的自动迁移/自动检查机制是核心诱因:如果应用启动时配置了context.Database.Migrate(),每个实例启动都会检查数据库迁移状态——哪怕迁移已标记完成。这个检查过程中,EF会验证存储过程等对象的存在性,虽不会真的执行创建,但高负载下多实例同时触发检查,会积累大量元数据锁(比如SCH_M、SCH_S锁),和你看到的多类型锁对应。
  • 迁移脚本幂等性缺失:若迁移里的CREATE PROCEDURE未加IF NOT EXISTS判断,一旦之前的迁移因异常中断却被手动标记为完成(但存储过程实际未创建),应用或运维工具可能重复执行脚本,触发真实创建操作并产生锁。

导致存储过程重复创建的其他原因

  • CI/CD配置错误:部署流水线未绑定迁移版本,每次部署全量运行所有迁移脚本,而非仅执行未完成的迁移。
  • 代码中的手动触发逻辑:应用自定义初始化逻辑(比如请求级初始化、定时任务)中存在调用存储过程创建的代码,高负载下被重复执行。
  • 数据库对象异常:存储过程因权限问题被误删,或元数据损坏,EF迁移检查会判定对象不存在,尝试重新创建。

这是否是干扰信息?

不是干扰信息。这些锁是真实存在的资源占用,高负载下会加剧阻塞,甚至引发业务查询超时——哪怕没有真的执行CREATE PROCEDURE,元数据锁的积累也会拖慢数据库并发性能。


内容的提问来源于stack exchange,提问作者Andrew Velez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:33:24