2010-12-06 55 views
1

我在asp.net 2.0上有一個很大的web應用程序。 Usere open object editor there and make some changes。他們不能一次打開同一個對象。睡眠等待命令塊其他事務

當他們按「保存」btn後,所有更改過程通過回發保存在服務器上。

我正在使用交易保存。在保存操作確定之前,有很多程序,檢查和其他工作要做。

using (SqlConnection con = .........) 
     { 
      SqlTransaction trans = null; 
      try 
      { 
       con.Open(); 
       trans=con.BeginTransaction(IsolationLevel.ReadUncommitted); 
       ........operations......... 
       trans.Commit(); 
      } 
      catch (Exception e) 
      { 
       try { if (trans != null) trans.Rollback(); } 
       catch { } 
       throw new MyException("SQL Exception: " + e.Message, e); 
      } 
      finally 
      { 
       if (con != null && con.State == ConnectionState.Open) con.Close(); 
      } 
     } 

對我來說這段代碼是相當安全的。

但期刊發生: 從這個web應用程序的一個進程保存在mssql上的操作變成了「正在休眠/等待」。 和其他用戶調用的其他進程被此進程鎖定並組織一個隊列。

其中一人扔超時除外.....但其他人正在等待。

所以,我的問題是:我的代碼有一些不好的操作,允許命令成爲睡眠/等待? 可能會有一些技巧?

+0

您明顯遺漏了縮短代碼示例的代碼,因此可能是因爲這樣,但我沒有看到反式代碼。Commit()在你的代碼中的任何地方調用? – jvanrhyn 2010-12-06 12:49:29

+0

因爲我有....... – cyssima 2010-12-06 12:56:51

回答

1

由於您在事務內部執行了大量的操作數據庫,因此數據庫鎖定可能會阻止您的應用程序。

您可以使用sp_who2存儲過程(詳細信息請參見here),通過檢查結果的BlkBy列來查看服務器上是否有任何塊。

您可能還需要檢查Sql Server locksdeadlocking

0

但主要的問題是,第一過程中不拋出超時異常以下鏈接。它正在睡覺,因爲我們不殺他。這是主要問題。

0

Можетлиэтобытьсвязаносрепликацией。 Вмоменткогданаблюдаютсяописанныевышетормозарепликацияначинаетсильнотормозить。 Ипишет: 該進程無法連接到Publisher'этабд'。 (來源:MSSQL_REPL,錯誤號:MSSQL_REPL20084) 得到的幫助:http://help/MSSQL_REPL20084

·TCP提供:連接嘗試失敗,因爲連接的方沒有正確一段時間後響應或已建立的連接失敗,因爲連接的主機沒有回覆。 (來源:MSSQLServer,錯誤號:10060) 獲取幫助: ·建立到服務器的連接時發生錯誤。連接到SQL Server 2005時,此故障可能是由於在默認設置下,SQL Server不允許遠程連接。 (來源:MSSQLServer,錯誤號:10060) 獲取幫助: ·登錄超時已過期(來源:MSSQLServer,錯誤號:0) 獲取幫助: ·合併進程無法執行查詢,因爲查詢超時。如果此故障仍然存在,請增加該過程的查詢超時時間。在進行故障排除時,使用詳細歷史記錄重新開始同步並指定要寫入的輸出文件。 (來源:MSSQLServer,錯誤號碼:0) 獲得幫助: 這個應用在可以保證您的郵件地址。因此無法執行此操作,請重新輸入。