講解SQL Server執行緒和纖程的管理和配置
(一)執行緒
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第1講:程序和執行緒執行緒
- Python執行緒、程式和協程詳解Python執行緒
- 程式、執行緒和協程的概念執行緒
- 程式,核心執行緒,使用者執行緒,協程,纖程......作業系統世界觀執行緒作業系統
- libgo原始碼分析之多執行緒協程管理和排程Go原始碼執行緒
- Java併發和多執行緒3:執行緒排程和有條件取消排程Java執行緒
- 使用Executors建立和管理執行緒執行緒
- java自帶執行緒池和佇列詳細講解Java執行緒佇列
- 執行緒和執行緒池執行緒
- Android的執行緒和執行緒池Android執行緒
- 多執行緒-程式和執行緒的概述執行緒
- 什麼是程式、執行緒和協程?執行緒
- Python之執行緒、程式和協程Python執行緒
- RxJava 和 RxAndroid 五(執行緒排程)RxJavaAndroid執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- 多執行緒-執行緒排程及獲取和設定執行緒優先順序執行緒
- swoole 當中協程的理解包括(程式、執行緒的講解)執行緒
- SQL Server 管理常用的SQL和T-SQLSQLServer
- 多執行緒實用講解執行緒
- 瞭解 Android 的程式和執行緒Android執行緒
- 多執行緒-執行緒組的概述和使用執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- 程式、執行緒、纖程之間的區別?執行緒
- 多執行緒和多執行緒同步執行緒
- Java:使用Executors建立和管理執行緒薦Java執行緒
- 程式和執行緒執行緒
- 執行緒和程式執行緒
- MySQL主執行緒、從I/O執行緒和從SQL執行緒的State列常見狀態介紹MySql執行緒
- Java 執行緒和 volatile 解釋Java執行緒
- 執行緒池建立執行緒的過程執行緒
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- C#並行,多執行緒程式設計並行集合和PLINQ的例項講解並行執行緒程式設計
- 多執行緒--執行緒管理執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Spring 非同步執行緒池、排程任務執行緒池配置Spring非同步執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- 執行緒安全和執行緒不安全理解執行緒
- 一個故事講完程式、執行緒和協程(作業系統基礎知識)執行緒作業系統