AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 188255
Accepted
Mitch
Mitch
Asked: 2017-10-12 11:17:57 +0800 CST2017-10-12 11:17:57 +0800 CST 2017-10-12 11:17:57 +0800 CST

Tempo limite de conexão expirou sem problema de rede aparente

  • 772

Temos um SQL Server específico que está expirando intermitentemente ao aceitar conexões. O problema é consistente ao longo do dia, mas ocorre em uma incidência muito baixa. Como posso continuar a solucionar problemas?

Tempo limite de conexão expirado. O período de tempo limite decorrido ao tentar consumir a confirmação de handshake de pré-login. Isso pode ocorrer porque o handshake de pré-login falhou ou o servidor não conseguiu responder no tempo. O tempo gasto na tentativa de conexão com este servidor foi - [Pré-Login] inicialização=0; aperto de mão=15002; (Microsoft SQL Server, Erro: -2)

Configuração do servidor:

  • SQL Server 2016 SP1 CU5 Enterprise (o problema também ocorreu antes do SP1)
  • Windows Server 2012 R2 no servidor e no cliente
  • VMware ESXi, 6.5.0 no HP ProLiant DL360 Gen9
  • VM tem 8 vCPU, 64 GiB de memória (totalmente reservada)

Script de teste (executado uma vez por segundo):

$failed = $false;
$loginDuration = (Measure-Command {
    $ncon = New-Object System.Data.SqlClient.SqlConnection `
        @( 'Data Source=1.2.3.4,16143;Database=Test;User=Test;Password=****;Pooling=false;' );
    try 
    {
        $ncon.Open();

        $cmd = New-Object System.Data.SqlClient.SqlCommand `
            @( 'SELECT @@VERSION', $ncon );
        $cmd.ExecuteNonQuery();

        $ncon.Dispose();
    }
    catch
    {
        $failed = $true;
    }
}).TotalMilliseconds;
Write-Metric -metric 'itp.dbserver.logintime' -unit 'milliseconds' `
    -value (&{if ($failed) { 120000 } else { $loginDuration }});

Observações:

  • O problema começou a ocorrer após atualizações do sistema operacional, atualizações do SQL Server, movimentação de San e movimentação do Hyper-V para o VMWare
  • A maioria das conexões é bem-sucedida (4 falhas em 1.440 tentativas)
  • As falhas são sempre listadas com um número baixo em "[Pré-Login] inicialização=0;" e um número alto em "handshake=15002". Não recebemos erros como "Não encontrado" ou "Nenhum host é conhecido", apenas "Tempo limite de conexão"
  • Nenhuma criptografia está habilitada para o ouvinte
  • Pings não mostram perda durante um período prolongado (0 perdido de 96.045 enviados)
  • Todos os firewalls estão desativados
  • As conexões tentadas usando endereços IPv6 e IPv4 falham na mesma taxa
  • CPU é baixa (<40%)
  • As sessões ativas são persistentemente em torno de 400
  • O driver do balão está desativado
  • As conexões, uma vez feitas, são estáveis, sem erros inesperados ao executar consultas, sem desconexões estranhas.
  • Vários clientes estão tendo problemas para se conectar - ODBC e ADO de vários computadores

Atualização: finalmente obtive um rastreamento do Wireshark do lado do cliente de uma conexão com falha. Nenhuma perda de pacote é aparente, o cliente recebe TCP ACKs em tempo real (<10ms). O cliente estava usando o nome DNS no momento da falha, mas a falha ocorre usando o endereço IPv4 na cadeia de conexão.

Gráfico de conversação do Wireshark mostrando o servidor não respondendo por >15 segundos

Estou correto ao pensar que o fato de eu obter ACKs TCP imediatos para os pacotes de solicitação de pré-login enviados localizaria o problema no sistema operacional ou no SQL Server?

sql-server sql-server-2016
  • 1 1 respostas
  • 6735 Views

1 respostas

  • Voted
  1. Best Answer
    Mitch
    2018-05-23T08:49:51+08:002018-05-23T08:49:51+08:00

    Isso acabou sendo identificado como um efeito colateral do VMWare LRO. A desativação da LRO baseada em host resolveu o problema. Ver

    • Habilitar ou desabilitar o LRO em um adaptador VMXNET3 em uma máquina virtual do Windows
    • Descarregamento de recebimento grande
    • Desempenho de rede ruim ou alta latência de rede em máquinas virtuais Windows (2008925)
    • Adaptador vmxnet3 no Windows Server 2012 com problema de gargalo no servidor MSSQL
    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve