Atualização melhora o Service Broker quando você envia mensagens para servidores remotos no SQL Server 2012 e 2014 do SQL Server

Modelo: Hotfix genérico

BUG n º: 185563 (Manutenção do conteúdo) VSTS: 1240830

Correções do Microsoft SQL Server 2012 Service Pack 1 (SP1) lançadas como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2012 SP1 anteriores corrigir lançamento.

Introdução

Essa atualização introduz uma melhoria para o Service Broker no SQL Server 2012 e 2014 do SQL Server. Antes de aplicar essa atualização, o número máximo de segmentos que o Service Broker usa para enviar mensagens para servidores remotos é duplicar o número de CPUs que executam o Service Broker. Quando vários servidores remotos desligar, os threads que enviam mensagens para servidores remotos aguardam o tempo limite do Winsock. Portanto, entrega de mensagens para servidores remotos que estão on-line está atrasada quando for atingido o número máximo de segmentos de espera.

Resolução

Depois de aplicar essa atualização, é necessário entrar em contato com o suporte da Microsoft para fazer algumas configurações específicas.
Antes desta atualização, do SQL Server criado apenas dois segmentos por CPU física para lidar com tarefas do Service Broker. O seguinte rastreamento três sinalizadores foram adicionados ao SQL Server 2012 cumulativa atualização 4 para o SQL Server 2012 SP1. Somente o último sinalizador de rastreamento 8428 é suportado no SQL Server 2014:

  • 8426 de sinalizador de rastreamento - o número máximo de segmentos será o número de CPUs multiplicada por 8.

  • 8427 do sinalizador de rastreamento - o número máximo de segmentos será o número de CPUs multiplicado por 16.

  • 8428 do sinalizador de rastreamento - o número máximo de segmentos será o número de CPUs multiplicadas por 32.

Observação: Esses sinalizadores de rastreamento precisam ser configurado como parâmetros de inicialização e exige uma reinicialização do SQL Server sejam efetivadas.

Informações da atualização cumulativa

O problema foi corrigido primeiramente nas seguintes atualizações cumulativas do SQL Server:

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com as atualização cumulativa anterior. Recomendamos que você baixe e instale as atualizações cumulativas mais recentes para o SQL Server:


Mais informações

Cenário do cliente 1
Cliente tem um aplicativo de SQL Server Service Broker (SSB) de longa duração que tem um iniciador e 1100 + destinos. Cliente é na África do Sul e a empresa de energia está fazendo apagões quase toda semana. Por isso sempre existem alguns destinos que estão desativadas e não podem se comunicar. Aproximadamente 30 a 40 down o tempo todo. Quando os blackouts são difundidos e em algum lugar em torno de 100 + destinos, vá para baixo, e mensagens de todos os SSB pare de fluir para qualquer um dos destinos.
O problema se resolve como suficiente destinos voltam a ficar online. No entanto, que pode ser vários dias mais tarde.
Alguns dados iniciais mostram agora SSB Profiler eventos por um longo tempo exceto Broker: conexão.

ON INITIATOR PROFILER TRACE
===================================

Only Broker:Connection events, no other Broker activity.

Count Name SubClass_Name subclass_value

------- ----------------------- ----------------------- --------------

335942 Broker:Connection Accept 6

335942 Broker:Connection Connected 2

335942 Broker:Connection Connecting 1

335942 Broker:Connection Receive IO Error 8

335942 Broker:Connection Closed 5

335942 Broker:Connection Closing 4

335942 Broker:Connection Connect Failed 3

335942 Broker:Connection Send IO Error 7

Reviewed ***sys.dm_broker_connections***

1907 Rows

All rows with state_desc = CONNECTED, have a login_state_desc = WAIT LOGIN NEGOTIATE

All rows with state_desc = CONNECTING, have a login_state_desc = INITIAL

Count state_desc login_state_desc

563 CONNECTING INITIAL

1345 CONNECTED WAIT LOGIN NEGOTIATE

sys.transmission_queue

As many as 513 Transmissions with the following errors:

Connection attempt failed with error: '10060(A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)'.

Connection attempt failed with error: '10061(No connection could be made because the target machine actively refused it.)'.

Connection_Endpoint State Counts

GroupCnt state_desc

----------- ------------------------------------------------------------

2571 CONVERSING
1 ERROR

Cenário do cliente 2

O cliente tem um iniciador em Moscow. Eles têm 500 destinos em Moscou e 3000 + destinos em toda a Rússia. Entre às 21H e 7H que desativem a eletricidade, roteadores e computadores para os destinos 3000 +. O iniciador ainda tenta enviar mensagens de 500 destinos que estão funcionando e a alguns dos destinos de 3000 off-line.

Cada agente de serviços minuto tentará enviar a mensagem da sys.transmission_queue porque não recebemos um pacote ACK de destinos off-line. Quando chamamos o WSPConnect, podemos ir preventivos e ocupam um segmento de trabalho depois de 20 segundos. Neste computador de clientes, ele limita isso 32 segmentos que eles têm mais núcleos que você. Sysprocesses você verá essas sessões com um waittype como PREMPTIVE_WSASETLASTERROR. Quando é atingido o limite de 32 isso também atrasa a enviar mensagens para os 500 destinos que estão funcionando.

Despejo de pilha de amostra

