MySQL 로 그 를 취소 하고 로 그 를 다시 만 듭 니 다(Undo Log 와 Redo Log).

Undo Log
데이터베이스 트 랜 잭 션 이 시작 되 기 전에 수정 할 기록 을 Undo 로그 에 저장 합 니 다.트 랜 잭 션 이 스크롤 백 되 거나 데이터베이스 가 무 너 질 때 Undo 로 그 를 이용 하여 제출 되 지 않 은 트 랜 잭 션 이 데이터베이스 에 미 치 는 영향 을 취소 할 수 있 습 니 다.
Undo Log 생 성 및 폐기
Undo Log 는 트 랜 잭 션 이 시작 되 기 전에 생 성 됩 니 다.트 랜 잭 션 을 제출 할 때 undo log 를 즉시 삭제 하지 않 습 니 다.innodb 는 이 트 랜 잭 션 에 대응 하 는 undo log 를 삭제 목록 에 넣 고 배경 스 레 드 Purge thread 를 통 해 회수 처리 합 니 다.
Undo Log 는 논리 로그 로 변화 과정 을 기록 합 니 다.예 를 들 어 delete 를 실행 하면 undolog 는 insert 를 기록 합 니 다.update 를 실행 하면 undolog 는 상 반 된 update 를 기록 합 니 다.
Undo 로그 저장 소
Undo log 는 세그먼트 방식 으로 관리 하고 기록 합 니 다.innodb 데이터 파일 에는 rollback segment 스크롤 백 세그먼트 가 포함 되 어 있 으 며,내부 에는 1024 개의 undo log segment 가 포함 되 어 있 습 니 다.다음 매개 변 수 를 통 해 Undo log 저장 소 를 제어 할 수 있 습 니 다.

show variables like '%innodb_undo%'; 
Undo Log 역할
사무의 원자 성 을 실현 하 다
언 도 로 그 는 사무의 원자 성 을 실현 하기 위 한 결과 물이 다.트 랜 잭 션 처리 과정 에서 오류 가 발생 했 거나 사용자 가 ROLLBACK 문 구 를 실 행 했 을 경우 MySQL 은 Undo Log 의 백업 을 이용 하여 트 랜 잭 션 시작 전 상태 로 데 이 터 를 복원 할 수 있 습 니 다.
다 중 버 전 병행 제어 실현(MVCC)
Undo Log 는 MySQL InnoDB 메모리 엔진 에서 다 중 버 전 병행 제 어 를 실현 하 는 데 사 용 됩 니 다.트 랜 잭 션 이 제출 되 지 않 기 전에 Undo Log 는 제출 되 지 않 은 이전 버 전 데 이 터 를 저 장 했 습 니 다.Undo Log 의 데 이 터 는 데이터 이전 버 전 스냅 샷 으로 다른 동시 다발 트 랜 잭 션 에서 스냅 샷 으로 읽 을 수 있 습 니 다.
트 랜 잭 션 A 는 수 동 으로 트 랜 잭 션 을 열 고 업데이트 작업 을 수행 합 니 다.먼저 업 데 이 트 된 데 이 터 를 Undo Buffer 에 백업 합 니 다.
트 랜 잭 션 B 수 동 으로 트 랜 잭 션 을 열 고 조회 작업 을 수행 하면 Undo 로그 데 이 터 를 읽 고 되 돌아 와 스냅 샷 으로 읽 습 니 다.
Redo Log
트 랜 잭 션 에서 수 정 된 모든 데 이 터 를 말 합 니 다.최신 데 이 터 를 백업 하여 저장 하 는 위치(Redo Log)를 리 셋 로그 라 고 합 니 다.
Redo Log 생 성 및 방출
트 랜 잭 션 이 실 행 됨 에 따라 Redo Log 가 생 성 되 며,트 랜 잭 션 을 제출 할 때 Redo Log 를 Log Buffer 에 기록 합 니 다.트 랜 잭 션 이 제출 되면 바로 디스크 파일 을 기록 하 는 것 이 아 닙 니 다.
디스크 에 사무 작업 의 더러 운 페이지 를 기록 한 후에 Redo Log 의 사명 도 완 료 됩 니 다.Redo Log 가 사용 하 는 공간 은 다시 사용 할 수 있 습 니 다(덮어 쓰기).
Redo Log 작업 원리
Redo Log 는 사무의 지속 성 을 실현 하기 위 한 결과 물이 다.고장 이 발생 하 는 시점 을 방지 하기 위해 더러 운 페이지 가 표 에 기록 되 지 않 은 ibd 파일 이 있 습 니 다.MySQL 서 비 스 를 다시 시작 할 때 Redo Log 에 따라 재 작업 을 하여 디스크 에 들 어가 지 않 은 데 이 터 를 영구적 으로 유지 합 니 다.
Redo Log 기록 메커니즘
Redo Log 파일 내용 은 파일 을 순서대로 반복 해서 쓰 고,채 우 면 첫 번 째 파일 로 거 슬러 올 라 가 덮어 쓰기

