파티션 (Part 1)

저뉼(스님?)·2024년 1월 5일
0

나만의 설명

목록 보기
6/11

Q. 파티션이란?
A. 나누는 것 (분산)

Q. 무엇을?
A. 테이블

Q. 어떻게?
A. 물리적으로 여러 개의 테이블로

Q.언제?
A.

  • ❌ 테이블이 너무 커서 (대용량)
  • 테이블이 너무 커져서 인덱스(의 워킹 셋)의 크기가 물리적으로 MySQL이 사용 가능한 메모리 공간보다 더 커졌을 때
  • 데이터 특성상 주기적인 삭제 작업이 필요할 때 (예: 로그 삭제)

Q. 왜?
A.

  • 느려서. 물리적 메모리 사용 효율을 높여 성능을 개선하기 위해
  • MySQL 서버 전체에 가해지는 부하를 줄이고, 동시성 문제 발생을 예방하기 위해

MySQL에서는 테이블의 데이터나 인덱스를 파일 단위로 관리한다고 한다. 기본적으로 테이블당 데이터를 위한 파일 하나와, 인덱스를 위한 파일 하나가 있다는 뜻이라 생각한다.
테이블의 데이터가 많아지면 데이터 파일의 크기가 커질 것이고, 인덱스를 생성했다면 인덱스 파일의 크기 또한 커질 것이다.

대부분의 프로그램이 그렇듯, MySQL도 쿼리 실행 시 파일로 저장되어 있던 데이터를 메모리에 적재해서 처리한다. 이때 인덱스의 워킹 셋의 크기가 메모리를 초과하면 쿼리 처리가 상당히 느려진다고 한다.

테이블 데이터의 크기는 일반적으로 메모리보다 크다.

또, 파일의 크기가 커졌을 때 로그 파일을 삭제한다고 생각해 보자.
하나의 커다란 데이터 파일을 가지고 특정 기간에 해당하는 데이터를 찾아 삭제해야 한다.
이런 작업은 MySQL 서버 전체에 부하가 가해진다고 한다.
또한 부분 삭제 작업이 진행 중인 파일에 계속해서 새로운 데이터가 추가된다면 동시성 문제도 발생할 수 있을 것 같다.

만약 로그 테이블을 연도에 따라 파티션으로 나누었다면, 파티션들은 별개의 물리적 파일로 나뉘기 때문에, 간단히 삭제할 연도에 해당하는 파티션만 삭제하면 위 문제들을 고려하지 않아도 된다.

참고 문헌

  • Real MySQL 8.0 2권

0개의 댓글