InnoDB flush method
·
MySQL
mysql에서 데이터 flush를 하는 기본 순서는 1. 버퍼 풀 or log buffer에 있는 내용을 flush하면 2. mySQL 안의 버퍼에 있던 내용을 메모리 상의 OS cache로 이동(write) 3. OS cache 안의 내용을 디스크상의 데이터 파일로 이동(flush) 인데, innodb storage engine에서는 innodb_flush_method 변수를 통해 flush 방법을 설정할 수 있다. fsync: default로 설정되어 있는 방법. 버퍼 풀과 로그 버퍼 모두 OS cache를 이용하고, fsync()를 통해 OS cache에서 디스크로 데이터를 이동한다. O_DSYNC: 로그 버퍼에서 write를 할 때(2번 단계) 자동적으로 데이터 파일에 fsync()까지 한 번에 ..
[InnoDB] Redo Log와 checkpoint age
·
MySQL
InnoDB의 redo log는 여러 파일로 구성되어 있지만, 내부적으로 이를 모아서 하나의 연속된 공간으로 사용한다. InnoDB Redo Log size = innodb_log_file_size * innodb_log_files_in_group * mysql 5.7 ver에서는 redo log를 최대 2TB까지 설정할 수 있다. 1) innodb_log_file_size - 각 로그파일의 size를 결정하는 시스템 변수 버퍼 풀의 크기가 아무리 크더라도 redo log의 크기가 작으면 자주 checkpoint가 발생하기 때문에 버퍼 풀을 제대로 이용할 수 없게 된다. 따라서 버퍼 풀의 크기를 변경하는 경우, redo log file의 크기도 함께 변경해야 한다. 일반적으로 innodb_buffer_p..
[InnoDB] In-memory buffer의 종류
·
MySQL
출처:mySQL 8.0 document https://dev.mysql.com/doc/refman/8.0/en/innodb-in-memory-structures.html 1) Buffer Pool - 데이터 파일과 인덱스 정보 캐싱 + write buffering => random I/O 감소 mySQL innoDB 스토리지 엔진의 버퍼 풀 크기를 결정하는 변수는 innodb_buffer_pool_size로, 기본 128MB이다. 크기를 크게 할수록 disk 접근 횟수 줄어들기 때문에 성능이 향상되나, 서버 용량에 비해 너무 큰 값을 설정하면 page swap이 자주 발생하여 성능이 저하될 수 있음 DB를 운영할 때는 최적의 상태로 리소스를 쥐어짜내면서 가장 효율적으로 데이터를 사용해야 한다. 현재는 S..
05. InnoDB 트랜잭션 처리 및 로그(Undo/Redo) 관리
·
MySQL
우선 Undo영역에 대한 이해부터 하고 넘어가자. MVCC(Multiversion Concurrency Control) 란? 잠금 없이 일관된 읽기를 제공하는 것으로, 크게 두 가지 접근법이 있다. 1. Perssimistic Lock : DB에 다중 버전의 레코드를 저장해 두고, 더 이상 필요하지 않을 때 모아둔 레코드를 버리는 방식 - PostgreSQL, SQL server 등에서 사용 2. Undo : 최신 버전의 데이터만 DB 안에 저장해 두고, Undo를 이용하여 이전 버전의 데이터를 재구성하는 방식 - MySQL InnoDB, Oracle 등에서 사용 어떤 레코드에 대해 UPDATE 쿼리 등의 write가 발생하면 Undo에는 이전 이미지를 넣고, 버퍼 풀에는 새로 write한 내용을 가지고..
erin.yoon
'innodb' 태그의 글 목록