SQL Server에서 PAGEIOLATCH_SH 대기 유형이란 무엇입니까?


96

트랜잭션 도중에 오랜 시간이 걸리는 쿼리가 있습니다. 내가 wait_type프로세스를 얻을 때 그것은입니다 PAGEIOLATCH_SH.

이 대기 유형은 무엇을 의미하며 어떻게 해결할 수 있습니까?

답변:


116

에서 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큰 테이블에서 디스크를 많이 사용하는 작업입니다.


정말 간단한 쿼리입니다. <테이블>에서 *를 선택합니다. 여기서 <col1> = <값>은 <PrimaryKey>로 정렬합니다. 또한 col1에 대한 인덱스가 있고 인덱스 재 구축을 시도했습니다.
라이언

디스크 집약적 인 것, 전체 인덱스 스캔이 필요한 것, 정렬이 필요한 것 등을 이해하기위한 몇 가지 리소스를 제안
Greg B

1
@GregB : 이미 SQL에 대한 기본 지식이있는 경우, 당신은 조 셀코의 책 (모두 있지만 특히 읽을 수 SQL for SmartiesThinking in Sets)과 :) 물론 내 블로그
Quassnoi

3
이것은 디스크 하위 시스템의 오류를 나타냅니다. 모니터링 시스템을 트리거하지 않고 RAID 디스크에 오류가 발생했습니다. 이벤트 로그를 확인한 결과 SMART가 실제로 드라이브를 불량으로 표시 한 것으로 나타났습니다.
Gomibushi

7

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 대기 유형 처리 문서에서 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.