Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que sp_reset_connection faz?


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