
Tenho uma consulta que está demorando muito mais do que o normal e não sei dizer se ela está travada.
A consulta é mais ou menos assim:
INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1
Isso irá inserir centenas de milhões de linhas. Eu tenho um índice em ZZZZZZZZ.
Não há sessões de bloqueio. Quando verifico sys.dm_exec_requests, mostra que o último tipo de espera éPAGEIOLATCH_SH Não tenho certeza do que isso significa, exceto que tem algo a ver com E/S.
sys.dm_exec_sessions mostra que o status é RUNNING, mas sp_who2 mostra como SUSPENDED.
Tentei ver se a tabela está crescendo, mas quando chamo sp_spaceused XXXXXX, continuo obtendo os mesmos valores.
O que mais eu posso fazer?
ATUALIZAR:
Com a ajuda das respostas emfluxo de pilha, descobri que háum problema de E/S, e que minha consultaestá resultando em uma média de cerca de 600 registros inseridos por minuto).
Qual é o meu próximo passo?
O que posso fazer antes de começar a presumir que meu disco está com defeito?
Responder1
A consulta está em execução, o PAGEIOLATCH_SH é típico ao fazer muitas inserções, pois é uma espera no subsistema de disco. Na verdade, o índice está prejudicando o desempenho, pois obtém uma inserção para cada inserção na tabela.
Centenas de milhões são muitos registros e levarão algum tempo. Há quanto tempo estão em execução?
Responder2
Se você estiver usando 2005 ou 2008, eu definitivamente executaria o script sp_whoisactive desenvolvido pelo SQL MVP Adam Mechanic. É basicamente sp_who/sp_who2 com esteróides e deve fornecer todas as informações que você precisa.