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

[6-3장] innodb_read_ahead_threshold 옵션은 왜 데이터 웨어하우스용으로 MySQL을 사용할 경우 낮은 값으로 설정하는 것이 좋을까? #17

Open
toneyparky opened this issue Dec 1, 2020 · 3 comments
Assignees
Labels
Stuck 해결하지 못한 이슈

Comments

@toneyparky
Copy link
Contributor

toneyparky commented Dec 1, 2020

p.331 MySQL 5.1의 InnoDB 플러그인 버전부터는 언제 리드 어헤드를 시작할지 시스템 변수를 통해 변경할 수 있다. 그 시스템 변수 이름이 innodb_read_ahead_threshold인데 일반적으로 디폴트 설정으로도 충분하지만 데이터 웨어하우스용으로 MySQL을 사용한다면 이 옵션을 더 낮은 값으로 설정해서 더 자주 리드 어헤드가 시작되도록 유도하는 것도 좋은 방법이다.

질문 : innodb_read_ahead_threshold의 디폴트 설정이 무엇이고 왜 데이터 웨어하우스용으로는 디폴트보다 낮은 값으로 설정하는 것이 좋은가요?

@toneyparky
Copy link
Contributor Author

toneyparky commented Dec 1, 2020

우선 innodb_read_ahead_threshold의 디폴트 설정은 56이라고 합니다. 즉 디폴트 설정에 따를 경우에, 순차적으로 읽어지는 page의 개수가 56개 이상이라면 비동기적으로 리드 어헤드를 시작하여 백그라운드 스레드에 그 페이지 수 만큼 페이지를 미리 로딩합니다. 이처럼 대량의 데이터 조회가 발생하는 경우에는 리드 어헤드를 활용하면 효과적으로 조회를 할 수 있습니다.
참고


그리고 데이터 웨어하우스에 대해서 알아보도록 하겠습니다.

데이터 웨어하우스란 : 정보에 입각한 의사 결정을 내릴 수 있도록 분석 가능한 정보의 중앙 저장소. DW라고 불린다. 데이터는 트랜잭션 시스템, RDMS 및 기타 소스로부터 보통은 정기적으로 데이터 웨어하우스로 들어간다. 그리고 DBA, Data Scientist들은 비즈니스 인텔리전스 도구, SQL 클라이언트 및 기타 응용 분석 프로그램을 통해 데이터에 액세스하게 된다.
정리하자면 DW는 기존 정보를 활용해 더 나은 정보를 제공하고, 데이터의 품질을 향상시키며, 조직의 변화를 지원하고 비용과 자원관리의 효율성을 향상시키는 것이 목적이다. 출처

데이터 웨어하우스는 서비스에서 산출되는 데이터를 분석할 수 있도록 체계적으로 모아두는 곳을 말합니다. 이와 비슷한 개념으로는 데이터 레이크(data lake)가 있습니다. 이또한 데이터를 분석할 수 있도록 모아두는 곳이지만 비정형적으로 모아둔다는 점에서 차이가 있습니다. 비정형의 의미는 NoSQL을 활용하여 원시 상태의 데이터를 쌓아두는 것을 예로 들 수 있습니다. 참고


그렇다면 왜 데이터 웨어하우스용으로 사용할 경우 이 옵션을 디폴트보다 낮은 값으로 설정하는 것이 좋다는 것일까요? 데이터 웨어하우스는 일반적인 어플리케이션에서 RDBS를 사용할 때 보다 더 많은 양의 데이터를 조회해야하는 경우가 빈번합니다. 그렇기에 이를 대비하기위해 디폴트 값인 56보다 낮은 값으로 설정하여 적은 페이지를 빈번하게 조회하는 데이터 요청을 효과적으로 수행할 수 있도록 유도하려는 목적으로 보여집니다.

아무래도 설정값을 더 낮게 둘 경우 리드 어헤드가 더 빈번하게 발생할 것입니다. 그리고 데이터 웨어하우스의 특성상 데이터를 다량으로 조회할 가능성이 높기에 리드 어헤드를 이용하여 성능을 향상시킬 가능성을 높히는 것이 아닐까 싶습니다.

@toneyparky toneyparky changed the title [6-3장] innodb_read_ahead_threshold 옵션은 왜 데이터 에어하우스 용으로 MySQL을 사용할 경우 낮은 값으로 설정하는 것이 좋을까? [6-3장] innodb_read_ahead_threshold 옵션은 왜 데이터 웨어하우스용으로 MySQL을 사용할 경우 낮은 값으로 설정하는 것이 좋을까? Dec 1, 2020
@toneyparky toneyparky added this to the Real MySQL 6.3 - 6.4 milestone Dec 6, 2020
@jjj0611
Copy link
Contributor

jjj0611 commented Dec 6, 2020

간단 요약

innodb_read_ahead_threshold의 역할: 읽을 데이터가 많을 때 백그라운드에서 미리 데이터를 읽어서 준비 시켜 놓는 것이 read_ahead. 이 threshold는 그 read ahead를 언제 작동시킬 것인가에 대한 임계점.

즉, 이 값이 낮으면 read ahead를 더 빨리 시작하게 된다.

데이터 웨어하우스로 사용할 경우 대량의 데이터를 읽어올 가능성이 많고, 그렇기 때문에 read ahead를 시작하는 임계점을 낮춰서 빠르게 read ahead를 시작하는 것이 유리하기 때문에 낮은 값으로 설정하는 것이 좋음!

@jjj0611 jjj0611 assigned jjj0611 and begaonnuri and unassigned jjj0611 Dec 7, 2020
@jjj0611
Copy link
Contributor

jjj0611 commented Dec 7, 2020

윤서가 SRE가면 1로 했을 때 무슨 문제가 발생할지 알아보자!

@toneyparky toneyparky added the Stuck 해결하지 못한 이슈 label Dec 7, 2020
@lxxjn0 lxxjn0 removed this from the Real MySQL 6.3 - 6.4 milestone Jan 31, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Stuck 해결하지 못한 이슈
Projects
None yet
Development

No branches or pull requests

4 participants