sysprocesses 테이블의 차단된 열이 래치 대기를 위해 채워집니다.

이 문서에서는 래치 대기를 위해 테이블의 sysprocesses 차단된 열이 채워지는 것을 소개합니다.

원래 제품 버전: SQL Server
원래 KB 번호: 906344

요약

SQL Server 시스템 테이블의 차단된 열 sysprocesses 이 잠금 대기 외에 래치 대기에 대해 채워지는 것을 확인할 수 있습니다. 경우에 따라 단일 SPID(서버 프로세스 ID)가 자체 차단으로 보고되는 짧은 기간을 알 수 있습니다. 이 동작은 예상한 것입니다.

추가 정보

래치는 캐시된 데이터 페이지 및 기타 메모리 내 개체에 대한 액세스를 동기화하는 데 사용됩니다. 일반적으로 래치는 잠시만 유지되며 래치 대기 시간은 그에 따라 작습니다. SQL Server SPID가 래치를 오래 기다리는 경우를 해결하는 데 도움이 되는 진단 있습니다. 이러한 진단 시스템 테이블의 차단된 열에 sysprocesses 다른 SPID의 래치 요청을 차단하는 래치의 소유자가 반영됩니다.

래치 소유권은 배타적(EX) 또는 업데이트(UP) 래치 모드에 있는 래치에 대해서만 추적됩니다. 공유(SH) 래치 모드에 있는 래치에 대한 소유권은 추적되지 않습니다. 즉, 일부 래치 요청에 대해 차단된 열이 채워지지 않습니다.

대부분의 경우 다음 조건이 true인 경우 차단된 열의 값을 무시할 수 있습니다.

  • 열의 값이 waittime 낮습니다.
  • SPID의 는 waittype 래치 대기 유형입니다.

열의 가능한 값에 waittype 대한 자세한 내용은 sys.dm_os_wait_stats(Transact-SQL)를 참조하세요.

SPID가 I/O 페이지 래치를 기다리는 경우 차단된 열이 SPID가 자체적으로 차단되고 있음을 간략하게 보고할 수 있습니다. 이 동작은 데이터 페이지의 I/O 작업에 래치를 사용하는 방식의 부작용입니다. 스레드가 I/O 요청을 실행하면 I/O 요청을 발급하는 SPID가 페이지의 래치를 가져옵니다. 모든 SQL Server I/O 작업은 비동기입니다. 따라서 I/O 요청을 실행한 SPID가 요청이 완료될 때까지 기다려야 하는 경우 SPID는 동일한 페이지에서 다른 래치를 획득하려고 합니다. 이 두 번째 래치는 첫 번째 래치에 의해 차단됩니다. 따라서 차단된 열은 SPID가 자체 차단 중임을 보고합니다. I/O 요청이 완료되면 첫 번째 래치가 해제됩니다. 그런 다음 두 번째 래치 요청이 부여됩니다.

예를 들어 다음과 같은 조건이 발생할 수 있습니다.

  1. SPID 55는 버퍼 풀에 없는 데이터 페이지를 읽으려고 합니다.

  2. SPID 55는 페이지에서 EX 래치를 획득합니다. 페이지가 아직 메모리에 없으므로 요청된 래치 모드는 EX입니다. EX 래치 모드는 I/O 요청이 완료되기를 기다리도록 페이지에 액세스하려는 다른 SPID를 강제로 적용합니다. EX 래치 모드는 다른 SPID가 동일한 페이지에 대해 중복된 I/O 요청을 실행하지 못하도록 합니다.

  3. SPID 55는 디스크에서 페이지를 읽기 위해 I/O 요청을 실행합니다.

  4. SPID 55는 페이지를 읽으려고 하므로 SPID 55는 I/O 요청이 완료되기를 기다려야 합니다. I/O 요청이 완료되기를 기다리기 위해 SPID 55는 동일한 페이지에 공유(SH) 래치 모드가 있는 다른 래치를 획득하려고 시도합니다. EX 래치가 이미 획득되었으므로 SH 래치 요청이 차단되고 SPID가 일시 중단됩니다. SH 래치 요청을 차단하는 EX 래치도 SPID 55에 의해 획득되었기 때문에 SPID는 일시적으로 자체 차단으로 보고됩니다.

  5. I/O 요청이 완료되면 페이지의 EX 래치가 해제됩니다.

  6. EX 래치의 릴리스는 SH 래치를 SPID 55에 제공합니다.

  7. 이제 SPID 55에서 페이지를 읽을 수 있습니다.

4단계와 5 sysprocesses 단계 사이에 이 테이블은 SPID 55가 PAGEIOLATCH_XX의 대기 유형과 함께 자체 차단됨을 나타냅니다. 이 waittype에서 XX 는 SH, UP 또는 EX일 수 있습니다. 이 동작은 SPID 55가 I/O 요청을 실행했고 SPID 55가 I/O 요청이 완료되는 것을 기다리고 있음을 나타냅니다.