InnoDB 직렬 화 격 리 단계 구현 방법
이 노 DB 는 서열 화 된 실현 방식 에 대해 두 가지 방식 으로 이 뤄 진다.
첫 번 째,SELECT 문 구 는 명시 적 인 사무 블록 에 있 을 때 표 11-9 의 번호 가 1 인 경우 LOCK 를 가 합 니 다.S 자물쇠,표 11-6(기록 자물쇠 사무 자물쇠 호환성 표)에 따라 알 수 있 듯 이 LOCKS 자 물 쇠 는 자 물 쇠 를 거부 하기 때문에 직렬 화 격 리 단계 에서 동시 읽 기 동작 만 허용 되 고 동시 쓰기 가 금지 되 어 직렬 화 할 수 있 습 니 다.
해당 코드 는 다음 과 같 습 니 다.
ha_innobase::external_lock(...)
{...
if (lock_type != F_UNLCK) {
/* MySQL is setting a new table lock */
...
if (trx->isolation_level == TRX_ISO_SERIALIZABLE //
&& m_prebuilt->select_lock_type == LOCK_NONE
&& thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { //
/* To get serializable execution, we let InnoDB conceptually add 'LOCK IN SHARE MODE' to all SELECTs
which otherwise would have been consistent reads. An exception is consistent reads in the AUTOCOMMIT=1 mode:
we know that they are read-only transactions, and they can be serialized also if performed as consistent reads. */
m_prebuilt->select_lock_type = LOCK_S; // , 'LOCK IN SHARE MODE'
m_prebuilt->stored_select_lock_type = LOCK_S;
} // , ( )
...
} else {
TrxInInnoDB::end_stmt(trx);
DEBUG_SYNC_C("ha_innobase_end_statement");
}
...}
두 번 째,SELECT 문 구 는 명시 적 인 트 랜 잭 션 블록 에 없 으 면 최신 스냅 샷(트 랜 잭 션 이 시 작 될 때)을 가 져 와 데 이 터 를 읽 습 니 다.이때 스냅 샷 의 일치 성 을 바탕 으로 읽 을 때 자 물 쇠 를 추가 할 필요 가 없 기 때문에 자 물 쇠 를 추가 하 는 상황 은 표 11-9 의 번호 2 에 대응 하 는 상황 에 대응 된다. 표 11-9 직렬 화 격 리 단계 잠 금 상황
설명:
S0:
SELECT * FROM bluesea WHERE c1=2;
//홈 키 인덱스 로 WHERE 조건 만 들 기또한 FLUSH...WITH READ LOCK 문 구 는 직렬 화 격 리 단계 에서 도 잠 금 LOCK 을 읽 어야 합 니 다.S
코드 는 다음 과 같 습 니 다:
ha_innobase::store_lock(
...
/* Check for FLUSH TABLES ... WITH READ LOCK */
if (trx->isolation_level == TRX_ISO_SERIALIZABLE) {
m_prebuilt->select_lock_type = LOCK_S;
m_prebuilt->stored_select_lock_type = LOCK_S;
} else {
m_prebuilt->select_lock_type = LOCK_NONE;
m_prebuilt->stored_select_lock_type = LOCK_NONE;
}
...
}
직렬 화 와 관련 된 것 은innobase_query_caching_of_table_permitted()
함수 도 있 고 직렬 화 격 리 단 계 는 버퍼 조 회 를 허용 하지 않 습 니 다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기술 공유 | InnoDB Handlerread_* 변수 해석Innodb 인터페이스 변경:hainnobase::index_read 설명서: The number of requests to read a row based on a key.If this value is high, i...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.