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的時候花的時間太長的時候會觸發。
舉例來説,假設今天建立的Table想要把某個欄位變成Identity,並且需要保留資料,那麽原生的sql語法是不支援直接轉換,都需要透過一個中繼欄位儲存舊的資料然後在寫回去。
這種時候,透過SSMS的GUI界面會修改,在背後自動做這件事情,很方便。
但是,如果現有資料兩非常大,就會遇到這個錯誤。
這兩種執行都有可能因爲花的時間太久導致Timeout的錯誤。
要解決就要依照是做那個動作導致Timeout來調整。
要怎麽調整呢?我們繼續往下看。
第一種問題:解決執行SQL的Timeout問題
從Menu上面的 Tools -> Options
在左邊找到Query Execution,在右邊的Execution Time-out設定即可
第二種問題:修改Table Schema的Timeout
和第一種一樣,要先透過從Menu上面的 Tools -> Options
在左邊找到Designer,然後右邊有一個Transaction Timeout After的值。
如果說想要直接用和第一種執行SQL的Timeout的時間一樣的話,就把checkbox打勾拿掉即可。
這邊曾經遇到過checkbox不勾,然後SQL的Timeout是設定0,但是還是遇到了執行Timeout的問題。
解決方法就是保留checkbox打勾,然後把輸入框的時間輸入一個很長的數值就可以。
結語
這篇介紹了SSMS的兩種執行方式對應的Timeout設定方式。
希望透過這篇大家都不會在遇到用SSMS管理DB遇到Timeout的問題。
當然,如果SQL執行下去非常久,雖然SSMS不會Timeout但是從App的體驗程度肯定不好,這個時候就需要做效能調教就是另外一個議題啦。