트랜잭션 도중에 오랜 시간이 걸리는 쿼리가 있습니다. 내가 wait_type
프로세스를 얻을 때 그것은입니다 PAGEIOLATCH_SH
.
이 대기 유형은 무엇을 의미하며 어떻게 해결할 수 있습니까?
답변
에서 Microsoft 설명서 :
PAGEIOLATCH_SH
태스크가
I/O
요청 에있는 버퍼를 래치에서 대기하는 경우에 발생합니다 . 래치 요청이 공유 모드에 있습니다. 긴 대기는 디스크 하위 시스템에 문제가 있음을 나타낼 수 있습니다.
실제로 이것은 큰 테이블에 대한 큰 스캔으로 인해 거의 항상 발생합니다. 인덱스를 효율적으로 사용하는 쿼리에서는 거의 발생하지 않습니다.
쿼리가 다음과 같은 경우 :
Select * from <table> where <col1> = <value> order by <PrimaryKey>
,에 복합 색인이 있는지 확인하십시오 (col1, col_primary_key)
.
계정이없는 경우에, 당신은 하나 전체가 필요합니다 INDEX SCAN
(가) 경우 PRIMARY KEY
선택, 또는 SORT
인덱스에있는 경우 것이 col1
선택됩니다.
둘 다 I/O
큰 테이블에서 디스크를 많이 사용하는 작업입니다.
답변
PAGEIOLATCH_SH
대기 유형은 일반적으로 조각화되거나 최적화되지 않은 인덱스의 결과로 나타납니다.
과도한 PAGEIOLATCH_SH
대기 유형의 이유 는 다음과 같습니다.
- I / O 하위 시스템에 문제가 있거나 잘못 구성됨
- 높은 I / O 활동을 생성하는 다른 프로세스에 의해 과부하 된 I / O 하위 시스템
- 잘못된 인덱스 관리
- 논리적 또는 물리적 드라이브 오해
- 네트워크 문제 / 대기 시간
- 메모리 부족
- 동기식 미러링 및 AlwaysOn AG
높은 PAGEIOLATCH_SH
대기 유형 을 시도하고 해결 하려면 다음을 확인할 수 있습니다.
- 과도한
PAGEIOLATCH_SH
대기 유형 의 근본 원인으로 자주 발견 될 수있는 SQL Server, 쿼리 및 인덱스 - I / O 하위 시스템 문제 해결로 이동하기 전에 메모리 부족
AlwaysOn AG에서 높은 안전성 미러링 또는 동기 커밋 가용성의 경우 증가 / 과도 PAGEIOLATCH_SH
를 예상 할 수 있다는 점을 항상 명심하십시오 .
이 항목에 대한 자세한 내용은 과도한 SQL Server PAGEIOLATCH_SH 대기 유형 처리 문서에서 찾을 수 있습니다.