講解SQL Server執行緒和纖程的管理和配置

iSQlServer發表於2009-03-16
一、基本概念

(一)執行緒

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不支援纖程模式;Win95,98不支援執行緒池

二、SQL Server對執行緒和纖程的管理

SQL Server既可以為使用者連線維護一個執行緒池,也可以維護一個纖程池(如果設定了纖程模式,則系統只維護纖程池,不在是執行緒池) 在連線池中,執行緒和纖程都看作工作纖程,並可以由max worker threads 選項來設定SQL Server可分配的執行緒或纖程的最大數目,一般採用預設值255 。

當一個語句需要SQL Server執行時:

(1)如果執行緒池裡用空閒的執行緒,SQL Server將為該語句分配一個執行緒

(2)如果執行緒池中沒有可供使用的空閒執行緒並且沒有達到最大工作執行緒數量,SQL Server將為該命令建立新的工作執行緒

(3)如果到了最大執行緒使用數量並且沒有空閒的執行緒,則程式必須等待其他處理完成後釋放一個執行緒

三、配置SQL Server執行緒纖程

(1)如何啟用纖程模式:

企業管理器->伺服器屬性->處理器->使用windows nt 纖程 或者用 sp_configure 將lightweight pooling 設定為1

(2)max worker threads 選項

該選項配置SQL Server程式的可用工作執行緒數 預設值為 255

改變方法:

企業管理器->伺服器屬性->處理器->最大工作執行緒或者用 sp_configure修改max worker threads

(3)affinity mask 選項

該選項在系統負荷過重時可以提高對稱多處理器系統的效能,將執行緒與特定的處理器相關聯,並指定SQL Server使用的處理器

改變方法:

企業管理器->伺服器屬性->處理器->處理器控制->選擇一或多個將親和力掩碼組合在一起的處理器或者用 sp_configure修改affinity mask

(4)max degree of parallelism 選項

該選項可以限制在並行計劃執行中使用的處理器數量

改變方法:

企業管理器->伺服器屬性->處理器->並行->選擇執行並行查詢的處理器數量或者用 sp_configure修改max degree of parallelism。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-567500/,如需轉載,請註明出處,否則將追究法律責任。

相關文章