Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[faq]在SSMS遇到Timeout expired或者Execution Timeout(逾時)怎麽辦?

2019-07-04 Thursday
[faq]在SSMS遇到Timeout expired或者Execution Timeout(逾時)怎麽辦?.jpg
圖片來源:https://pixabay.com/en/despair-alone-being-alone-archetype-513528/

SSMS (Sql Server Management Studio) 相信應該是需要使用MSSQL都會裝的管理工具。

有些時候要執行一些要跑比較久的SQL語法的時候,或者要修改有大筆資料的Table Schema的時候,都有可能會遇到Timeout Expired或者Execution Timeout這種錯誤訊息的時候應該要怎麽辦?

這篇就來看看遇到這種問題,如何延長整個SSMS執行可容許的時間。

SSMS 裡面的兩種執行時間

要解決這個問題,首先需要瞭解,在SSMS裡面其實有兩種Execution Timeout

執行SQL的Timeout

這種類型的Timeout主要是用SSMS執行某一段SQL語法花的時間太長的時候會觸發。

可能發生的情景有:當要join很多table然後做運算的時候可能會遇到,或者執行一段很花時間的store procedure也會。

修改table schema的Timeout

這種類型的Timeout主要是用SSMS透過UI界面修改Table Schema的時候花的時間太長的時候會觸發。

Ssms_2019-07-04_20-38-01.png
修改Table Schema的畫面

舉例來説,假設今天建立的Table想要把某個欄位變成Identity,並且需要保留資料,那麽原生的sql語法是不支援直接轉換,都需要透過一個中繼欄位儲存舊的資料然後在寫回去。

這種時候,透過SSMS的GUI界面會修改,在背後自動做這件事情,很方便。

但是,如果現有資料兩非常大,就會遇到這個錯誤。

這兩種執行都有可能因爲花的時間太久導致Timeout的錯誤。

要解決就要依照是做那個動作導致Timeout來調整。

要怎麽調整呢?我們繼續往下看。

第一種問題:解決執行SQL的Timeout問題

從Menu上面的 Tools -> Options

Ssms_2019-07-04_20-38-19.png
Tools -> Options

在左邊找到Query Execution,在右邊的Execution Time-out設定即可

Ssms_2019-07-04_20-39-28.png
設定Execution Time-out

畫面的説明0表示不會Timeout,但是我好像曾經遇到過0還是有Timeout,所以如果有遇到就把數字拉大就可以了。

第二種問題:修改Table Schema的Timeout

和第一種一樣,要先透過從Menu上面的 Tools -> Options

Ssms_2019-07-04_20-38-19.png
Tools -> Options

在左邊找到Designer,然後右邊有一個Transaction Timeout After的值。

Ssms_2019-07-04_21-02-46.png
設定Table Schema Timeout的地方

如果說想要直接用和第一種執行SQL的Timeout的時間一樣的話,就把checkbox打勾拿掉即可。

這邊曾經遇到過checkbox不勾,然後SQL的Timeout是設定0,但是還是遇到了執行Timeout的問題。

解決方法就是保留checkbox打勾,然後把輸入框的時間輸入一個很長的數值就可以。

結語

這篇介紹了SSMS的兩種執行方式對應的Timeout設定方式。

希望透過這篇大家都不會在遇到用SSMS管理DB遇到Timeout的問題。

當然,如果SQL執行下去非常久,雖然SSMS不會Timeout但是從App的體驗程度肯定不好,這個時候就需要做效能調教就是另外一個議題啦。

參考資料

SO上面有人問到這個問題
Changing the CommandTimeout in SQL Management studio
官方FAQ關於這個問題
Error message when you try to modify a large table by using SQL Server Management Studio: "Timeout expired"

如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
2019-07-04 Thursday
comments powered by Disqus