『 '데이널'의 컨텐츠에 포함된 정보는? 』
이행 테스트를 마치고 결과를 분석하면서 한 가지 놀라웠던 점이 있습니다. 몇 개의 테이블이 모든 시간을 잡아먹고 있었다는 사실이었죠.
이 글에서는 이행 시간 단축을 위한 확실히 써 먹을 수 있는 방법에 대해 이야기 해 보겠습니다.
파레토 법칙
결론부터 말하면 이행 시간을 단축을 위해서는 주요 테이블의 공략해야 합니다. “소수의 원인이 대부분의 결과를 만든다"는 말, 한 번쯤 들어보셨죠? 바로 파레토 법칙, 혹은 80:20 법칙인데요.
이 법칙은 실생활에서도 자주 목격이 되는데요. 예를 들어, 부자 20%가 80%의 부를 소유하고 있는 현상 같은 것들이죠. 사실 그 현상에 의미가 있다기보다는 개선 방법이 더 중요합니다.
20%를 개선하면 80%의 효과를 낼 수 있다는 것이죠. 그래서 우리는 20%에 해당하는 주요 테이블을 분석해 보기로 했죠.
그렇다면 이행 결과도 파레토 법칙이 적용됐을까요?
실제 이행 결과는?
결과를 확인해 보니, 상위 6개 테이블이 90%의 이행 시간을 점유하고 있더군요. 데이터 이행도 파레토 법칙의 예외는 아니군요. 집계한 표는 이렇습니다.
구분 | 전체 | Big 7개 테이블 | 비율 |
건수 | 110 | 7 | 6% |
시간(초) | 25,757 | 23,246 | 90% |
그렇다면 나머지 테이블에서 미미한 개선 보다는 6개 테이블에 집중하는 것이 더 나은 선택이라 할 수 있겠습니다. 만약 7개 태이블에서 시간 단축을 할 수 있다면 개선된 효과는 클 것으로 예상할 수 있습니다. 아래는 7개 테이블과 나머지 전체의 소요시간 그래프입니다.
이행 시간 단축 방법은?
그런데 어떻게 개선할 수 있죠?
병렬 또는 배치시간 조정 두가지로 생각해 볼 수 있습니다.
1. 병렬처리
테이블의 row건수에 비례해서 시간이 오래 걸리는 현상을 확인했습니다. 그리고 더 데이터를 분석하던 중 row건수가 3,000만 건을 넘어가는 순간 그 현상은 가중된다는 것을 알았죠.
이럴 경우는 건수를 분할해서 병렬로 로드하는 방법을 사용할 수 있습니다. 건수가 3천만 건이 넘지 않게 여러 개로 나누는 것이죠.(참고로 데이터베이스는 MySQL입니다.)
2. 배치 분산처리
두 번째 방법은 시스템 리소스를 많이 사용하는 Big 2 테이블에 대해서는 분리하는 방법입니다. 시스템에 한계가 있기 때문에 하나의 프로세스가 자원을 모두 사용하면 다른 프로세스는 대기할 수밖에 없습니다.
이 부분을 스케줄러에서 조정하는 기술을 배치 최적화라고 합니다. 이행 시간 동안 시스템 사용량을 보고 판단하여 조정할 수 있습니다. AWS RDS였기 때문에 CloudWatch나 DataDog으로 활용할 수 있았습니다.
테이블명 | 4시 | 5시 | 6시 | ||||||||||
50 ~60 | 0 ~10 | 10 ~20 | 20 ~30 | 30 ~40 | 40 ~50 | 50 ~60 | 0 ~10 | 10 ~20 | 20 ~30 | 30 ~40 | 40 ~50 | 50 ~60 | |
*픔이력 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||
*약 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
*인 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
*인트 | 1 | 1 | 1 | 1 | 1 | ||||||||
*약관계 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
*드이력 | 1 | 1 | 1 | 1 | |||||||||
*들상품 | 1 | 1 | 1 | ||||||||||
*객 | 1 | 1 | 1 | 1 | |||||||||
*정보 | 1 | 1 | 1 | 1 | |||||||||
프로그램 동시 실행 수 | 3 | 6 | 7 | 8 | 7 | 7 | 6 | 4 | 4 | 2 | 1 | 1 | 0 |
마치며
여러분은 파레토 법칙처럼 중요한 것 몇 가지를 해결하면 많은 일들이 해결되는 경험을 해 보신 적 있나요? 개인적으로 세상의 많은 일들이 그렇다고 생각하는데요. ‘원씽’이라는 책의 단 한 가지도 어떻게 보면 중요한 것을 우선 해결하라는 메시지가 아닐까요.
MySQL 성능 2배 향상! 데이터 타입 최적화 효과
'데이터베이스' 카테고리의 다른 글
MySQL 파티션으로 서버 부하를 줄이고, 쿼리 속도 높이기! (2) | 2024.10.30 |
---|---|
MySQL INTO OUTFILE 활용한 백업 방법 (0) | 2024.10.22 |
데이터베이스와 스키마, 똑같은 말이라고요? NO! (1) | 2024.09.25 |
데이터 이행 계획, 체크리스트 꼭 준비해야 하는 이유? (2) | 2024.09.03 |
MySQL 내장 함수 99개 총정리 (0) | 2024.08.28 |