O que significa “sp_reset_connection exec” significa no SQL Server Profiler? [duplicado]
Pergunta
Esta questão já tem uma resposta aqui:
- O que sp_reset_connection fazer? 2 respostas
Tentando entender o que significa o SQL Profiler, emitindo "sp_reset_connection".
Eu tenho o seguinte, "sp_reset_connection exec" linha seguido por BatchStarting e Concluído,
RPC:Completed exec sp_reset_connection
SQL:BatchStarting SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
SQL:BatchCompleted SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
Basicamente faz primeira linha "sp_reset_connection exec" significa todo o processo (o meu conexão foi aberta, o seleto stmt é executado, então a conexão é fechada e liberada de volta para piscina) apenas terá lugar? Ou minha conexão ainda está em fase aberta.
E, por que o sp_reset_connection executado antes de minha própria instrução select, não deveria o reset vir após sql do usuário?
Estou tentando saber se existe uma maneira de saber com mais detalhes quando uma conexão é aberta e fechada?
Ao ver "sp_reset_connection exec", isso significa que a minha conexão é fechada?
Solução
Como as outras respostas disse, sp_reset_connection
indica que pool de conexão está sendo reutilizado. Estar ciente de uma conseqüência especial!
Jimmy Mays' MSDN Blog disse:
sp_reset_connection não repõe a nível de isolamento de transação para o padrão do servidor a partir do anterior configuração de conexão.
Atualizar : Começando com o SQL 2014, para os motoristas cliente com TDS versão 7.3 ou superior, os níveis de isolamento de transação estará de volta redefinido para o padrão.
ref: SQL Server: vazamentos nível de isolamento em toda conexões em pool
Aqui estão algumas informações adicionais:
O que sp_reset_connection fazer?
acesso da API de dados camadas como ODBC, OLE-DB e System.Data.SqlClient tudo chamar o procedimento armazenado (interna) sp_reset_connection quando re-utilizando um conexão de um pool de conexão. isto faz isso para redefinir o estado da conexão antes que ele chegue reutilizado, no entanto nenhum lugar está documentado que as coisas ficam reiniciado. O artigo tenta para documentar as partes do conexão que redefinir get.
sp_reset_connection redefine o seguintes aspectos de uma conexão:
Todos os estados de erro e números (Como @@ erro)
Pára (contextos de execução), todos da CE que são tópicos filho de um pai CE executar uma consulta paralela
Waits para qualquer excelente I / O operações que é excelente
libera qualquer buffers realizada no servidor pela conexão
desbloqueia todos os recursos de buffer que são usados ??pela conexão
Lançamentos toda a memória alocada propriedade da conexão
Limpa qualquer trabalho ou temporária tabelas que são criadas pela conexão
Kills todos os cursores globais de propriedade da conexão
Fecha os identificadores SQL-Open XML que estão abertos
Exclui as mesas de trabalho relacionados SQL-Open XML
Fecha todas as tabelas do sistema
Fecha todas as tabelas de usuário
Drops todos os objetos temporários
Aborta transações abertas
Defeitos de uma transação distribuída, quando se alistou
Diminui a contagem de referência para usuários no banco de dados atual que libera compartilhados bloqueios de banco de dados
Frees adquirido bloqueios
Lançamentos os identificadores adquiridos
Repõe todas as opções definidas para os valores padrão
redefine o valor @@ rowcount
redefine o valor @@ identidade
Redefine qualquer traço nível de sessão opções usando DBCC TRACEON ()
Repõe CONTEXT_INFO para
NULL
no SQL Server 2005 e versões mais recentes [não faz parte do artigo original]sp_reset_connection não redefinirá:
Contexto de segurança, razão pela qual o pool de conexão corresponde ligações com base na seqüência de conexão exata ??p>
funções de aplicativo entrou usando sp_setapprole, já que a aplicação papéis não pode ser revertido
Nota:. Estou incluindo a lista aqui como eu não quero que ele seja perdido na web sempre transitória
Outras dicas
É uma indicação de que o pool de conexão está sendo usado (que é uma coisa boa).
Nota no entanto:
Se você emitir SET nível de transação isolamento em um procedimento armazenado ou gatilho, quando o objeto retorna controlar o nível de isolamento é redefinido para o nível em vigor quando o objeto foi invocado. Por exemplo, se você definir REPEATABLE READ em um lote, e do lote, em seguida, chama um procedimento armazenado que define o nível de isolamento para SERIALIZABLE, as reverte definição do nível de isolamento para REPEATABLE READ quando o procedimento armazenado retorna o controle para o lote.