본문 바로가기
데이터베이스

데이터 이행 시간 단축, 단 6%가 시스템 전체를 좌우한다?

by 데이널 2024. 9. 30.

'데이널'의 컨텐츠에 포함된 정보는?

     
    이행 테스트를 마치고 결과를 분석하면서 한 가지 놀라웠던 점이 있습니다. 몇 개의 테이블이 모든 시간을 잡아먹고 있었다는 사실이었죠. 
     
    이 글에서는 이행 시간 단축을 위한 확실히 써 먹을 수 있는 방법에 대해 이야기 해 보겠습니다. 
     

     

    파레토 법칙

    결론부터 말하면 이행 시간을 단축을 위해서는 주요 테이블의 공략해야 합니다. “소수의 원인이 대부분의 결과를 만든다"는 말, 한 번쯤 들어보셨죠? 바로 파레토 법칙, 혹은 80:20 법칙인데요.

    이 법칙은 실생활에서도 자주 목격이 되는데요. 예를 들어, 부자 20%가 80%의 부를 소유하고 있는 현상 같은 것들이죠. 사실 그 현상에 의미가 있다기보다는 개선 방법이 더 중요합니다.
     
    20%를 개선하면 80%의 효과를 낼 수 있다는 것이죠. 그래서 우리는 20%에 해당하는 주요 테이블을 분석해 보기로 했죠.

    그렇다면 이행 결과도 파레토 법칙이 적용됐을까요?


    실제 이행 결과는?

    결과를 확인해 보니, 상위 6개 테이블이 90%의 이행 시간을 점유하고 있더군요. 데이터 이행도 파레토 법칙의 예외는 아니군요. 집계한 표는 이렇습니다.

    구분전체Big 7개 테이블비율
    건수11076%
    시간(초)25,75723,24690%


    그렇다면 나머지 테이블에서 미미한 개선 보다는 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
    *픔이력 11111111111 
    *약 111111111   
    *인1111111      
    *인트 11111       
    *약관계111111111    
    *드이력1111         
    *들상품      111    
    *객  1111       
    *정보   1111      
    프로그램 동시 실행 수3678776442110

     

    마치며

    여러분은 파레토 법칙처럼 중요한 것 몇 가지를 해결하면 많은 일들이 해결되는 경험을 해 보신 적 있나요? 개인적으로 세상의 많은 일들이 그렇다고 생각하는데요. ‘원씽’이라는 책의 단 한 가지도 어떻게 보면 중요한 것을 우선 해결하라는 메시지가 아닐까요.
     
    MySQL 성능 2배 향상! 데이터 타입 최적화 효과

    MySQL 성능 개선 3원칙: 데이터 타입 편

    MySQL에서 어떻게 하면 성능을 좋게 할 수 있을까요? 아무래도 오라클 같은 상용 dbms보다 성능이 떨어진다는 점을 생각할 때 이 고민은 중요합니다. MySQL에서 데이터 타입의 선택

    bommbom.tistory.com