SQL Server數(shù)據(jù)庫的線程和纖程的概念與管理
此文章主要向大家介紹的是SQL Server數(shù)據(jù)庫的線程和纖程,其中主要包括SQL Server數(shù)據(jù)庫的線程和纖程的基本概念,SQL Server數(shù)據(jù)庫如何正確的對(duì)線程和纖程的管理進(jìn)行管理等相關(guān)內(nèi)容的介紹。
一、基本概念
(一)線程
SQL Server 數(shù)據(jù)庫使用操作系統(tǒng)的線程來執(zhí)行并發(fā)任務(wù)。在不使用纖程的情況下,SQL Server將啟動(dòng)線程,并由OS將線程分配給cpu,線程管理由OS內(nèi)核控制,當(dāng)一個(gè)線程完成退出CPU,其他線程調(diào)度占用該CPU時(shí),將發(fā)生一個(gè)上下文切換,這個(gè)切換是在應(yīng)用程序的用戶模式和線程管理的內(nèi)核模式之間的切換,所以需要付出一定的代價(jià),應(yīng)當(dāng)盡量避免這種切換
(二)纖程
為了減少上下文切換,引入纖程的概念,可以在SQL Server中啟用纖程,纖程是線程的子模塊,纖程由運(yùn)行在用戶模式下的代碼管理,所以切換纖程比切換進(jìn)程的代價(jià)少的多,因?yàn)槔w程模式不需要在將用戶模式和內(nèi)核模式中切換,而切換線程則需要這種轉(zhuǎn)換。
(三)兩者的區(qū)別
SQL Server管理纖程的調(diào)度,而OS管理線程的調(diào)度;線程模式里 SQL Server為每個(gè)并發(fā)用戶創(chuàng)建配一個(gè)線程,而纖程模式中 SQL Server為每個(gè)CPU分配一個(gè)線程,并為每個(gè)并發(fā)用戶創(chuàng)建配一個(gè)纖程,一個(gè)線程中可以有多個(gè)纖程,纖程只在線程里切換,不用上下文切換
注意:SQL Server Personal Edition和 Desktop Edition不支持纖程模式;Win95,98不支持線程池
二、SQL Server數(shù)據(jù)庫對(duì)線程和纖程的管理
SQL Server既可以為用戶連接維護(hù)一個(gè)線程池,也可以維護(hù)一個(gè)纖程池(如果設(shè)置了纖程模式,則系統(tǒng)只維護(hù)纖程池,不在是線程池) 在連接池中,線程和纖程都看作工作纖程,并可以由max worker threads 選項(xiàng)來設(shè)置SQL Server可分配的線程或纖程的最大數(shù)目,一般采用默認(rèn)值255 。
當(dāng)一個(gè)語句需要SQL Server執(zhí)行時(shí):
(1)如果線程池里用空閑的線程,SQL Server將為該語句分配一個(gè)線程
(2)如果線程池中沒有可供使用的空閑線程并且沒有達(dá)到最大工作線程數(shù)量,SQL Server將為該命令創(chuàng)建新的工作線程
(3)如果到了最大線程使用數(shù)量并且沒有空閑的線程,則進(jìn)程必須等待其他處理完成后釋放一個(gè)線程
三、配置SQL Server線程纖程
(1)如何啟用纖程模式:
企業(yè)管理器->服務(wù)器屬性->處理器->使用windows nt 纖程 或者用 sp_configure 將lightweight pooling 設(shè)置為1
(2)max worker threads 選項(xiàng)
該選項(xiàng)配置SQL Server數(shù)據(jù)庫進(jìn)程的可用工作線程數(shù) 默認(rèn)值為 255
改變方法:
企業(yè)管理器->服務(wù)器屬性->處理器->最大工作線程或者用 sp_configure修改max worker threads
(3)affinity mask 選項(xiàng)
該選項(xiàng)在系統(tǒng)負(fù)荷過重時(shí)可以提高對(duì)稱多處理器系統(tǒng)的性能,將線程與特定的處理器相關(guān)聯(lián),并指定SQL Server數(shù)據(jù)庫使用的處理器
改變方法:
企業(yè)管理器->服務(wù)器屬性->處理器->處理器控制->選擇一或多個(gè)將親和力掩碼組合在一起的處理器或者用 sp_configure修改affinity mask
(4)max degree of parallelism 選項(xiàng)
該選項(xiàng)可以限制在并行計(jì)劃執(zhí)行中使用的處理器數(shù)量
改變方法:
企業(yè)管理器->服務(wù)器屬性->處理器->并行->選擇執(zhí)行并行查詢的處理器數(shù)量或者用 sp_configure修改max degree of parallelism。
【編輯推薦】
- 用SQL Server數(shù)據(jù)庫鎖來定時(shí)間的長(zhǎng)短方法
- 淺談SQL Server鎖粒
- SQL Server數(shù)據(jù)庫鎖的引入的緣由
- 正確解決SQL Server警報(bào)問題
- SQL Server數(shù)據(jù)庫的分布式數(shù)據(jù)庫系統(tǒng)的終極目標(biāo)