[sql-server] SQL Server에서 PAGEIOLATCH_SH 대기 유형이란 무엇입니까?

트랜잭션 도중에 오랜 시간이 걸리는 쿼리가 있습니다. 내가 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 대기 유형 처리 문서에서 찾을 수 있습니다.


답변