As camadas da API de acesso a dados, como ODBC, OLE-DB e SqlClient, chamam o procedimento armazenado (interno) sp_reset_connection ao reutilizar uma conexão de um pool de conexões. Ele faz isso para redefinir o estado da conexão antes de ser reutilizada.
Não parece haver documentação oficial sobre o que as coisas são redefinidas, mas aqui está uma lista não oficial.
sp_reset_connection redefine os seguintes aspectos de uma conexão:
- Reinicia todos os estados e números de erro (como @@error)
- Ele interrompe todos os ECs (contextos de execução) que são threads filhos de um EC pai executando uma consulta paralela
- Ele aguardará quaisquer operações de E/S pendentes que estejam pendentes
- Ele liberará quaisquer buffers retidos no servidor pela conexão
- Ele desbloqueará todos os recursos de buffer usados pela conexão
- Ele liberará toda a memória alocada pertencente à conexão
- Ele limpará todas as tabelas de trabalho ou temporárias criadas pela conexão
- Ele matará todos os cursores globais pertencentes à conexão
- Ele fechará todos os identificadores SQL-XML abertos que estiverem abertos
- Ele excluirá todas as tabelas de trabalho relacionadas a SQL-XML abertas
- Ele fechará todas as tabelas do sistema
- Ele fechará todas as tabelas de usuários
- Ele removerá todos os objetos temporários
- Irá abortar transações abertas
- Ele irá desertar de uma transação distribuída quando inscrito
- Isso diminuirá a contagem de referência para usuários no banco de dados atual; que liberam o bloqueio de banco de dados compartilhado
- Irá liberar bloqueios adquiridos
- Ele liberará quaisquer identificadores que possam ter sido adquiridos
- Redefinirá todas as opções SET para os valores padrão
- Redefinirá o valor @@rowcount
- Redefinirá o valor @@identity
- Ele redefinirá todas as opções de rastreamento de nível de sessão usando dbcc traceon()
sp_reset_connection NÃO será redefinido:
- Contexto de segurança, razão pela qual o pool de conexões corresponde às conexões com base na string de conexão exata
- Se você inseriu uma função de aplicativo usando sp_setapprole, pois as funções de aplicativo não podem ser revertidas
- O nível de isolamento da transação