write pos 는 현재 기 록 된 위치 입 니 다.쓰 면서 이동 하고 마지막 파일 의 끝 에 쓴 후에 0 번 파일 로 돌아 갑 니 다.
checkpoint 는 현재 지 울 위치 이자 뒤로 이동 하고 순환 합 니 다.기록 을 지우 기 전에 기록 을 데이터 파일 로 업데이트 해 야 합 니 다.
write pos 와 checkpoint 사이 에 비어 있 는 부분 은 새로운 조작 을 기록 할 수 있 습 니 다.write pos 가 checkpoint 를 따라 잡 으 면 가득 쓰 여 있 음 을 표시 합 니 다.이 럴 때 새로운 업 데 이 트 를 실행 할 수 없습니다.멈 추고 기록 을 지우 고 checkpoint 를 추진 해 야 합 니 다.
Redo Log 관련 설정 매개 변수
모든 InnoDB 저장 엔진 에는 로그 파일 그룹(group)을 다시 만 드 는 것 이 최소 1 개 있 고,파일 그룹 마다 로그 파일 을 다시 만 드 는 것 이 최소 2 개 있 습 니 다.기본 값 은 ib 입 니 다.logfile 0 과 iblogfile1。다음 매개 변 수 를 통 해 Redo Log 저장 소 를 제어 할 수 있 습 니 다.

show variables like '%innodb_log%';
Redo Buffer 가 Redo Log 로 지속 되 는 전략,Innodb 를 통 해flush_log_at_trx_commt 설정
0:1 초 에 Redo buffer->OS cache->flush cache to disk 를 제출 하면 1 초 동안 트 랜 잭 션 데 이 터 를 잃 어 버 릴 수 있 습 니 다.백 스테이지 마스터 스 레 드 에서 1 초 간격 으로 작업 을 수행 합 니 다.
1(기본 값):Redo Buffer->OS cache->flush cache to disk 를 실행 하 는 트 랜 잭 션 을 제출 할 때마다 가장 안전 하고 성능 이 가장 나 쁜 방식 입 니 다.
2:매번 업무 제출 시 Redo Buffer->OS cache 를 실행 한 다음 배경 Master 스 레 드 에서 OS cache->flush cache to disk 를 1 초 간격 으로 실행 합 니 다.
일반적으로 추출 값 2 를 선택 하 는 것 을 권장 합 니 다.MySQL 이 데 이 터 를 끊 어서 손실 이 없 기 때문에 서버 전체 가 끊 어야 1 초의 트 랜 잭 션 제출 데 이 터 를 손실 할 수 있 습 니 다.

이상 은 MySQL 취소 로그 와 재 작성 로그(Undo Log 와 Redo Log)에 관 한 자세 한 내용 입 니 다.MySQL 취소 로그 와 재 작성 로그(Undo Log 와 Redo Log)에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기