Como encontrar as consultas de longa duração no servidor SQL e como matá-las instantaneamente?

Às vezes a minha aplicação é lenta. O maior problema é que alguns relatórios dispendiosos estão em execução. Como posso encontrar esses relatórios e como matá-los instantaneamente?

Author: Fotis Grigorakis, 2017-07-24

3 answers

Eu uso sempre sp_ whoisactive do Adam Machanic para encontrar consultas a longo prazo. sp_whoesactive é descrito em pormenor em dba.stackexchange.com.

Embora também possa escrever o seu próprio programa ou usar sp_who2, por exemplo.

Actualizar
Você está interessado nas primeiras 2 colunas da saída de sp_whoesactive. A primeira coluna define quanto tempo a consulta está em execução. A segunda coluna é a session_id (ou SPID) da consulta.
Podes. use KILL 60 para matar o session_id 60, por exemplo.
Dê uma olhada em Aqui para uma explicação detalhada do procedimento armazenado.

 0
Author: NickyvV, 2017-07-25 11:17:47
Tenho alguns conselhos para ti, mas nem todos são adequados para ti.

As operações de reporte e as operações de CRUD devem ser reduzidas. Pelo menos você pode usar nolock ou algo assim ou executá-los à noite e pode trabalhar offline. 2-Verifique as suas consultas porque se os dados forem inferiores aos 2 000 000, o principal problema são as consultas por muito tempo. 3-analisar os tipos de relatórios e, se adequado para o trabalho offline, utilizar o sistema offline para a comunicação de informações 4-pode usar espelhamento ou outras técnicas para relatar. 5-Best a prática é sempre sparate as bases de dados para relatórios e operações CRUD.

 0
Author: Dogan, 2017-07-24 12:03:21

Pode usar o seguinte comando para obter as consultas a longo prazo.

SELECT r.session_id,
       st.TEXT AS batch_text,
       qp.query_plan AS 'XML Plan',
       r.start_time,
       r.status,
       r.total_elapsed_time
FROM sys.dm_exec_requests AS r
     CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
     CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS qp
WHERE DB_NAME(r.database_id) = '{db_name}'
ORDER BY cpu_time DESC;

Depois pode utilizar

KILL 60 
Para matar o session_id 60, por exemplo.
 0
Author: Sonu K, 2017-12-11 10:11:56