Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5-1장] 바이너리 로그 버퍼와 InnoDB 로그 버퍼가 입출력 작업에 끼치는 영향 #27

Closed
jnsorn opened this issue Dec 12, 2020 · 2 comments
Assignees

Comments

@jnsorn
Copy link
Member

jnsorn commented Dec 12, 2020

p.205 데이터베이스 대부분의 작업은 이러한 작은 데이터를 빈번히 읽고 쓰기 때문에 MySQL 서버에는 그룹 커밋이나 바이너리 로그 버퍼 또는 InnoDB 로그 버퍼 등이 기능이 내장된 것이다.

질문 : 바이너리 로그 버퍼InnoDB 로그 버퍼로 읽고 쓰는 작업의 빈도를 어떻게 줄일 수 있는지 궁금해요~~

@jnsorn jnsorn changed the title [5-1장] 간단한 제목 [5-1장] 바이너리 로그 버퍼와 InnoDB 로그 버퍼가 입출력 작업에 끼치는 영향 Dec 12, 2020
@giantim
Copy link
Contributor

giantim commented Dec 13, 2020

InnoDB 로그 버퍼에 대해서 참고하면 좋은 글인거 같아서 남겨요!

InnoDB의 로그 버퍼는 JPA의 영속성 컨텍스트에서 쓰기 지연 저장소와 비슷한 역할로써 디스크와의 I/O를 줄인다고 이해하면 되지 않을까요?

@lxxjn0
Copy link
Member

lxxjn0 commented Dec 13, 2020

MySQL Redo Log 란

라빈이 너무 간략하게 잘 설명해줘서 저는 또 참고하면 좋을 만한 링크를 추가해둘게요.

InnoDB log buffer를 검색하면 대부분 redo log buffer가 나오더라고요. 그래서 그냥 자주 등장하니까 간단하게 설명드리면, 라빈이 설명한 것 처럼 DB에서는 버퍼 풀을 두고 DB에 작업이 생기면 메모리에 위치한 버퍼 풀에 저장해두다가 한 번에 DB로 flush 한다고 해요.

그런데 혹시나 버퍼 풀에 저장해야 할 데이터가 들어있는데 시스템이 다운되면? 해당 데이터가 다 날라가게 됩니다. 이러한 위험성을 대비하기 위한 것이 redo log입니다. 하나의 트랜잭션에서 작업한 내역을 로그로 저장해두고 추후 데이터가 날라가더라도 이 로그를 보고 복구가 가능하다고 하네요. 그렇다면 이 로그를 트랜잭션이 커밋될 때마다 DB에 저장하면 버퍼 풀을 사용하는 의미가 없겠죠?(물론 데이터의 크기는 차이가 있을 수는 있어요..ㅎㅎ) 그래서 이 redo log를 저장하는 풀이 있는데 이게 redo log buffer에요.

redo log도 몇 가지 설정을 해줄 수 있는데, 해당 링크에서 말하기에는 innodb_flush_log_at_trx_commit을 기본값으로 1로 설정한다고 해요. 해당 설증은 언제 메모리(redo log buffer)에서 DB로 기록하는 지를 설정하는 것이라고 해요. 그리고 설정 값 1은 트랜잭션 커밋이 발생하면 로그를 DB에 기록한다고 하네요.

0번과 2번은 좀 더 I/O를 줄이는 방법인데 시스템에 따라 원활하게 동작하지 않는 경우도 많아서 주로 1로 쓰는 것 같아요.

간단하게 이정도에 대해서만 알아두면 좋을 것 같아요.

@lxxjn0 lxxjn0 added this to the Real MySQL 5.1 - 5.4 milestone Dec 13, 2020
@lxxjn0 lxxjn0 self-assigned this Dec 14, 2020
@lxxjn0 lxxjn0 closed this as completed Dec 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants