SQL Server中的timeout設置


上篇文章中, 我們總結了SharePoint里的timeout相關的設置, 文章中我們說到SQL端的選項是不會有什么影響的. 為什么這么說呢?

筆者這一塊原來也是暈乎乎. 於是去咨詢SQL的資深高級技術支持工程師Peter, 得到了如下的答案.

1. 與SQL相關的timeout, 都是由Client端發起的.

比如說, 我們自己寫了個C#小程序, 其中使用了SqlCommand.CommandTimeout屬性, 指定它的值為20秒. 那么, 當這個query在SQL端執行了二十秒后, 我們的C#小程序會給SQL Server發送一個TDS Tension數據包, 告訴SQL Server我這邊超時了, 你那邊的query不用做了. 於是SQL相應client的請求, 斷掉connection. Client端報出一條exception, 說SQL Server端的運行時間太長, 超過了我們原定的時限.

 

2. 那么SQL Server Management Studio中有如下兩個有關Timeout的選項, 他們是干什么的呢?

  • a. Tools->Options->Query Exection->Execution time-out.

              image

  • b. Right click SQL Server Node->Properties->Connections->Remote Query Timeout.

              image

 

如果我們把Management Studio看作是我們自己寫的C#程序, 在這個程序中我們只寫下來要執行的語句, timeout設置呢? 這里的a選項指定的值就是SqlCommand.CommandTimeout. 好懂吧. ^_^

 

假設我們的C#小程序連接到SQL Server 1上運行存儲過程取數據, 在這個存儲過程中, SQL Server 1需要到SQL Server 2上去取原始數據. 那么, 如果SQL Server 2上的查詢執行了600秒之后(默認值), 那么SQL Server 1會發給SQL Server 2, 告訴它這個查詢我嫌它太久, 你不要做了. 於是SQL Server 1 發給SQL Server 2一個數據包, 告訴它停吧. 然后Server 2斷掉他們之間的Connection.

 

由此可見, 在一般情況下, b選項與我們關系不是很大.

 

我在研究這兩個選項的時候, 發現StackOverFlow.com上的網友問起相關的問題, 回答問題的人經常給出這兩個選項. 其實這是錯誤的. 調整了之后也不會對SQL端運行超時的問題有改善的.

 

感謝Peter Zhu提供的精彩講解, 我在這里才能分享給大家.

 

技術無止境, 這么小的一個選項后面竟然有這么多貓膩呀.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM