본문 바로가기
반응형

DB11

mysql 잠금 - 락의 종류 락의 종류1. 글로벌 락-- 글로벌 락 획득Flush TABLES WITH READ LOCK;-- 락 반납UNLOCK UNLOCK TABLES;글로벌 락은 위 명령어를 통해 사용할 수 있다. MyIsam이나 MEMORY 스토리지 엔진에서는 select를 제외한 대부분의 DDL문장이나 DML 문장에 락을 건다.테이블 전체를 읽기 전용으로 만들며 주로 백업 시에 사용한다. InnoDB에서는 위 글로벌 락을 사용하지 않는다.백업락이라는 데이터베이스와 테이블 스키마,  사용자 정보에 대해서만 잠금 처리를 진행하는 락을 사용한다.트랜잭션을 통한 데이터의 일관성이 보장되기에 데이터 변경 관련 ddl에는 잠금 처리가 필요 없기 때문이다. 소스 서버 변경사항을 레플리카로 복제시, 글로벌 락은 ddl을 막아내지 못함소스.. 2025. 2. 9.
mysql 아키텍쳐[4] - DoubleWriteBuffer, 체인지 버퍼, 어댑티브 해시 인덱스 이번 챕터에서는 Double Write Buffer와 체인지 버퍼, 어댑티브 해시 인덱스에 대해 소개하겠다. 이 기능들은 하드웨어 성능 향상으로  최신버전에서 deprecate가 default 옵션으로 설정되고 있다.Double Write BufferDouble Write Buffer의 존재 목적은 리두로그로 복구하지 못하는 장애 상황을 복구 하는 목적에 있다.하드웨어 수준의 원자쓰기가 보장되지 않는 환경에서 비정상적 종료로 데이터 페이지의 일부만 기록되는 파셜 페이지 현상이 발생할 수 있다. 파셜 페이지 발생시 리두로그로는 복구가 불가할 수 있기에 Double Write Buffer를 사용한다. 이전 포스팅에서 더티페이지가 디스크에 반영되는 절차를 간략하게 설명했는데 좀 더 상세히 설명하면더티페이지가 .. 2025. 2. 7.
mysql 아키텍쳐[3] - 버퍼풀 자료 구조 버퍼풀 자료구조버퍼풀은 여러개의 데이터 페이지로 이루어져 있다.버퍼풀은 메모리 공간에 존재하기에 무한정 많은 데이터를 담고 있을 수 없다.사용하지 않는 데이터는 제거되야한다.버퍼풀에서 사용되는 자료구조를 살펴보자. LRU(Least Recently Used) 리스트 : 가장 오래동안 사용되지 않은 데이터 페이지 제거New 서브리스트- MRU(Most Recently Used) 알고리즘을 통해 가장 많이 읽힌 데이터들이 존재하는 공간- 버퍼풀에 데이터를 읽어들이면 해당 데이터는 리스트의 머리부분으로 이동한다.Old 서브리스트 - LRU 알고리즘이 사용되는 공간으로 오랫동안 읽히지 않는 데이터 관리- 오랫동안 사용되지 않은 데이터는 나이가 증가하고 꼬리 부분으로 이동된다.데이터를 디스크에서 처음 버퍼풀로 가.. 2025. 2. 7.
mysql 아키텍쳐[2] - 언두로그와 리두로그(읽기/쓰기 작업 성능 및 안정성의 핵심) 언두 로그  :  고립성과 MVCC의 핵심서로 다른 트랜잭션이 레코드를 변경하고 데이터를 읽었을 때, 두 트랜잭션의 작업은 서로 영향을 미치지 않기에 select를 했을 때 다른 트랜잭션이 변경한 내용은 나의 트랜잭션 내에서 보이지 않는다. 이는 실제 데이터 파일을 읽어들이는게 아니라 언두 로그의 데이터를 읽었기에 가능한 것이다. 트랜잭션이 시작되고 데이터를 변경하면 데이터 페이지에 변경사항을 기록하고 변경하지 않은 데이터는 언두로그에서 읽어 온다. 따라서 다른 트랜잭션이 데이터를 변경하더라도 읽어오는 공간이 언두로그이므로 영향을 미치지 않는 것이다.(고립성)또한 트랜잭션 수행 중 롤백을 하기 위해 트랜잭션 수행 이전 데이터를 읽어 오는 공간도 언두 로그이다. 언두 로그는 여러 버전의 데이터가 존재한다... 2025. 2. 7.
반응형