日前網站在忙碌時發生了下面這個錯誤
32位元系統 : max_workers_count = 256 + ((cpu_count – 4) * 8)
64位元系統 : max_workers_count = 512 + ((cpu_count – 4) * 16)
如果cpu數小於4,那max worker threads分別會依系統位元數設於256/516,若是SQL 2000,max worker threads則會固定設在255。
你可以用下面的指令去看目前設定的相關資訊
要解決這問題,有兩個方式,一個是去調高max worker threads,一個是去縮減SQL連線。
先說第一個方式。
直接去改max_workers_count,你可以在SSMS裡面的介面改,在server上右鍵->內容->處理器內。
或是用sql command去修改
按照MSDN的說法,32位元的系統建議最高設到1024,64bit的MSDN沒說,不過我想應該是2048。
一開始是先用第一個作法,將max worker threads設成1024。
但是不幸的,還是爆掉了,所以又想了別的方法,就是降低連線數。
方法很簡單,就是去開啟Multiple Active Result Sets(MARS),只要在connecting string內加入 MultipleActiveResultSets=True; 字串就好。
大概就長這樣
試了之後,成效果真不錯,尖峰時間連線數大減,可賀可喜。
題外話,如果MARS你已經設了,但是連線數還是太多的話,這就是要加server的時候了。
參考資料 :
max worker threads 選項
Enabling Multiple Active Result Sets (MARS)
The query processor could not start the necessary thread resources for parallel query execution.會出現這問題,是因為MSSQL server 的 worker threads 不夠用了,一般來說worker threads預設為0,讓SQL依作業系統與核心去設定worker threads,其算法如下。
32位元系統 : max_workers_count = 256 + ((cpu_count – 4) * 8)
64位元系統 : max_workers_count = 512 + ((cpu_count – 4) * 16)
如果cpu數小於4,那max worker threads分別會依系統位元數設於256/516,若是SQL 2000,max worker threads則會固定設在255。
你可以用下面的指令去看目前設定的相關資訊
select COUNT(1) from sys.dm_os_threads select max_workers_count,cpu_count From sys.dm_os_sys_info
要解決這問題,有兩個方式,一個是去調高max worker threads,一個是去縮減SQL連線。
先說第一個方式。
直接去改max_workers_count,你可以在SSMS裡面的介面改,在server上右鍵->內容->處理器內。
或是用sql command去修改
USE master; GO EXEC sp_configure 'show advanced option', '1'; RECONFIGURE; EXEC sp_configure 'max worker threads', '1024'; --set what you want EXEC sp_configure 'show advanced option', '0'; RECONFIGURE;
按照MSDN的說法,32位元的系統建議最高設到1024,64bit的MSDN沒說,不過我想應該是2048。
一開始是先用第一個作法,將max worker threads設成1024。
但是不幸的,還是爆掉了,所以又想了別的方法,就是降低連線數。
方法很簡單,就是去開啟Multiple Active Result Sets(MARS),只要在connecting string內加入 MultipleActiveResultSets=True; 字串就好。
大概就長這樣
string connectionString = "Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=SSPI;MultipleActiveResultSets=True";
試了之後,成效果真不錯,尖峰時間連線數大減,可賀可喜。
題外話,如果MARS你已經設了,但是連線數還是太多的話,這就是要加server的時候了。
參考資料 :
max worker threads 選項
Enabling Multiple Active Result Sets (MARS)
No comments:
Post a Comment