SQL Server線程和纖程的配置與管理
以下的文章主要介紹的有SQL Server線程和SQL Server纖程的基本概念,同時也有對SQL Server數(shù)據(jù)庫對線程與纖程的正確管理,對SQL Server數(shù)據(jù)庫線程纖程的配置,以下就是文章的主要內容描述。
一、基本概念
(一)線程
SQL Server 使用操作系統(tǒng)的SQL Server線程來執(zhí)行并發(fā)任務。在不使用纖程的情況下,SQL Server將啟動線程,并由OS將線程分配給cpu,線程管理由OS內核控制,當一個線程完成退出CPU,其他線程調度占用該CPU時,將發(fā)生一個上下文切換,這個切換是在應用程序的用戶模式和線程管理的內核模式之間的切換,所以需要付出一定的代價,應當盡量避免這種切換
(二)纖程
為了減少上下文切換,引入纖程的概念,可以在SQL Server中啟用纖程,纖程是線程的子模塊,纖程由運行在用戶模式下的代碼管理,所以切換纖程比切換進程的代價少的多,因為纖程模式不需要在將用戶模式和內核模式中切換,而切換SQL Server線程則需要這種轉換。
(三)兩者的區(qū)別
SQL Server管理纖程的調度,而OS管理線程的調度;線程模式里 SQL Server為每個并發(fā)用戶創(chuàng)建配一個線程,而纖程模式中 SQL Server為每個CPU分配一個線程,并為每個并發(fā)用戶創(chuàng)建配一個纖程,一個線程中可以有多個纖程,纖程只在線程里切換,不用上下文切換
注意:SQL Server Personal Edition和 Desktop Edition不支持纖程模式;Win95,98不支持線程池
二、SQL Server對線程和纖程的管理
SQL Server既可以為用戶連接維護一個線程池,也可以維護一個纖程池(如果設置了纖程模式,則系統(tǒng)只維護纖程池,不在是線程池) 在連接池中,線程和纖程都看作工作纖程,并可以由max worker threads 選項來設置SQL Server可分配的線程或纖程的***數(shù)目,一般采用默認值255 。
當一個語句需要SQL Server執(zhí)行時:
(1)如果線程池里用空閑的線程,SQL Server將為該語句分配一個線程
(2)如果線程池中沒有可供使用的空閑線程并且沒有達到***工作線程數(shù)量,SQL Server將為該命令創(chuàng)建新的工作SQL Server線程
(3)如果到了***線程使用數(shù)量并且沒有空閑的線程,則進程必須等待其他處理完成后釋放一個線程
三、配置SQL Server線程纖程
(1)如何啟用纖程模式:
企業(yè)管理器->服務器屬性->處理器->使用windows nt 纖程 或者用 sp_configure 將lightweight pooling 設置為1
(2)max worker threads 選項
該選項配置SQL Server進程的可用工作線程數(shù) 默認值為 255
改變方法:
企業(yè)管理器->服務器屬性->處理器->***工作線程或者用 sp_configure修改max worker threads
(3)affinity mask 選項
該選項在系統(tǒng)負荷過重時可以提高對稱多處理器系統(tǒng)的性能,將SQL Server線程與特定的處理器相關聯(lián),并指定SQL Server使用的處理器
改變方法:
企業(yè)管理器->服務器屬性->處理器->處理器控制->選擇一或多個將親和力掩碼組合在一起的處理器或者用 sp_configure修改affinity mask
(4)max degree of parallelism 選項
該選項可以限制在并行計劃執(zhí)行中使用的處理器數(shù)量
改變方法:
企業(yè)管理器->服務器屬性->處理器->并行->選擇執(zhí)行并行查詢的處理器數(shù)量或者用 sp_configure修改max degree of parallelism。
【編輯推薦】
- 實現(xiàn)SQL Server索引的代碼示例
- SQL Server創(chuàng)建約束的代碼運用
- 創(chuàng)建SQL Server數(shù)據(jù)庫更是實在
- 修改SQL Server 2005 數(shù)據(jù)庫的執(zhí)行環(huán)境很簡單
- SQL Server 2000數(shù)據(jù)庫備份和還原的示例