Como encontrar as consultas de longa duração no servidor SQL e como matá-las instantaneamente?
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.
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.
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.