SQL Server存储过程调用到达时间排查及执行队列问题咨询
问题解答
1. 能否查明存储过程调用到达服务器的准确时间?
可以。DBA可通过以下方式精准追踪:
- 启用SQL Server的扩展事件(Extended Events),创建包含
sqlserver.module_start事件的会话,该事件会记录存储过程开始执行的精确时间,结合应用端发起调用的时间对比,就能明确延迟出现在服务器接收前还是之后。 - 使用SQL Server Profiler(注意:生产环境优先用扩展事件,Profiler对性能影响较大),追踪
RPC:Starting事件,该事件标记存储过程调用到达服务器并开始处理的时间点。 - 实时查询系统动态管理视图
sys.dm_exec_requests,其中的start_time字段会记录请求到达服务器的时间。
2. 服务器是否会将该存储过程排至执行队列末尾?
不会。SQL Server的请求调度基于任务队列与调度器关联机制,不会随意将某个存储过程排到队列末尾。请求调度优先级主要由以下因素决定:
- 会话的优先级设置(默认均为普通优先级,除非手动修改)
- 当前系统的资源负载情况,比如CPU、内存、锁资源的竞争状态
- 请求类型(比如是否为系统任务)
当前版本存储过程已无资源过度使用问题,排队延迟大概率并非服务器调度导致,更可能是应用端到服务器的网络延迟、应用端处理结果集的逻辑耗时,或是连接池、参数传递环节的问题。
3. 新旧版本耗时差异的补充排查方向
原版本因资源过度使用导致的1分钟耗时,与当前SSMS中0.25秒、应用端半分钟的差异,核心排查点应放在:
- 应用端与服务器之间的网络带宽、延迟,比如大结果集的传输耗时
- 应用端对结果集的处理逻辑,比如是否存在额外循环、数据转换、UI渲染操作
- 应用端调用存储过程时的参数是否与SSMS中一致,是否存在隐式转换导致执行计划异常
- 应用连接的配置,比如是否使用了不同的隔离级别,引发锁等待
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

