>  기사  >  데이터 베이스  >  래치란 무엇입니까? 래치와 잠금의 차이점

래치란 무엇입니까? 래치와 잠금의 차이점

PHP中文网
PHP中文网원래의
2017-06-20 15:05:548673검색

Latch

latch:

잠금은 데이터베이스 시스템과 파일 시스템을 구별하는 핵심 기능입니다. 잠금 메커니즘은 공유 리소스에 대한 동시 액세스를 관리하는 데 사용됩니다. Innodb스토리지 엔진은 행 수준에서 테이블 데이터를 잠급니다. 이는 훌륭합니다. 그러나 Innodb는 여러 위치에서 잠금을 사용하여 여러 리소스가 동시 액세스를 제공할 수 있도록 합니다. 예를 들어 버퍼 풀로 요약된 LRU 목록을 운영할 때 LRU 목록의 요소를 삭제, 추가, 이동하는 경우 일관성을 보장하기 위해 잠금이 포함되어야 하는데, 이는 래치 잠금.

latchlock

래치의 차이점은 일반적으로 잠김 시간이 매우 짧아야 하기 때문에 래치(경량 수준 잠금 장치)라고 합니다. 오랫동안 지속되면 애플리케이션의 성능이 매우 저하됩니다. Innodb 스토리지 엔진에서 latchmutex(뮤텍스)와 RW-Lock(읽기-쓰기 잠금)으로 나눌 수 있습니다.

그리고 lock 개체는 테이블, 행, 페이지와 같은 데이터베이스의 개체를 잠그는 데 사용되는 트랜잭션입니다. 그리고 일반적으로 lock 개체는 트랜잭션 commit 또는 rollback 후에만 해제됩니다(해제 시간은 트랜잭션 격리 수준에 따라 다를 수 있음). 게다가 lock에는 대부분의 데이터베이스와 마찬가지로 교착 상태 메커니즘이 있습니다. ㅋㅋㅋ 소스 코드의 위치(줄 수) ) .

latch

분류는 다음과 같이 나뉩니다. mutex: 때로는 일부 리소스를 공유하고 동시성을 수행해야 하지만 자주는 아니므로 다음에서 mutex

을 신청하세요. 운영 체제,

mutex

는 모두 독점적입니다.   RW-LATCH: 읽기-쓰기 잠금

latch 이해:

예: select 를 실행하면 데이터가 에 캐시됩니다. 버퍼 풀, 이 데이터에 동시에 액세스하거나 수정하는 여러 스레드에는

래치

인 동시성 제어 메커니즘이 필요합니다.

데이터베이스에서 접근할 데이터는 먼저 캐시에 저장되어야 하며, 캐시는 일반적으로 디스크 공간보다 작습니다. 데이터 버퍼는 hash 테이블을 사용하여 데이터 페이지가 메모리에 있는지 기록합니다. MySQL의 해당 RW-Latcherrlog에 명확하게 명시되어 있습니다. RW-Latchbuf0sea.cc에 있습니다. 658 RW-래치 만든 사람: row.

errorlog 의 스트레스 테스트 예를 살펴보세요.

로그에 따르면 스레드를 분석할 수 있습니다. 140140355766016 기록으로 x 잠금, 그러나 대기 중인 스레드 스레드 0x4c407b8RW-Latch 출시.

latch콘텐츠 프로세스

1

)a 연결 목록에 x

2

로 액세스 b 줄서기x 잠금 해제는 cpu을 차지하지만 cpu는 여러분이 기다리고 있음을 발견하므로 cpub

3

)을 체인에서 벗어납니다. 찾을 시간 데이터.

4

)b아주 a그래서, b 줄을 서지 마세요. 이것은 나중에 spin 즉, 공회전입니다. cpu , 그런 다음 메모리 데이터 구조를 살펴보고 a가 잠금 해제되었는지 확인합니다.

5

)b원을 한 후 bspin, c 들어온 후 여러 번의 연속 连Spin 후에 OS WAITS6) 운영 체제가

