學習SQL Server 的任務排程
每個 Microsoft® SQL Server™ 2000 例項都是一個單獨的作業系統程式。每個例項都有可能必須處理來自使用者的成千上萬個併發請求。SQL Server 2000 例項使用 Microsoft Windows® 執行緒(有時是纖程)有效地管理這些併發任務。每個 SQL Server 2000 例項始終為系統程式執行多個執行緒:每個伺服器 Net-Library 的一個或多個執行緒,處理日誌請求的網路執行緒,和與服務控制管理器進行通訊的訊號執行緒。
每個 SQL Server 例項都有一個內部層,它實現類似於作業系統的環境,用於排程和同步併發任務,而無須呼叫 Windows 核心。這個內部層可以象處理執行緒那樣有效地排程纖程。每個 SQL Server 例項都為使用者連線維護一個執行緒池或纖程池。該池的最大大小由 max worker threads 伺服器配置選項控制。
伺服器配置 lightweight pooling 選項控制 SQL Server 2000 例項是使用執行緒還是纖程。預設情況下,lightweight pooling 的設定為 0,在該設定下 SQL Server 例項對每個併發使用者命令排程一個執行緒,直到到達 max worker threads 的值。如果 lightweight pooling 的設定為 1,那麼 SQL Server 使用纖程而不是執行緒。這稱為以纖程模式執行。在纖程模式下,SQL Server 例項為每個 CPU 分配一個執行緒,然後為每個併發使用者命令分配一個纖程,最大可以達到 max worker threads 的值。SQL Server 例項在使用執行緒或纖程時使用相同的演算法排程和同步任務。SQL Server 2000 個人版和 SQL Server 2000 Desktop Engine 不支援纖程。
SQL 批處理是一組一個或多個 Transact-SQL 語句,由客戶端傳送到 SQL Server 例項作為一個單元執行。SQL Server 例項從客戶端收到批處理時,將每個批處理與工作池中的可用執行緒或纖程相關聯。如果沒有可用執行緒或纖程且未達到 max worker threads 的值,SQL Server 例項將給新批處理分配新執行緒或纖程。如果沒有可用執行緒或纖程但已達到 max worker threads 的值,例項將一直阻塞新批處理直到有執行緒可用。執行緒或纖程與批處理相關聯後將一直保持關聯狀態,直到批處理生成的結果集已全部返回給客戶端。這時,執行緒或纖程被釋放,可以排程到下一個可用批處理。
雖然執行緒和纖程在使用資源方面無足輕重,但它們仍要消耗資源。在有成百上千個使用者連線的系統中,給每個連線分配一個執行緒或纖程所消耗的資源足以降低 SQL Server 的效率。而且沒必要給每個使用者連線分配一個執行緒或纖程,因為大多數連線實際上都花大量時間等待從客戶端接收批處理。SQL Server 例項的工作執行緒池的大小隻需滿足同時在此例項內活動地執行批處理的使用者連線數。保留 max worker threads 的預設值 255 可使 SQL Server 例項有效地將使用者連線對映到許多執行緒或纖程上,這樣不會消耗太多資源。
每個 SQL Server 例項都有一個內部層,它實現類似於作業系統的環境,用於排程和同步併發任務,而無須呼叫 Windows 核心。這個內部層可以象處理執行緒那樣有效地排程纖程。每個 SQL Server 例項都為使用者連線維護一個執行緒池或纖程池。該池的最大大小由 max worker threads 伺服器配置選項控制。
伺服器配置 lightweight pooling 選項控制 SQL Server 2000 例項是使用執行緒還是纖程。預設情況下,lightweight pooling 的設定為 0,在該設定下 SQL Server 例項對每個併發使用者命令排程一個執行緒,直到到達 max worker threads 的值。如果 lightweight pooling 的設定為 1,那麼 SQL Server 使用纖程而不是執行緒。這稱為以纖程模式執行。在纖程模式下,SQL Server 例項為每個 CPU 分配一個執行緒,然後為每個併發使用者命令分配一個纖程,最大可以達到 max worker threads 的值。SQL Server 例項在使用執行緒或纖程時使用相同的演算法排程和同步任務。SQL Server 2000 個人版和 SQL Server 2000 Desktop Engine 不支援纖程。
SQL 批處理是一組一個或多個 Transact-SQL 語句,由客戶端傳送到 SQL Server 例項作為一個單元執行。SQL Server 例項從客戶端收到批處理時,將每個批處理與工作池中的可用執行緒或纖程相關聯。如果沒有可用執行緒或纖程且未達到 max worker threads 的值,SQL Server 例項將給新批處理分配新執行緒或纖程。如果沒有可用執行緒或纖程但已達到 max worker threads 的值,例項將一直阻塞新批處理直到有執行緒可用。執行緒或纖程與批處理相關聯後將一直保持關聯狀態,直到批處理生成的結果集已全部返回給客戶端。這時,執行緒或纖程被釋放,可以排程到下一個可用批處理。
雖然執行緒和纖程在使用資源方面無足輕重,但它們仍要消耗資源。在有成百上千個使用者連線的系統中,給每個連線分配一個執行緒或纖程所消耗的資源足以降低 SQL Server 的效率。而且沒必要給每個使用者連線分配一個執行緒或纖程,因為大多數連線實際上都花大量時間等待從客戶端接收批處理。SQL Server 例項的工作執行緒池的大小隻需滿足同時在此例項內活動地執行批處理的使用者連線數。保留 max worker threads 的預設值 255 可使 SQL Server 例項有效地將使用者連線對映到許多執行緒或纖程上,這樣不會消耗太多資源。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-545147/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server最佳化必備之任務排程SQLServer
- 任務排程
- SQL SERVER 學習過程(一)SQLServer
- Airflow 任務排程AI
- Laravel 任務排程Laravel
- 聊聊PowerJob的任務排程
- 分散式任務排程分散式
- Spring 指南(排程任務)Spring
- Spark中資源排程和任務排程Spark
- Timer和TimerTask 任務排程
- Linux 定時任務排程Linux
- 分散式排程任務-ElasticJob分散式AST
- LeetCode 621 任務排程器LeetCode
- Spring排程定時任務的方式Spring
- Android 中的定時任務排程Android
- 任務排程的思考和總結
- laravel框架任務排程(定時執行任務)Laravel框架
- Python任務排程模組APSchedulerPython
- LTS分散式任務排程部署分散式
- 任務排程的並行演算法並行演算法
- 『學了就忘』Linux系統定時任務 — 89、任務排程工具anacronLinux
- LiteOS-任務篇-原始碼分析-任務排程函式原始碼函式
- 力扣-621. 任務排程器力扣
- Flink - Task 任務排程執行流程
- 力扣 621. 任務排程器力扣
- 任務排程框架Quartz快速入門!框架quartz
- 621. 任務排程器 (構造)
- 基於Redis的任務排程設計方案Redis
- 詳解BI系統中的任務排程
- 基於Hyperf開發的任務排程系統.支援任務投遞,DAG任務編排(多個任務使用同一個事務).
- Linux 中 Laravel 任務排程不執行LinuxLaravel
- 真香!SpringBoot官方支援任務排程框架了!Spring Boot框架
- Aloha:一個分散式任務排程框架分散式框架
- 中介軟體---分散式任務排程---Celery分散式
- 使用Java實現定時任務排程Java
- xxl-job,任務排程中心快速上手
- 比特幣原始碼分析:任務排程器的使用比特幣原始碼
- 面試應該知道的任務排程平臺面試
- 基於Azkaban的任務定時排程實踐