Existe alguma opção para ver sessões encerradas no Query Store?
Estou perguntando, porque temos uma ferramenta adicional que está encerrando as sessões se elas demorarem mais de 30 minutos para serem executadas ( KILL
comando).
Gostaria de verificar os planos de execução no Repositório de Consultas para consultas que foram encerradas. Não consigo encontrar sessões/consultas de armazenamento de consultas que foram eliminadas por este aplicativo adicional.
Eles não. Eu testei isso.
Crie um banco de dados e habilite o armazenamento de consultas.
Crie e execute uma consulta demorada. Já usei este:
Execute a consulta até a conclusão ou interrompa a execução no SSMS, e a consulta poderá ser encontrada no repositório de consultas.
O tipo de execução é Regular ou Aborted . Mas se você matar a sessão de outra janela, não haverá aumento no count_executions nem um novo registro.
Você pode querer considerar apenas o rastreamento de consultas que demoram mais do que um determinado período de tempo usando o recurso Extended Events (Quick Start Extended Events) fornecido com a versão mais recente do SQL Server.
Vamos criar um Evento Estendido para você que capture instruções que sejam executadas por mais de 60 segundos (apenas um exemplo).
Navegue até os eventos estendidos no SSMS
Aqui você pode clicar com o botão direito do mouse na ramificação Sessions para abrir o menu de contexto.
Nova sessão...
Ao contrário da sessão marcada, usaremos a opção Nova Sessão... vazia .
Introdução ao Assistente de Nova Sessão
Clique em Avançar >
Assistente de Nova Sessão Definir Propriedades da Sessão
Daremos um nome à sessão: Statement Duration > 1 Minute , depois clique na opção Start the event session at server startup , e depois clique em Next > ..
Assistente de Nova Sessão Escolher Modelo
Não usaremos um modelo padrão. Próximo >
Assistente de Nova Sessão Selecionar Evento para Capturar
Usaremos apenas o evento sql_transaction e o moveremos para a direita com a seta > correspondente. Próximo > .
Assistente de Nova Sessão Captura Campos Globais
Vamos selecionar pelo menos o campo sql_text , mas adicionei mais alguns como:
... e depois clique em Avançar > .
Assistente de Nova Sessão Definir Filtros de Eventos de Sessão
Vamos filtrar em sqlos.task_execution_time no momento e definir um valor de 6000 . Voltaremos a essa configuração para alterá-la para duração . Clique em Avançar > .
Assistente de Nova Sessão Especificar Armazenamento de Dados de Sessão
Aqui você especifica onde deseja armazenar os dados nos arquivos ou no destino do ring_bugger. Usaremos um arquivo por enquanto. Configure os valores adequados ao seu servidor e clique em Avançar > .
New Session Wizard Summary
Validate your configuration and click on Next >.
New Session Wizard Create Event Session
Select both options to have something running and then click on Next >.
Extended Events | Sessions | Statement Duration > 1 Minute
You'll now have a new Extended Event and a windows displaying the current output of this Extended Event.
Change Configuration
Right-click the session and stop it. Right-click again and go into the properties:
Select the sql_transaction and then click on Configure >...
...switch to the Filters tab and delete the current filter. Add a new filter with the values duration, greater than and 60000000 (microseconds).
Click on OK and then start your session again in the Extended Events. You might have to select Watch Live Data again to have a current window open.
The Fun Part
Now you have an Extended Event Session which will track statements that take longer than 60 seconds. Run a statement on that server with something like this:
After a minute you should see an event pop up in your Watch Live Data window in SSMS. It might look like this:
You can read the statement and with the plan_handle you can even go and query the
sys.dm_exec_text_query_plan
DMV to have a look at the execution plan:Which shows:
Click on the XML link and voilà:
This (in my example) execution plan can then be used to see if things are running ok, or if you might benefit from additional indexes or query tuning.
Answering Your Question
If the statement has run before, but didn't take longer than your timeout, then these queries might be found in the Query Store.
If the statement terminates, because something changed, then maybe. It depends on the reason for the time-out.
Create an Extended Event as described in my solution and instead of setting it to 30 minutes set the time-out to 29 minutes and 59 seconds, or use the filter value of
1799000000
microseconds.Agora você deve ser capaz de rastrear transações de longa duração no Live Data ou no arquivo que é criado.