CPU에서 CPU에서 B을 실행합니다.

래치 잠금 기능:

  • 1.대기열 없음

  • 2.spin

  • 3.os 대기

  • 4.cpubusy

뮤텍스:

메모리 구조 매우 작음 데이터베이스는 운영 체제에서 적용되며 버퍼 풀을 차지하지 않습니다. 완전히 배타적입니다.

뮤텍스 잠금 유지 프로세스:  

스레드는 mut 전 메모리 데이터 구조에 1

을 작성합니다. b ​​스레드는 메모리 데이터 구조에 숫자가 있음을 확인한 다음 spin

confirmlatch으로 이동합니다. 콘텐츠 유형:

(소스 코드의 명령문 173) 오류 로그에서 얻은

latch경합 프로세스

연결된 목록에 체인 보호 메커니즘 latch이 있습니다. 작은 메모리 이때 읽을 수 있는 스레드 a가 올라와서 체인을 읽으면 관리가 r이 되어 데이터가 체인에서 발견되면 () read), 일단 발견되면 읽기 잠금을 해제하면 b가 나타나서 읽으려고 합니다. 이때 r처럼 읽기 잠금을 공유할 수 있습니다. c도 체인에 액세스하여 읽습니다. 체인에 있는 두 블록의 내용을 수정하려면 r, rw이 상호 배타적이므로 불가능합니다.

1 또는 활성 요청 종료 cpu

2, 빈 cpu 리소스 점유(빈 코드 조각 실행, loop, 이후 확인) ab가 사용되는지 잠시 확인하세요. (spin)을 완료하세요. 하지만 이 과정에서는 c이 대기 대기열에 있지 않기 때문에 다른 스레드가 나올 수 있습니다. 여러 번 실행하고 계속 이렇다면 sleep, quit cpu일 수도 ​​있습니다. 왜 점유되어 있는 걸까요? (운영 체제가 자신의 게으름을 눈치 채고 강제로 그를 끌어내십시오) 등 (그는 ab이 자원을 점유하고 있다는 것을 알고 있기 때문에 시간이 상대적으로 짧습니다. 즉, 체인을 통과하는 시간이 매우 짧습니다.)

latchcontention 현상:

1, latchcontention은 cpubusy

2, latch로 표시됩니다. contention 대기열이 없습니다. 잠시만 기다려주세요. 무작위로 돌아와서 살펴보세요

모니터링 지표

----------

SEMAPHORES

----------

OS 대기 배열 정보: 예약 횟수 2

OS WAIT ARRAY INFO: 신호 횟수 2

RW 공유 회전 0, 라운드 4, OS 대기 2

RW-excl 회전 0, 라운드 0, OS 대기 0

RW-sx 회전 0, 라운드 0, OS는 0을 기다립니다

대기당 스핀 라운드: 4.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx

rounds는 각 회전의 매개변수를 묻는 것을 의미합니다

os waits: sleep 횟수를 나타냅니다. 급격한 증가가 상대적으로 빠르면 latch 경합이 심각하다는 의미입니다.

latch경합이 발생하는 이유

1

메모리 접근이 너무 잦습니다(계속 찾아보세요)

2,

list

체인이 너무 깁니다(

10000

체인에 걸려있습니다) 빨리, 안길 확률은 너무 높음)그래서 가끔 instance 수를 늘리고 큰 pool

을 더 작은

pool으로 잘라 list을 만들기 위해 체인이 더 짧아집니다방법 latchcontention을 줄입니다:

latchcontention이 심각한 경우1.

Optimize

sql 메모리 읽기 횟수를 줄입니다

——

효과가 더 확실해집니다 2.인스턴스 수를 늘리세요

latch를 정확하게 찾고 해결하는 방법1.show 엔진 Innodb mutex

2. 확인 사항

latch 유형.

3. 위치 지정 sql

위 내용은 래치란 무엇입니까? 래치와 잠금의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.