Episódio

Tempo limite do comando do SQL Server - Tempo limite do aplicativo - Atenção estendida ao evento

Quando você usa ODBC ou SqlClient para acessar dados do SQL Server, por padrão, a consulta será cancelada se não houver resposta do servidor dentro de um determinado período de tempo (30 segundos por padrão). ODBC ou SqlClient iniciará um temporizador depois de enviar a consulta para o SQL Server e, se não houver resultados do servidor dentro de 30 segundos, a consulta será cancelada e uma mensagem de erro de tempo limite será enviada ao aplicativo. Caso um pacote de rede (contendo resultados de consulta) tenha sido recebido dentro dos 30 segundos, e se estivermos esperando pacotes de rede adicionais (linhas adicionais que não puderam caber no primeiro pacote de rede), o temporizador será reiniciado, se o próximo pacote de rede não for recebido dentro desse período de 30 segundos, a consulta será cancelada.

Os motivos comuns para o tempo limite do Comando SQL são o esquema não ideal ou consultas ineficientes que são executadas por um longo período de tempo ou que perdem índices ou bloqueiam problemas de espera. É importante ajustar as consultas em vez de aumentar as configurações de tempo limite do Comando SQL.

No vídeo é demonstrado um exemplo onde diminuir o tamanho do pacote de rede elimina o tempo limite, esta demonstração é para entender como os pacotes de rede estão envolvidos na redefinição do temporizador e para desenvolver uma melhor compreensão do tempo limite. Alterar o tamanho do pacote de rede não é uma solução para evitar o tempo limite, ajustar o esquema não ideal ou consultas ineficientes ou adicionar índices ou evitar esperas de bloqueio são a solução adequada.

Para identificar o comando que leva ao erro de tempo limite do Comando SQL, você pode usar Eventos Estendidos e monitorar o evento 'sqlserver.attention'. O script de evento estendido usado no vídeo está disponível em www.sqlvideo.com/xevents.

No SQL Server Management Studio, o tempo limite do Comando SQL pode ser alterado usando 'Opções' na caixa de diálogo de conexão. Por padrão, isso é definido como '0', o que significa que não há tempo limite. Quando uma consulta ou procedimento armazenado estiver em execução, se você clicar no botão 'Cancelar' (o quadrado vermelho), a mesma atenção será enviada para o SQL Server (como o Tempo Limite do Comando SQL). E isso, por sua vez, gerará o evento 'sqlserver.attention' em Eventos Estendidos.

No vídeo abaixo, você pode ver um exemplo do tempo limite do Comando SQL. SQLTest Tool simula os laboratórios práticos para você, sem necessidade de registro. Você pode praticar o exemplo prático on-line enquanto assiste ao vídeo.