2017-02-11 63 views
0

我们目前有一个SQL服务器程序超时查询时遇到困难。 9次10查询将运行在5秒内,但有时,该过程可以继续运行超过2分钟,并在前端(.net MVC应用程序)导致超时...存储过程超时

他们一直在调查这一个多星期,检查工作,服务器性能和所有似乎都没问题..

DBA's已经缩小到一个特定的表,正在从不同的应用程序插入/更新轰炸。这与引起超时的复杂选择查询相结合(即时通知)导致超时。

对于如何解决这些超时问题,是否有任何建议? 即。

  • 复制表并查询新表?
  • 任何额外的调试,可以证明这实际上是问题?
  • 也许缓存数据在前端,如果超时,从缓存中调用数据?
+0

存储过程是否读取或写入数据? –

+0

@DanBracuk proc读取数据 – Simon

+0

将事务隔离级别设置为读取已提交不会造成任何影响,并且可能有所帮助。 https://msdn.microsoft.com/en-CA/library/ms173763.aspx –

回答

0

一张被更新轰炸的桌子是一张桌子被锁着的轰炸。是的,这可能会影响性能。

首先,复制表格并多次运行查询。性能问题还有其他可能性。

SQL Server中存储过程性能不稳定的一个原因是编译。存储过程中的代码在第一次执行时编译 - 生成的执行计划可能适用于某些输入,而不适用于其他输入。这很容易通过使用该选项每次重新编译查询来解决(尽管这会增加开销)。

然后,考虑一下查询。它是否需要最新的数据?如果不是,也许你可以每小时复制一次表格或每天复制一次表格。

如果需要最新的数据,您可能需要重新考虑架构。使用群集标识列进行插入的表总是插入到表的末尾。这不太可能干扰桌上的查询。

复制可能会或可能不会帮助解决问题。毕竟,完整复制将在复制副本上执行更新。轰炸两张牌桌并不能解决“轰炸”问题。

如果您的查询涉及大量历史数据,那么分区可能会有所帮助。只有最近的分区才会被“轰炸”,使其他分区对查询更加敏感。

0

数据库管理员已经把它缩小到一个特定的表,它正在从不同的应用程序中插入/更新的轰炸。这与引起超时的复杂选择查询相结合(即时通知)导致超时

我们曾经面对很多超时问题并用于获取大量升级..这是我们遵循的方法,以减少超时..

有些可能适用于你的情况,有些可能不会......但下面不会造成任何伤害

以下SQL Server设置更改:
1.远程登录超时:60
2.远程查询超时:0

而且如果您的Windows服务器被设置为使用动态RAM ,尝试将其更改为静态RAM ..

您可能还需要调整,一些窗口的服务器设置

TCP Offloading/Chimney & RSS…What is it and should I disable it?

按照上面的步骤,减少了99%我们的超时..

对于剩下的1%,我们处理各种情况下为那些参与查询
2表seperately

1.Update统计。尝试进一步微调查询

这有助于我们完全减少超时。