16강 복습가치존재
버퍼풀에 데이터가 있는지 확인한다. 있다면 캐시 히트! 없으면 디스크 IO
3가지 계층 구조
- 연결 계층
- SQL 계층
- 스토리지 엔진 계층
로그 버퍼
FLUSH
ACID달달 외우기보다는 저는 이런식으로 설명드릴게요! 하고 주제를 설명쉽게하는게 진짜 아는것이다. ![[[4.2] 스퀀스 다이어그램.png]] — 테이블 락 : 테이블 전체에 락을 건다. — 갭락 : 인덱스에 범위 락을 건다. — Exclusive Lock : 데이터 수정 락 — 읽기 락 : 명시적으로 걸어야 쓰임.
MVCC: 락의 성능 저하 방지 위함. 읽기 작업에 락을 안건다. 스냅샷으로 지원. 다른 트잭이 수정중이라더 그 트잭은 스냅샷읽는다.
버퍼풀은 LRU 씀. 일부 튜닝해서 쓴다.
어뎁티브 해시 인덱스, change buffer, 예측 읽기 → MySQL 최적화하는 내부 기법
-- LRU : 가장 최근에 사용되지 않은 데이터를 우선적으로 제거하면서 메모리 공간을 확보
-- 1. 풀 테이블 스캔
-- 2. 예측 읽기
-- LRU를 일부 개선
-- Minpoint : 새 페이지를 LRU 리스트의 중간 지점에 삽입 , Old 영역과 New 영역
-- 어댑티브 해시 인덱스 : 자주 사용되는 데이터 접근을 빠르게 처리
-- Change Buffer :
-- 예측 읽기 : 데이터를 미리 읽어온다. (Linear Read-Ahead) (Random Read-Ahead)
-- 버퍼 풀 히트율 확인하기 (95% 이상이면 좋음)
SELECT
'버퍼 풀 성능 분석' as 분석항목,
bp_read_requests.VARIABLE_VALUE as 전체요청수,
bp_reads.VARIABLE_VALUE as 디스크읽기수,
ROUND(
(1 - bp_reads.VARIABLE_VALUE / bp_read_requests.VARIABLE_VALUE) * 100, 2
) as 히트율_퍼센트,
CASE
WHEN (1 - bp_reads.VARIABLE_VALUE / bp_read_requests.VARIABLE_VALUE) * 100 >= 95
THEN '👍 매우 좋음'
WHEN (1 - bp_reads.VARIABLE_VALUE / bp_read_requests.VARIABLE_VALUE) * 100 >= 90
THEN '😊 양호'
WHEN (1 - bp_reads.VARIABLE_VALUE / bp_read_requests.VARIABLE_VALUE) * 100 >= 80
THEN '😐 보통'
ELSE '😱 개선 필요'
END as 상태
FROM
(SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads') bp_reads,
(SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests') bp_read_requests;
-- 테이블 락 : 테이블 전체에 락을 건다.
-- 갭락 : 인덱스에 범위 락을 건다.
-- Exclusive Lock : 데이터 수정 락
-- 읽기 락 :