반응형

 LATCH는 목적으로 보면 잠금과 유사하지만 많은 차이점이 있다.

 래치는 SQL SERVER 메모리에서 다른 개체로 부터 페이지 데이터 무결성을 보장하는 객체로 정의할 수 있다.

 (잠금은 트랜잭션을 수행할 때, 데이터를 잠궈 안전하게 보호한다.)

 이는 페이지를 사용할 때 자원을 고립시켜 제어된 액세스를 보장하는 논리적 구조이다.

 잠금과의 차이점은 SQLOS 외부로 노출되지 않는 내부 SQL 서버 메커니즘이다.

 래치는 많은 유형이 있지만 대략 버퍼 래치(BUFFER LATCH), 비버퍼래치(NON BUFFER LATCH) 2종류로 나눌 수 있다.

 

 버퍼 캐시

  버퍼 래취를 이해하기 위해서는 먼저 버퍼 캐시의 목적을 이해해야 한다. 버퍼 캐시(또는 버퍼풀(BUFFER POOL)이라고 함)는

  데이터 페이지를 보유하는데 사용되는 메모리 영역이다. 버퍼 캐쉬는 많은 여러 버퍼를 포함하고 있으며 버퍼 캐시의 크기는 

  8192바이트(8k)이다. 이 영역은 디스크에서 읽을 수 있는 영역이며 만약 수정이 발생하였을 경우 디스크에 다시 기록한다.

  

  버퍼풀의 데이터 로딩은 FIFO 를 기초로 하며 캐시에서 오래된 데이터 또는 CHECKPOINT, DBCC DROPCLEANBUFFER로 비울 수 있다.

  (캐시를 비우기 전에 버퍼에 있는 모든 더티 페이지를 기록한다.) 버퍼 캐시의 각 버퍼는 디스크에서 읽은 데이터 페이지의 복사본을

  포함 할 수 있다.

  

  버퍼 관리자는 해시 테이블(특정 메모리 위치에 각 버퍼에 대한 포인터의 버킷 컬렉션 포함), 버퍼 배열(버퍼 포함) 그리고

  버퍼에 대한 쓰기 등 버퍼캐시의 구성요소를 관리할 책임이 있다. 이것은 메모리 영역에서 데이터를 저장하고 검색하기 위한

  메커니즘으로 데이터베이스 엔진과 메모리 페이지의 인터페이스이다.

  

  버퍼 래치는 버퍼 캐시의 페이지에 접근 할 때 발생한다. 이들은 잠금과 달리 트랜잭션이 지속되는 동안만 수행하고 더 이상 필요하지

  않을 때 해체된다. 하나의 트랜잭션에 많은 래치가 있으며 래치는 다양한 이류로 발생한다.

  

  버퍼 래치 중 가장 많이 알려진 종류 중 하나는 PAGE_IO_LATCH wait 이며 이것은 엔진이 I/O 동기화 작업을 기다리고 있는 것으로 완료

  되기 전까지 래치에 반영된다. 이것은 I/O 경합을 나타내는 것으로 DMV sys.dm_os_wait_stats로 모든 버퍼 래치를 볼 수 있다. 

  대기 유형은 sys.dm_exec_requests에서 last_wait_type 컬럼에서 볼 수 있다.

  

  뷰의 캐시에 있는 버퍼에 대한 정보는 DMV sys.dm_os_buffer_description 에서 확인할 수 있다. 이는 버퍼 캐시에 있는 각 데이터 페이지에 

  대해 하나의 행을 포함한다. Page_ID, Page_Type, Row_Count, free space 등을 보여주며 더티페이지 관해서는 나타내지 않는다.

  

  PAGE_IO_LATCH wait - 엔진이 I/O 동기화 작업을 기다리고 있는 것으로 완료 되기 전까지 래치에 반영

  DMV sys.dm_os_wait_stats - 모든 버퍼 래치 확인

  DMV sys.dm_os_buffer_descriptors - 버퍼에 대한 정보 확인

  

  

  LATCH CLASS 및 LATCH MODE

  버퍼 클래스는 기능에 따라 버퍼 래치와 비버퍼 래치의 여러 종류로 분류할 수 있다.

  버퍼 클래스는 일반적으로 사용된다. DMV는 waiting_requests_count 열을 쿼리하는 경우 대부분의 클래스는 순간 유휴 상태(0)이다.

  NULL LATCH (NL) : 사용하지 않음

  KEEP LATCH (KP) : 래치가 위치하는 동안 버퍼캐시에서 페이지를 유지하기 위한 목적과 참조 카운트를 유지하기 위한 목적.

  SHARED LATCH (SH) : 데이터 페이지를 읽은 요청이 있을 때

  UPDATE LATCH (UP) : EX 래치보다는 가벼움. 업데이트 동안 페이지에 읽기는 허용하나 쓰기 안됨.

  EXCLUSIVE LATCH (EX) : 기록되는 동안 페이지에 대한 액세스 허용하지 않음.

  DESTORY LATCH (DT) : 버퍼를 파괴하고 캐시를 축출하는데 사용.

 

  래치 대기는 여러 가지 이유로 발생 할 수 있다.

  예를 들어 작은 범위의 페이지에 업데이트가 많을 때 발생한다.


  래치 경합 다루기 - SuperLatch 를 사용한 병렬처리

   SuperLatch라는 버퍼 래치의 경합을 처리 할 수 있는 메커니즘이 있으며

   페이지의 병렬 처리를 가능하기 위해 다른 CPU 스케줄러(NUMA 아키텍쳐)에서 액세스 할 수 있다.



출처 : http://sqlmvp.kr/140199995476

반응형

'연구개발 > DBA' 카테고리의 다른 글

tempdb 많이 사용하는 실행계획과 텍스트 반환  (0) 2015.08.31
SQL Server 메모리  (0) 2015.06.04
DB 에서 사용되는 명령어 정리  (0) 2015.03.13
windows performance analyzer  (0) 2015.01.19
SQLStress version 0.1  (0) 2015.01.19

+ Recent posts