数据库调用每分钟冻结5-6秒

时间:2015-12-12 22:02:54

标签: c# sql-server asp.net-web-api async-await connection-pooling

每60秒(尖锐)我在存储过程中的T-SQL SELECT语句中遇到延迟,我不知道为什么会发生这种情况。我怀疑是一个配置错误或SQL服务器错误,但我将此作为一个问题发布给社区,希望有人解决了这个谜。

我有一个名为uspLoadDocument的存储过程,用于在用户单击文档列表项时加载文档。通常情况下,该程序响应速度非常快,但每60秒钟它会“挂起”5-6秒(平均),然后才能正常继续(无例外)

关于这种延迟的事实;

  • 它只出现在我的两台开发机器上。它不会出现在生产中(Azure - SQL Server V12)
  • 它恰好每60秒发生一次,平均持续5-6秒
  • 没有启动任何交易(至少不在我控制的代码中)
  • 从SQL Server Management Studio调用SPROC时不会发生延迟

技术信息;

  • Visual Studio Enterprise 2015 24720 Update 1
  • Microsoft SQL Server 2014 - 12.0.4213.0(X64)(Express)
  • Dapper 1.42.0(未使用其他OR / Ms)
  • C#6.0和async / await模式从WebAPI控制器一直到数据层
  • 启用全文搜索,并在select语句中加入的一个表内的全文索引挂起存储过程

SQL事件探查器屏幕转储,显示存储过程内select-statement的典型延迟(持续时间较长)。左侧转储显示每60秒发生的异常。右侧显示正常执行。

SQL Profiler dumps. Delay on left side. Normal execution on right-side

我已经试着找出这些延迟的原因,差不多三个星期了,并且不知道它可能是什么。可以指出正确方向的线索非常受欢迎

可能的解决方案

在我的存储过程中,我有一个select-statement,可以从表值函数中进行选择。此函数未声明为WITH SCHEMABINDING。 将SCHEMABINDING添加到表值函数后,延迟消失了。在我不使用SCHEMABINDING时,查询优化器正在进行一些繁重的处理。

0 个答案:

没有答案