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

2

Eu tenho uma consulta que está demorando muito mais que o normal, e não sei dizer se está presa.

A consulta é algo assim:

INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1

Isto irá inserir centenas de milhões de linhas. Eu tenho um índice em ZZZZZZZZ.

Não há sessões de bloqueio. Quando eu verifico sys.dm_exec_requests, isso 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.

Eu tentei ver se a tabela está crescendo, mas quando eu chamo sp_spaceused XXXXXX, eu continuo recebendo os mesmos valores.

O que mais posso fazer?

ATUALIZAÇÃO:

Com a ajuda das respostas em stackoverflow , descobri que há um problema de E / S e que minha consulta está resultando em uma média de cerca de 600 registros sendo inseridos por minuto ).

Qual é o meu próximo passo?

O que posso fazer antes de começar a supor que meu disco está indo mal?

    
por Gabriel McAdams 10.09.2010 / 20:56

2 respostas

1

A consulta está em execução, o PAGEIOLATCH_SH é típico ao fazer muitas inserções, pois é uma espera no subsistema de disco. O índice está realmente prejudicando o desempenho, pois o índice obtém uma inserção para cada inserção na tabela.

100 dos milhões são muitos registros e levará algum tempo, quanto tempo está sendo executado?

    
por 10.09.2010 / 21:17
1

Se você estiver usando 2005 ou 2008, eu definitivamente rodaria o script sp_whoisactive desenvolvido pelo MVP da SQL, Adam Mechanic. É basicamente sp_who / sp_who2 em esteróides e deve dar-lhe todas as informações que você precisa.

link

    
por 10.09.2010 / 21:44