Pools de conexão sendo redefinidos com Erro: 18056, Gravidade: 20, Estado: 46. & Contadores de Perfmon não mostrando


21

Estamos usando a autenticação SQL (para reduzir o número de conjuntos de conexões) e as seqüências de conexão .NET 4.0 para conectar-se ao SQL Server Enterprise Edition 2012 SP1 em um Windows 2008 R2 Enterprise Server:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
19 de outubro de 2012 13:38:57
Direitos autorais (c) Microsoft Corporation
Enterprise Edition (64 bits) no Windows NT 6.1 (Build 7601: Service Pack 1)

Utilizamos cerca de 50 servidores, divididos em 8 grupos diferentes, diferentes partes de um site.

Nosso site está usando este SQL Server para registrar dados de rastreamento de visitas. Nos últimos dias, ele enviou as seguintes mensagens sobre os conjuntos de conexões de redefinição:

O cliente não pôde reutilizar uma sessão com o SPID 1327, que foi redefinida para o pool de conexões. O ID da falha é 46. Esse erro pode ter sido causado por uma operação anterior falhando. Verifique os logs de erros em busca de operações com falha imediatamente antes desta mensagem de erro.

O log de erros lê:

Erro: 18056, Gravidade: 20, Estado: 46.
O cliente não pôde reutilizar uma sessão com o SPID 959, que foi redefinido para o pool de conexões. O ID da falha é 46. Esse erro pode ter sido causado por uma operação anterior falhando. Verifique os logs de erros em busca de operações com falha imediatamente antes desta mensagem de erro.
Falha no login para o usuário 'xxxx'. Motivo: falha ao abrir o banco de dados 'xxxxxxxx' configurado no objeto de logon ao revalidar o logon na conexão. [CLIENTE: 10.xx.xx.xxx]

Após algumas pesquisas, encontrei este documento no blog CSS: How It Works: Erro 18056 - O cliente não conseguiu reutilizar uma sessão com o SPID ##, que foi redefinido para o pool de conexões e esta por Aaron Bertrand: Solucionando problemas do erro 18456 . Sei que o número do erro é diferente, mas o ID da falha é o mesmo, com várias mensagens idênticas).

A identificação de falha 46 sugere que o logon não tem permissões. Nossos logins são padronizados no banco de dados mestre e o nome do banco de dados é especificado na cadeia de conexão.

Eu queria verificar o número de conjuntos de cadeias de conexão, etc. e verifiquei todos os contadores no Perfmon .Net Data Provider for SqlServer. Isso só me deu a opção de defaultdomain9675instância, por isso selecionei que, assumindo que esse é um nome de ID gerado pelo sistema para nossa rede de datacenter. Infelizmente, todos os contadores estão com zero. Em um de nossos outros servidores principais, os pools de conexões estão pairando em torno de 10, o que eu esperava ver em um servidor íntegro com esse tipo de carga.

Minha pergunta é 3 vezes

  1. Alguém pode sugerir por que o Windows 2008 R2 Server não está aparecendo .Net Data Provider for SqlServer?

  2. Alguém já experimentou isso, como eu obviamente acredito que o login sem permissões é um arenque vermelho?

  3. Se grupos diferentes de servidores da Web tiverem a mesma sintaxe de cadeia de conexão, mas com espaço em branco ligeiramente diferente, isso faria com que o servidor usasse outro conjunto de conexões?

As configurações de memória mínima e máxima são 20 GB e 58 GB, respectivamente. O servidor é um servidor de banco de dados dedicado com 64 GB de RAM. Não acho que a memória seja o problema, pois a caixa parece ter uma expectativa decente de vida útil da página. O fechamento automático não está ativado. O servidor está sempre ativo: este é um site 24x7 com uso intenso.


3
Temos o mesmo problema em nossos servidores (aplicativo .NET / login no Windows 2008 R2 / SQL Server 2008 R2 / SQL) intermitentemente; Eu nunca fui capaz de rastrear por que isso acontece ... basicamente desistimos de tentar neste momento. Também tivemos esse problema no .NET 3.5 antes de atualizar para o 4.0. Gostaria muito de saber se alguém resolveu isso!
Jon Seigel

1
@jonSeigel Olá John, consegui determinar que o servidor em questão está realmente usando o pool de ocnnection corretamente usando o seguinte documento sobre eventos estendidos. sqlserverpedia.com/blog/sql-server-bloggers/... im actualmente a tentar adaptar as Xevents para encontrar as informações necessárias para me dar um total para o número de pools de conexão
DamagedGoods

O servidor em questão está usando espelhamento? Eu vi essa mensagem de erro na máquina principal quando os bancos de dados são submetidos a failover no secundário.
Max Vernon

Respostas:


5

1 - não posso dizer com certeza, eu teria que procurar um servidor para me aprofundar.

2 - sim, vejo isso periodicamente em meu ambiente, embora ainda não estejamos no sql 2012 nos sistemas em que vemos isso. Você também pode verificar http://blogs.msdn.com/b/psssql/archive/2013/02/13/breaking-down-18065.aspx, embora o Estado 46 pareça estar relacionado a ter um banco de dados específico = xxx em a cadeia de conexão, esse banco de dados ainda existe?

Da maneira como minha rede é configurada, suspeito que seja o encerramento automático da rede das sessões tcp após 5 minutos ociosos. Esse é o problema - nem o banco de dados nem o cliente estão fechando a sessão, para que o conjunto de conexões ainda pense que a conexão está aberta e tente usar apenas para descobrir que não está mais aberto. Você não menciona como a rede entre seus servidores da Web e o banco de dados está configurada, talvez o seu caso seja semelhante.

Outra possibilidade pode ser a questão (antiga, não tenho certeza se realmente foi realmente resolvida, consulte http://support.microsoft.com/kb/942861 ) sobre as configurações de TCP Chimney Offload.

3 - Meu entendimento é que o pool exige correspondências exatas de strings, portanto, espaços em branco e ordem diferente de parâmetros causariam pools diferentes. (Se eu estiver errado nisso, entre em contato.)


4

Resposta do Community Wiki originalmente deixada como um comentário pelo autor da pergunta

No meu caso, acabou sendo uma tabela de registro descontrolada, que alguém havia mudado para detalhada para solucionar um problema, mas esqueceu de desligar. Acabou registrando até 1000 registros por segundo.

Outro trabalho estava tentando excluir registros antigos da tabela. acabou entrando em nós como estava travando ao tentar excluir, bloqueando todas as inserções que ficaram sem recursos do conjunto de conexões.

Assim que encontrei o trabalho, dei um tapa na pessoa que abusou de seus direitos naquele servidor e interrompeu o trabalho, todas as mensagens de erro dos conjuntos de conexões foram interrompidas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.