Episódio

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

Quando você usa ODBC ou SqlClient para acessar dados de 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ão um temporizador depois de enviar a consulta para 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 de 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 SQL tempo limite de comando são consultas não ideais ou de esquema ineficiente que são executadas por um longo período de tempo ou que perdem índices ou travam problemas de espera. É importante ajustar as consultas em vez de aumentar as configurações de tempo limite do comando SQL.

No vídeo, um exemplo é demonstrado em que a diminuição do tamanho do pacote de rede elimina o tempo limite, essa demonstração é entender como os pacotes de rede estão envolvidos na redefinição do temporizador e 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.

Em 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 SQL Tempo limite de comando). 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. A Ferramenta SQLTest simula os laboratórios práticos para você, sem necessidade de registro. Você pode praticar o exemplo prático online enquanto assiste ao vídeo.