文章編號: 306457 - 上次校閱: 2008年5月13日 - 版次: 7.1

背景工作執行緒在等候 SQLAGENT 工作

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

如果排程的 SQLAgent 作業不會開始或完成時間,檢查上次執行狀態。如果工作狀態是 「 等待上工作者執行緒",檢查 SQLAgent 日誌中有下列的錯誤訊息:
[251] 步驟 %ld 作業 %s 等待 %s 子系統
預設情況下,SQLAgent 記錄 (Sqlagent.out 檔案) 位於 SQL Server 安裝] 的 [記錄] 資料夾中。

發生的原因

並行工作數達到該子系統 SQLAGENT max_worker_thread 的設定。

解決方案

重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
322756? (http://support.microsoft.com/kb/322756/ ) 如何備份和還原在 Windows 登錄
max_worker_thread 設定儲存在登錄中。如果您是 32 位元預設執行個體此設定儲存在下列機碼下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent\Subsystems
如果您 64 位元預設執行個體此設定儲存在下列機碼下:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\SQLServerAgent\Subsystems
如果您 32 位元的具名執行個體此設定儲存在下列機碼下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<YourInstanceName>\SQLServerAgent\Subsystems\LogReader
如果您 64 位元的具名執行個體此設定儲存在下列機碼下:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\<YourInstanceName>\SQLServerAgent\Subsystems\LogReader
附註Microsoft SQL Server 2005 會將 max_worker_thread 設定儲存在 msdb 系統資料庫而不是在登錄中 syssubsystems 資料表。syssubsystems 資料表可以更新以反映非預設 max_worker_thread 設定。

每個索引鍵非常最後一部分是值的用來指定該特定子系統 max_work_thread 設定數字。在下列範例 LogReader 子系統會具有最多 25 個:
LogReader:REG_SZ:C:\Mssql7\Binn\Sqlrepss.dll,C:\Mssql7\Binn\Logread.exe,ReplStart,ReplEvent,ReplStop,25
增加數允許在該特定子系統下更並行背景工作執行緒。

附註預設不會建立 Transact-SQL 子系統索引鍵。若要修改 Transact-SQL 子系統鍵,新增與資料型別 REG_SZ Transact-SQL 的值。在字串中加入如 40 或 100 數字。這個數字代表 Transact-SQL 子系統新的 max_worker_thread 設定。例如:
TSQL:REG_SZ:100

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

SQLAgent 有七個子系統。sp_enum_sqlagent_subsystems 系統預存程序顯示每個子系統目前的 max_worker_thread 設定。下表顯示預設設定:
摺疊此表格展開此表格
子系統描述Subsystem_dllAgent_exeStart_entry_pointEvent_entry_pointStop_entry_pointMax_worker_threads
ActiveScripting使用中指令碼子系統D:\Mssql7\Binn\Sqlatxss.dll空值ActiveScriptStartActiveScriptEventActiveScriptStop10
CmdExec命令列子系統D:\Mssql7\Binn\Sqlcmdss.dll空值CmdExecStartCmdEventCmdExecStop10
通訊群組複寫散發子系統D:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Distrib.exeReplStartreplEventReplStop100
LogReader複寫交易記錄讀取器子系統D:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Logread.exeReplStartreplEventReplStop25
合併列印複寫合併子系統D:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Replmerg.exeReplStartreplEventReplStop100
快照集複寫快照子系統D:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Snapshot.exeReplStartreplEventReplStop100
TSQLTransact-SQL 子系統[內部][內部][內部][內部][內部]20
並行工作子系統中執行的總數量之後達到 max_worker_thread 設定會啟動,因為其中一個正在執行的工作完成之前,已排入佇列子系統的額外工作。這可以是 LogReader 子系統的問題。預設情況下,LogReader 工作設定為持續執行。 如果多個 25 LogReader 工作會預設 LogReader 下啟動子系統設定,佇列的工作可能永遠不會有機會執行。

因為 Transact-SQL 子系統預設 20 達到最大數目並行 Transact-SQL 作業是快速如果數個 Transact-SQL 作業設定為執行。將 Transact-SQL 子系統值加入為包含值,如果您注意到 Transact-SQL 工作佇列基於此原因,是高於 20 項目的字串。

設計上的限制會造成工作之間的一個秒延遲。這項限制已設定,讓工作排程器並不 monopolize 裝載伺服器上的資源。因為這項限制的最多為 60 工作可以啟動相同的一分鐘間隔內。如果作業執行並在一分鐘之內完成與在同一時間根據一分鐘排程啟動,可能永遠不會執行某些工作。工作永遠不會執行,因為已經執行的工作 retriggered 每分鐘。其他工作也會保留在高溫情況。

重要此資訊適用於啟動新聞工作,並不會不加諸在相同的時間執行的工作上的限制。

我們建議您成小於 60 同時工作的批次分組工作並階段排程使 SQL Server 代理程式 」 來執行這些工作足夠頻寬。

這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbmt kbprb KB306457 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:306457? (http://support.microsoft.com/kb/306457/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。