높은 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를 참조하고 있다는 것을 이해하고 있습니다. 트랜잭션이 완료되거나 버퍼가 가득 차면 모든 레코드가 즉시 디스크로 플러시됩니다.