Mysql 더러 운 페이지 flush 및 수축 표 공간 원리 분석
WAL 메커니즘 으로 인해 InnoDB 는 문 구 를 업데이트 할 때 로 그 를 쓰 는 디스크 작업 을 만 들 었 습 니 다.바로 redo log 입 니 다.메모리 에 redo log 를 쓴 후에 클 라 이언 트 에 게 되 돌아 갑 니 다.즉,업데이트 에 성 공 했 습 니 다.
메모리 에 있 는 데 이 터 를 디스크 에 기록 하 는 과정 에서 용 어 는 flush 입 니 다.flush 전에 실제 데이터 와 데이터 베이스 에 있 는 데 이 터 는 일치 하지 않 습 니 다.redo log 를 바탕 으로 아직 기록 되 지 않 았 기 때 문 입 니 다.데이터 베 이 스 는 오래된 것 입 니 다.메모리 데이터 페이지 와 디스크 데이터 페이지 의 내용 이 다 를 때 이 메모리 페이지 를 더러 운 페이지 라 고 부 르 고 메모리 가 기록 되면 일치 합 니 다.깨끗 한 페이지 라 고 부 릅 니 다.
my sql 이 가끔 운행 속도 가 느 리 면 더러 운 페이지 를 닦 고 있 을 수 있 습 니 다.데이터베이스 flush 를 유발 하 는 과정
4.567917.사용 하고 더러 운 페이지(탈락 할 때 디스크 에 기록 해 야 함)그래서 우 리 는 때때로 데이터 베 이 스 를 사용 하면 데이터 뱅 크 의 성능 이 갑자기 떨 어 지 는 것 을 발견 할 수 있 는데,아마도 더러 운 페이지 를 처리 하 는 것 일 것 이다.
더러 운 페이지 제어 전략
데이터 삭제 프로 세 스
R4 를 삭제 하려 면 InnoDB 엔진 은 R4 라 는 기록 만 삭제 로 표시 하고,이후 ID 300~600 사이 의 기록 을 하나 더 섞 으 면 이 위 치 를 재 활용 하지만 디스크 파일 의 크기 는 줄 어 들 지 않 는 다.
데이터 페이지 의 모든 기록 을 삭제 하면 이 데이터 페이지 는 재 활용 할 수 있다.
메모:데이터 페이지 의 재 활용 과 기록 의 재 활용 은 다 릅 니 다.
만약 데이터 가 색인 순서에 따라 삽입 된다 면 색인 은 치밀 하지만 무 작위 로 삽입 된다 면 색인 의 데이터 페이지 를 나 눌 수 있다.
만약 pagea 가 가득 찼 다 면,한 줄 의 데 이 터 를 삽입 하면 어떻게 됩 니까?A 가 가득 차 서 하나의 id 가 550 인 데 이 터 를 삽입 할 때 새로운 페이지 pageB 를 신청 하여 데 이 터 를 저장 합 니 다.분 단 이 완료 되면 pageA 의 끝 에 구멍 이 남 습 니 다.
색인 에 있 는 값 을 업데이트 하 는 것 도 오래된 값 을 삭제 하고 새 값 을 삽입 하면 구멍 이 생 길 수 있 습 니 다.
공간 을 수축 하 다
표 A 와 같은 구조의 표 B 를 새로 만 들 고 메 인 키 ID 가 증가 하 는 순서에 따라 데 이 터 를 한 줄 한 줄 씩 A 에서 읽 어서 표 B 에 삽입 합 니 다.표 B 에 구멍 이 없고 데이터 페이지 의 이 용 률 도 높 습 니 다.만약 에 우리 가 표 B 를 임시 표 로 하면 데 이 터 를 표 A 에서 B 로 가 져 오 는 작업 이 완 료 된 후에 B 로 A 를 교체 하면 효과 적 으로 A 를 수축 하 는 역할 을 합 니 다.
전체 DDL 과정 에서 표 A 는 업데이트 할 수 없 기 때문에 이 DDL 은 온라인 이 아 닙 니 다.5.6 이후 버 전에 서 절차 가 변경 되 었 습 니 다.
임시 파일 을 만 들 고 A 의 모든 데이터 페이지 를 검색 합 니 다.
데이터 페이지 의 A 기록 으로 B+트 리 를 생 성하 여 임시 파일 에 저장 합 니 다.
A 에 대한 모든 작업 을 로그 파일 에 기록 합 니 다.
임시 파일 생 성 후 로그 파일 작업 을 임시 파일 에 적용 하여 논리 적 데이터 에서 표 A 와 같은 데이터 파일 을 얻 습 니 다.
표 A 의 데이터 파일 을 임시 파일 로 대체 합 니 다.
도시
그림 3 과정 과 다른 점 은 로그 파일 기록 과 재생 작업 이라는 기능 이 존재 하기 때문에 이 방안 은 표를 재 구축 하 는 과정 에서 표 A 를 추가 삭제 하고 수정 할 수 있 습 니 다.
alter table A engine=InnoDB 명령 을 사용 하여 표를 다시 만 듭 니 다.MySQL 5.5 버 전에 서 이 명령 의 실행 절 차 는 앞에서 설명 한 것 과 차이 가 많 지 않 습 니 다.이 임시 표 B 는 당신 이 직접 만 들 필요 가 없습니다.MySQL 은 자동 으로 데 이 터 를 저장 하고 표 이름 을 교환 하 며 오래된 표를 삭제 하 는 작업 을 수행 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 my sql 에 이모 티 콘 저장my sql 에 emoji 표정 을 저장 하려 면 utf8mb 4 문자 집합 을 사용 해 야 합 니 다. 이것 은 4 바이트 저장 입 니 다. 최소 지원 버 전 은 5.5.3 + 입 니 다. 그렇지 않 으 면 새로운...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.