2014-10-01 82 views
0

我有一个SQL作业,它处理一系列请求。它更新Table1。这是一个漫长的过程,需要15分钟。SQL锁定 - 超时问题

与此同时,我的应用程序尝试从Table1中读取记录并将它们显示在网格中。相应的get proc已将tran隔离级别设为read uncommited。 当SQL作业正在运行时,我的应用程序在填充网格时总是超时。如果SQL作业未运行,则可以正常工作。

我的过程有适当的隔离级别,所以我不明白它为什么仍然超时。 想法?

这里是我的GET PROC看起来像:

CREATE PROCEDURE dbo.MyGetProc(...) 

AS BEGIN SET事务隔离级别读取未提交; SET NOCOUNT ON;

SELECT 
    ... 
FROM 
    (
     SELECT 
      ... 
     FROM 
      dbo.Table1 
      LEFT JOIN dbo.OtherTable1 
     WHERE ... 
     GROUP BY 
     ... 
    ) X 
    INNER JOIN dbo.OtherTable2 
    LEFT JOIN dbo.OtherTable3 
    LEFT JOIN dbo.OtherTable4 
    LEFT JOIN dbo.OtherTable5 
    LEFT JOIN dbo.OtherTable6 
    LEFT JOIN dbo.OtherTable6 
ORDER BY 
    ... 

END

+1

你能发布一段代码超时吗?这样你会得到更强的答案。 – 2014-10-01 15:36:20

+0

我在原始线程中添加了proc代码片段 – GreenBinary 2014-10-01 15:46:31

回答

1

使用

SELECT * FROM表1与(NOLOCK)

读取COMMITED数据。

+0

我尝试使用WITH(NOLOCK)&SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;同时和分开。但仍然是同样的问题。 – GreenBinary 2014-10-01 15:59:41