Artigo: 306457 - Última revisão: terça-feira, 13 de Maio de 2008 - Revisão: 7.1

Tarefa SQLAGENT à espera de thread de trabalho

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

Se uma tarefa agendada do SQLAgent não iniciar ou concluir no tempo, verifique o último estado de execução. Se o estado da tarefa for "Em espera no trabalho thread", verifique o registo SQLAgent para a seguinte mensagem de erro:
[251] Passo % ld de trabalho %s está a ser em fila para o subsistema de %s
Por predefinição, o registo SQLAgent (ficheiro sqlagent.out) está localizado na pasta registo de instalação do SQL Server.

Causa

O número de tarefas em simultâneo atingiu a definição max_worker_thread para esse subsistema de SQLAGENT.

Resolução

importante Esta secção, método ou tarefa contém passos que indicam como modificar o registo. No entanto, poderão ocorrer problemas graves se modificar o registo de forma incorrecta. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Criar uma para protecção adicional, cópia de segurança do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para obter mais informações sobre como efectuar uma cópia de segurança e restaurar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
322756  (http://support.microsoft.com/kb/322756/ ) Como efectuar uma cópia de segurança e restaurar o registo no Windows
A definição max_worker_thread é armazenada no registo. Se tiver uma instância predefinida de 32 bits, esta definição é armazenada na seguinte chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent\Subsystems
Se tiver uma instância predefinida de 64 bits, esta definição é armazenada na seguinte chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\SQLServerAgent\Subsystems
Se tiver uma instância nomeada de 32 bits, esta definição é armazenada na seguinte chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<YourInstanceName>\SQLServerAgent\Subsystems\LogReader
Se tiver uma instância nomeada de 64 bits, esta definição é armazenada na seguinte chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\<YourInstanceName>\SQLServerAgent\Subsystems\LogReader
Nota Microsoft SQL Server 2005 armazena a definição max_worker_thread na tabela syssubsystems na base de msdb dados do sistema em vez de no registo. A tabela syssubsystems pode ser actualizada para reflectir uma definição não predefinidas max_worker_thread .

Parte de cada valor da chave último é um número que especifica a definição max_work_thread para esse subsistema específico. No exemplo seguinte, o subsistema LogReader tem um máximo de 25:
LogReader:REG_SZ:C:\Mssql7\Binn\Sqlrepss.dll,C:\Mssql7\Binn\Logread.exe,ReplStart,ReplEvent,ReplStop,25
Aumentar o número permite mais concorrentes threads de trabalho em que subsistema específico.

Nota A chave de subsistema de Transact-SQL não é criada por predefinição. Para modificar a chave de subsistema de Transact-SQL, adicione um valor de Transact-SQL com o tipo de dados REG_SZ. Na cadeia, adicione apenas um número como, por exemplo, 40 ou 100. Este número representa a nova definição max_worker_thread para o subsistema de Transact-SQL. Por exemplo:
TSQL:REG_SZ:100

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Existem sete subsistemas SQLAgent. O procedimento armazenado do sistema de sp_enum_sqlagent_subsystems mostra a definição max_worker_thread actual para cada subsistema. A tabela seguinte mostra as predefinições:
Reduzir esta tabelaExpandir esta tabela
SubsistemaDescriçãoSubsystem_dllAgent_exeStart_entry_pointEvent_entry_pointStop_entry_pointMax_worker_threads
ActiveScriptingSubsistema de processamento de scripts activoD:\Mssql7\Binn\Sqlatxss.dllNULOActiveScriptStartActiveScriptEventActiveScriptStop10
CmdExecSubsistema da linha de comandosD:\Mssql7\Binn\Sqlcmdss.dllNULOCmdExecStartCmdEventCmdExecStop10
DistribuiçãoDistribuição de replicação subsistemaD:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Distrib.exeReplStartReplEventReplStop100
LogReaderLeitor de registo de transacções de replicação subsistemaD:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Logread.exeReplStartReplEventReplStop25
Impressão em sérieImpressão em série replicação subsistemaD:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Replmerg.exeReplStartReplEventReplStop100
InstantâneoReplicação de instantâneo subsistemaD:\Mssql7\Binn\Sqlrepss.dllD:\Mssql7\Binn\Snapshot.exeReplStartReplEventReplStop100
TSQLO Transact-SQL subsistema[Interno][Interno][Interno][Interno][Interno]20
Após o número total de tarefas em simultâneo com o do subsistema atinge a definição de max_worker_thread , a tarefa adicional que é iniciado em que o subsistema é colocado em fila até ser concluída das tarefas em execução. Isto pode ser um problema para o subsistema LogReader. Por predefinição, a tarefa LogReader está definida para ser executado continuamente. Se mais de 25 tarefas LogReader iniciadas em predefinido LogReader subsistema definição, os trabalhos em fila nunca tenha a oportunidade de executar.

Uma vez que a predefinição de subsistema de Transact-SQL é 20, o número máximo de trabalhos de Transact-SQL em simultâneo é atingido rapidamente se estiverem configuradas várias tarefas de Transact-SQL para executar. Adicione o valor de subsistema de Transact-SQL como uma cadeia com um valor superior a 20 se notar que as tarefas de Transact-SQL são colocados em que está a ser fila por este motivo.

Uma limitação de concepção impõe um uma atraso segundo entre tarefas. Esta limitação foi definida para que o Programador de tarefas não monopolizar os recursos no servidor anfitrião. Devido a esta limitação, para 60 tarefas pode ser iniciado no mesmo intervalo de um minuto. Se tarefas executar e terminar em menos de um minuto e iniciadas ao mesmo tempo com base numa agenda um minuto, algumas tarefas podem nunca execute. As tarefas podem nunca ser executadas por tarefas que já foram executadas são retriggered cada minuto. Outras tarefas ficam numa situação de insuficiência.

importante Estas informações se aplica ao iniciar tarefas de notícias e não impor uma limitação de tarefas em execução ao mesmo tempo.

Recomendamos que agrupar trabalhos em lotes do menos 60 tarefas em simultâneo e fase de agenda para que haja largura de banda suficiente para SQL Server Agent executar estas tarefas.

A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbmt kbprb KB306457 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 306457  (http://support.microsoft.com/kb/306457/en-us/ )