Pergunta

Esta questão já tem uma resposta aqui:

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?

Foi útil?

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

  • 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.

http://msdn.microsoft.com/en-us/library/ms173763.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top