一基本概念
(一)線程
SQL Server 使用操作系統的線程來執行並發任務在不使用纖程的情況下SQL Server將啟動線程並由OS將線程分配給CPU線程管理由OS內核控制當一個線程完成退出CPU其他線程調度占用該CPU時將發生一個上下文切換這個切換是在應用程序的用戶模式和線程管理的內核模式之間的切換所以需要付出一定的代價應當盡量避免這種切換
(二)纖程
為了減少上下文切換引入纖程的概念可以在SQL Server中啟用纖程纖程是線程的子模塊纖程由運行在用戶模式下的代碼管理所以切換纖程比切換進程的代價少的多因為纖程模式不需要在將用戶模式和內核模式中切換而切換線程則需要這種轉換
(三)兩者的區別
SQL Server管理纖程的調度而OS管理線程的調度;線程模式裡 SQL Server為每個並發用戶創建配一個線程而纖程模式中 SQL Server為每個CPU分配一個線程並為每個並發用戶創建配一個纖程一個線程中可以有多個纖程纖程只在線程裡切換不用上下文切換
注意SQL Server Personal Edition和 Desktop Edition不支持纖程模式;Win不支持線程池
二SQL Server對線程和纖程的管理
SQL Server既可以為用戶連接維護一個線程池也可以維護一個纖程池(如果設置了纖程模式則系統只維護纖程池不在是線程池) 在連接池中線程和纖程都看作工作纖程並可以由max worker threads 選項來設置SQL Server可分配的線程或纖程的最大數目一般采用默認值
當一個語句需要SQL Server執行時
()如果線程池裡用空閒的線程SQL Server將為該語句分配一個線程
()如果線程池中沒有可供使用的空閒線程並且沒有達到最大工作線程數量SQL Server將為該命令創建新的工作線程
()如果到了最大線程使用數量並且沒有空閒的線程則進程必須等待其他處理完成後釋放一個線程
三配置SQL Server線程纖程
()如何啟用纖程模式
企業管理器>服務器屬性>處理器>使用Windows nt 纖程 或者用 sp_configure 將lightweight pooling 設置為
()max worker threads 選項
該選項配置SQL Server進程的可用工作線程數 默認值為
改變方法
企業管理器>服務器屬性>處理器>最大工作線程或者用 sp_configure修改max worker threads
()affinity mask 選項
該選項在系統負荷過重時可以提高對稱多處理器系統的性能將線程與特定的處理器相關聯並指定SQL Server使用的處理器
改變方法
企業管理器>服務器屬性>處理器>處理器控制>選擇一或多個將親和力掩碼組合在一起的處理器或者用 sp_configure修改affinity mask
()max degree of parallelism 選項
該選項可以限制在並行計劃執行中使用的處理器數量
改變方法
企業管理器>服務器屬性>處理器>並行>選擇執行並行查詢的處理器數量或者用 sp_configure修改max degree of parallelism
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22308.html