Em ambos os cenários, a pilha de acompanhamento foi observada em todos os manipuladores de tarefa SSB.
Há 16 segmentos nesta mesma pilha:
16 threads [stats]: 42 44 46 47 52 56 58 59 60 61 ... 000000007731135a ntdll!ZwWaitForSingleObject+0xa (e:\obj.amd64fre\minkernel\ntdll\daytona\objfre\amd64\usrstubs.asm @ 180)
000007fefca41e35 mswsock!SockWaitForSingleObject+0xe145
000007fefca411b9 mswsock!SockDoConnectReal+0xb329
000007fefca35e30 mswsock!SockDoConnect+0x32f (d:\w7rtm\minio\sockets\winsock2\wsp\mswsock\msafdlib\connect.c @ 1710)
000007fefca35bca mswsock!WSPConnect+0x2a (d:\w7rtm\minio\sockets\winsock2\wsp\mswsock\msafdlib\connect.c @ 222)
000007fefdb2466c ws2_32!connect+0xac (d:\w7rtm\minio\sockets\winsock2\ws2_32\src\sockctrl.cpp @ 198)
000000000245d1b5 sqlservr!Tcp::SocketOpenSync+0x5c9 (e:\sql10_main_t\sql\ntdbms\sni\src\tcp.cpp @ 3944)
000000000245d777 sqlservr!Tcp::Open+0x47b (e:\sql10_main_t\sql\ntdbms\sni\src\tcp.cpp @ 4097)
00000000024438c3 sqlservr!SNIOpenSync+0x623 (e:\sql10_main_t\sql\ntdbms\sni\src\sni.cpp @ 2523)
000000000138d84e sqlservr!CConnectionEndpoint::AsyncConnect+0xc52 (e:\sql10_main_t\sql\ntdbms\broker\src\ssbconendpointopen.cpp @ 828)
000000000138bb55 sqlservr!CEndPointConnectTask::IdempotentInvoke+0x15 (e:\sql10_main_t\sql\ntdbms\broker\src\ssbconendpointopen.cpp @ 69)
00000000014418cf sqlservr!CSbTaskManager::HandleReusableTask+0x247 (e:\sql10_main_t\sql\ntdbms\broker\src\ssbtask.cpp @ 1337)
000000000144089a sqlservr!CSbTask::TaskStart+0x412 (e:\sql10_main_t\sql\ntdbms\broker\src\ssbtask.cpp @ 686)
0000000001440442 sqlservr!CSbTask::BeginTaskStart+0x1a (e:\sql10_main_t\sql\ntdbms\broker\src\ssbtask.cpp @ 564)
000000000079b450 sqlservr!SOS_Task::Param::Execute+0x12a (e:\sql10_main_t\sql\common\dk\sos\include\sos.inl @ 10347)
000000000079b116 sqlservr!SOS_Scheduler::RunTask+0x96 (e:\sql10_main_t\sql\common\dk\sos\src\scheduler.cpp @ 919)
000000000079af5b sqlservr!SOS_Scheduler::ProcessTasks+0x128 (e:\sql10_main_t\sql\common\dk\sos\src\scheduler.cpp @ 800)
00000000008d44fa sqlservr!SchedulerManager::WorkerEntryPoint+0x2d2 (e:\sql10_main_t\sql\common\dk\sos\src\node.cpp @ 1801)
00000000008d47dd sqlservr!SystemThread::RunWorker+0xcc (e:\sql10_main_t\sql\common\dk\sos\include\worker.inl @ 789)
0000000000d1c0cd sqlservr!SystemThreadDispatcher::ProcessWorker+0x2db (e:\sql10_main_t\sql\common\dk\sos\src\node.cpp @ 449)
00000000008d53d2 sqlservr!SchedulerManager::ThreadEntryPoint+0x173 (e:\sql10_main_t\sql\common\dk\sos\src\node.cpp @ 1999)
00000000738137d7 msvcr80!_callthreadstartex+0x17 (f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c @ 348)
0000000073813894 msvcr80!_threadstartex+0x84 (f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c @ 326)
00000000770b652d kernel32!BaseThreadInitThunk+0xd (d:\win7sp1_gdr\base\win32\client\thread.c @ 65)
00000000772ec521 ntdll!RtlUserThreadStart+0x1d (d:\win7sp1_gdr\minkernel\ntos\rtl\rtlexec.c @ 3185)

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Referências

Para obter mais informações sobre o modelo de serviços incrementais para SQL Server, clique no número de artigo seguinte para ir para o artigo da Base de dados de Conhecimento da Microsoft:

935897 um modelo de serviços incrementais está disponível da equipe do SQL Server para fornecer hotfixes para problemas relatadosPara obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número de artigo seguinte para ir para o artigo da Base de dados de Conhecimento da Microsoft:

Pacotes de atualização do esquema de nomeação 822499 para o software Microsoft SQL ServerPara obter mais informações sobre a terminologia de atualização de software, clique no número de artigo seguinte para ir para o artigo da Base de dados de Conhecimento da Microsoft:

824684 descrição da terminologia padrão usada para descrever as atualizações de software

Autor: wcarroll; jannaw
Gravador: v-fismao
Revisor técnico: wcarroll; vinodmr; chwilkin; lvargas; jannaw; sqlprev
Editor: v-johnga

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

×