높은 PAGELATCH_ * 및 WRITELOG가 대기합니다. 그들은 관련이 있습니까?


11

높은 WRITELOG 대기와 함께 매우 높은 PAGELATCH_EX 및 PAGELATCH_SH 대기 유형을보고 있습니다. PAGELATCH 대기를 유발하는 쿼리를 진단했으며 IDENTITY 값으로 정의 된 사용중인 클러스터 된 기본 키로의 삽입 속도를 줄임으로써 제거 할 수 있습니다. 이 현상을 마지막 페이지 삽입 래치 경합이라고합니다.

그러나 내 질문은 새 레코드가 삽입 될 때 SQL Server가 버퍼 페이지에서 독점 PAGELATCH_EX를 가져 와서 버퍼 페이지에 레코드를 삽입하고 레코드를 트랜잭션 로그에 쓴 다음 자세한 https : // 로 독점 PAGELATCH_EX를 해제합니까? www.microsoft.com/en-ie/download/details.aspx?id=26665 Page 24 또는 "동시 적으로 PAGELATCH 경합 해결"INSERT 작업 부하-PAGELATCH_EX를 사용하기 전에 먼저 트랜잭션 로그에 레코드를 기록합니까 배경 정보 SQLCAT 안내서 : 관계형 엔진

래칭 메커니즘 외부에서 로그에 기록하도록 기록 된 경우 높은 PAGELATCH 대기의 원인으로 디스크에 느린 기록을 배제 할 수 있습니다. 그러나 기록이 기록 될 때까지 래치가 유지되면 WRITELOG를 고려해야합니다.

또한 여러 개의 비 클러스터형 인덱스가 있으면 PAGELATCH_ * 래치가 더 오래 유지됩니다. 즉, 테이블에 클러스터링되어 있고 여러 개의 비 클러스터형 인덱스가 래치를 추가하여 각 인덱스 버퍼 페이지에 동시에 해제되는 경우?

업데이트 1 confio-sql-server-writelog-wait 슬라이드 2와 일반 WAL 아키텍처를 읽은 후 . 두 백서에 자세히 나와있는 "행이 수정 된 로그 항목 기록"단계는 디스크가 아니라 트랜잭션 로그 캐시의 변경을 기록하는 SQL Server를 참조하고 있다는 것을 이해하고 있습니다. 트랜잭션이 완료되거나 버퍼가 가득 차면 모든 레코드가 즉시 디스크로 플러시됩니다.



문제를 일으키는 높은 VLF를 조사 했습니까?
Kin Shah

@KIN PAGELATCH_EX 래치를 열고 디스크를 느리게 플러시하면 래치 경합이 발생한다는 의미입니까?
Pixelated

SQL Server 구현이 페이지 래치 아래에서 로그 레코드를 생성해야하는 이유는 없습니다. 그들은 왜 이렇게할까요? 인정하기 어려운. 로그 쓰기가 patchlatch에서 수행 된 경우 또한, 당신은 꽤 많은 것 결코 WRITELOG 대기를 볼 수 없습니다. 한 번에 하나의 대기 유형 만 사용할 수 있습니다.
usr

답변:


1

그러나 내 질문은 새 레코드가 삽입 될 때 SQL Server가 버퍼 페이지에서 독점 PAGELATCH_EX를 가져 와서 버퍼 페이지에 레코드를 삽입하고 레코드를 트랜잭션 로그에 쓴 다음 독점 PAGELATCH_EX를 해제합니까?

래치는 메모리에있는 동안 페이지의 물리적 무결성 만 보호하므로 페이지가 메모리에있을 때 래치가 사용됩니다. 레코드가 삽입되고 해당 페이지를 가져와야한다고 가정하십시오. 먼저 페이지가 잠기고 메모리에 들어간 다음 걸쇠가 걸리고 정보가 기록됩니다. 이 후의 과정은

  • 로그 레코드 생성

  • 로그 레코드와 일치하도록 페이지 LSN 업데이트

  • 데이터 변경 (더러운 페이지)

  • 분리 래치

  • 커밋 트랜잭션 시작

  • 커밋의 FlushToLSN

  • 잠금 해제

  • 커밋 거래 완료

위의 단계에 대한 자세한 내용과 설명은 Bob Dorr의 I / O 프레젠테이션 블로그를 참조하십시오.

Pagelatch * 대기는 비 I / O 대기이며 할당 경합으로 인해 대기가 두드러지는 대부분의 시간을 보았습니다. 나의 직감은 그것이 어떻게 무언가와 관련이 있다는 것입니다 tempdb is configured. tempdb는 어떻게 구성되어 있습니까? 얼마나 많은 tempdb 데이터 파일이 있습니까? 그들이 같은 자동 성장과 같은 크기를 가지고 있는지 확인하십시오 . 새 페이지가 생성 될 때 GAM, SGAM 및 PFS 페이지와 같은 시스템 페이지 를 업데이트하거나 액세스해야하며 SQL Server가 이러한 페이지에 액세스 할 때 경합을 발견하면 그러한 대기 시간이 나타납니다.


안녕하세요 @Shanky, sys.dm_os_waiting_tasks.resource_description을 기반으로 DBCC PAGE 및 PAGELATCH_ * 유형과 결합하여 tempDB를 배제했습니다. Bob Dorr의 이벤트 체인을 기반으로하면 래칭 메커니즘 내에서 "로그 레코드 생성"단계가 완료된 것 같습니다.
Pixelated

3
둘 다 상호 배타적 인 이벤트입니다. 로그 파일에 쓰는 것은 트랜잭션을 실제로 커밋하기 전에 로그에 정보를 기록하기 위해 WAL 프로토콜을 따르는 SQL Server를 래치하는 것과는 아무런 관련이 없습니다.
Shanky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.