
평소보다 훨씬 오래 걸리는 쿼리가 있는데, 멈춰 있는지 알 수 없습니다.
쿼리는 다음과 같습니다.
INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1
그러면 수억 개의 행이 삽입됩니다. ZZZZZZZZ에 대한 색인이 있습니다.
차단 세션이 없습니다. sys.dm_exec_requests를 확인하면 마지막 대기 유형이 다음과 같이 표시됩니다.PAGEIOLATCH_SH I/O와 관련이 있다는 점을 제외하면 이것이 무엇을 의미하는지 잘 모르겠습니다.
sys.dm_exec_sessions에서는 상태가 RUNNING으로 표시되지만 sp_who2에서는 SUSPENDED로 표시됩니다.
테이블이 커지는지 확인하려고 했는데 sp_spaceused XXXXXX를 호출하면 계속 동일한 값이 나타납니다.
또 무엇을 할 수 있나요?
업데이트:
에 대한 답변의 도움으로스택 오버플로, 나는 거기에 있다는 것을 발견했습니다I/O 문제, 그리고 내 쿼리는분당 평균 약 600개의 레코드가 삽입됩니다.).
나의 다음 단계는 무엇입니까?
디스크에 문제가 있다고 가정하기 전에 어떻게 해야 합니까?
답변1
쿼리가 실행 중이고 디스크 하위 시스템에서 대기하므로 많은 삽입을 수행할 때 PAGEIOLATCH_SH가 일반적입니다. 인덱스는 테이블에 대한 모든 삽입에 대한 삽입을 가져오므로 실제로 성능을 방해합니다.
수억 건의 기록이 많아서 시간이 좀 걸릴 것 같은데, 실행된 지 얼마나 됐나요?
답변2
2005 또는 2008을 사용하고 있다면 SQL MVP Adam Mechanic이 개발한 sp_whoisactive 스크립트를 반드시 실행하겠습니다. 기본적으로 스테로이드의 sp_who/sp_who2이며 필요한 모든 정보를 제공해야 합니다.