Como posso saber por que minha consulta está tão lenta?

Como posso saber por que minha consulta está tão lenta?

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.

http://sqlblog.com/files/folders/beta/entry27502.aspx

informação relacionada