DBMS Partitioning은 정말 성능 향상을 가져올까?

viram·2022년 11월 18일
0

DBMS partitioning

목록 보기
2/2

저번 포스팅에서 DBMS Partitioning이 뭔지 파악하고 어떻게 생성하는지 살펴봤다. DBMS Partitioning은 내부 동작 원리상 오버헤드를 가져올 수밖에 없다. 그럼 언제부터 파티셔닝을 사용했을 때 비로소 성능 향상이 이루어지는지 알아보자.

  • 내가 다루려고 하는 테이블은 N개의 줄이 있고, 1부터 N까지 오름차순으로 정렬된 id(pk)값 컬럼이 있다.
  • 내가 찾으려는 id 값은 121이다. 통상적으로, id에 IDX가 있다면 binary search거나 혹은 binary search와 비슷한 알고리즘으로 121을 찾을 것이다.
  • N이 10000이상이라고 할 때, 내가 찾으려는 id가 전체 로우 수에 비해 비교적 작다는 걸 아는 상황이다.
  • 직관적으로, 테이블을 1000선에서 끊어서 id가 작은 로우와 큰 로우로 나누면 만 개 이상의 테이블에서 BS를 하는 것보다 더 효율적으로 연산을 할 수 있을 것이며, 테이블 수가 얼마나 늘어나던 1000row이내의 테이블에서 서치를 할 수 있을 것 같다.

그래서 db<>fiddle을 사용해서 실제로 실험해 봤다.
코드는 여기서 실행할 수 있다. 로우 수를 조정하려면 1번 섹션 8번 줄의 connect by level < N의 N 상수를 바꾸면 된다.

row수Partitioning 사용하지 않았을 때Partitioning을 사용했을 때효율(절대값)효율(비율)
100000.004287초0.006359초-0.002081초-48%
1000000.007668초0.008167초-0.000499초-6%
10000000.007812초0.006601초0.001211초18%

DB<>fiddle은 웹에서 동작하는 시뮬레이터이고 서버의 상황에 따라 결과값이 달라질 수 있으며, 최대로 실험해 볼 수 있는 1000000row도 너무 작기 때문에 정확한 실험을 하고 싶으면 실제 Oracle에서 돌려봐야 한다.

하지만 row수가 많을수록 파티셔닝이 효과를 가져온다는 직관적인 결과를 얻을 수 있었다. 그럼에도, 실제 Oracle DB에서는 Partioning overhead가 더 클지도 모르고, 이렇게 이상적인 상황을 가정했지만 더 복잡한 상황이 있을지도 모른다.

그러니 각자에 상황에 맞게 DB 파티셔닝을 설계하고 실험을 통해 더 나은 모델을 만들면 된다.

profile
취미로 번역하고 직업으로 개발합니다

0개의 댓글