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

O que significa exec sp_reset_connection no Sql Server Profiler?


Como as outras respostas disseram, sp_reset_connection indica que o conjunto de conexões está sendo reutilizado. Esteja ciente de uma consequência particular!

Blog do MSDN de Jimmy Mays disse:

sp_reset_connection NÃO redefine o nível de isolamento da transação para o padrão do servidor da configuração da conexão anterior.

ATUALIZAÇÃO :A partir do SQL 2014, para drivers de cliente com TDS versão 7.3 ou superior, os níveis de isolamento de transação serão redefinidos para o padrão.

ref:SQL Server:vazamentos de nível de isolamento em conexões em pool

Aqui estão algumas informações adicionais:

O que sp_reset_connection faz?

As camadas da API de acesso a dados, como ODBC, OLE-DB e System.Data.SqlClient, todas chamam os procedimentos armazenados (internos)p_reset_connection ao reutilizar uma conexão de um pool de conexões. Ele faz isso para redefinir o estado da conexão antes que ela seja reutilizada, mas em nenhum lugar está documentado o que as coisas são redefinidas. Este artigo tenta documentar as partes da conexão que são redefinidas.

sp_reset_connection redefine os seguintes aspectos de uma conexão:

  • Todos os estados e números de erro (como @@error)

  • Interrompe todos os ECs (contextos de execução) que são threads filhos de um EC pai executando uma consulta paralela

  • Aguarda quaisquer operações de E/S pendentes que estejam pendentes

  • Libera quaisquer buffers retidos no servidor pela conexão

  • Desbloqueia quaisquer recursos de buffer que são usados ​​pela conexão

  • Libera toda a memória alocada de propriedade da conexão

  • Limpa todas as tabelas de trabalho ou temporárias criadas pela conexão

  • Mata todos os cursores globais pertencentes à conexão

  • Fecha todos os identificadores SQL-XML abertos que estão abertos

  • Exclui todas as tabelas de trabalho relacionadas a SQL-XML abertas

  • Fecha todas as tabelas do sistema

  • Fecha todas as tabelas de usuários

  • Descarta todos os objetos temporários

  • Aborta transações abertas

  • Defeitos de uma transação distribuída quando inscrito

  • Diminui a contagem de referência para usuários no banco de dados atual que libera bloqueios de banco de dados compartilhados

  • Libera fechaduras adquiridas

  • Libera quaisquer alças adquiridas

  • Redefine todas as opções SET para os valores padrão

  • Redefine o valor @@rowcount

  • Redefine o valor @@identity

  • Redefine qualquer opção de rastreamento de nível de sessão usando dbcc traceon()

  • Redefine CONTEXT_INFO para NULL no SQL Server 2005 e mais recente [ não faz parte do artigo original ]

sp_reset_connection NÃO será redefinido:

  • Contexto de segurança, e é por isso que o pool de conexões corresponde às conexões com base na string de conexão exata

  • Funções de aplicativo inseridas usando sp_setapprole, pois as funções de aplicativo não podiam ser revertidas antes do SQL Server 2005. A partir do SQL Server 2005, as funções de aplicativo podem ser revertidas, mas apenas com informações adicionais que não fazem parte da sessão. Antes de fechar a conexão, as funções do aplicativo precisam ser revertidas manualmente por meio de sp_unsetapprole usando um valor "cookie" que é capturado quando sp_setapprole É executado.

Observação:estou incluindo a lista aqui, pois não quero que ela se perca na web sempre transitória.