분석가 Step 0. 자격증/SQLD

[1장] 반정규화, 대량 데이터에 따른 성능

뚱뿌 2023. 3. 22. 11:20

성능 저하 원인

  • 하나의 테이블에 데이터 대량 집중 및 여러 컬럼 존재 : 디스크 I/O 높아짐
  • 대량의 데이터가 처리되는 테이블 및 하나의 테이블에 존재 : 디스크 I/O 높아짐, 성능 저하
  • 컬럼이 많아지는 경우 : 로우체이닝, 로우 마이그레이션 발생

▶ 반정규화의 대상에 대해 다른 방법으로 처리

  • 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려운 경우 : 뷰(VIEW) 사용
  • 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 : 클러스터링 적용, 인덱스 조정
  • 대량의 데이터로 성능이 저하되는 경우 : PK의 성격에 따라 부분적인 테이블로 분리 (파티셔닝 기법)
  • 응용 애플리케이션에서 로직을 구사하는 방법 변경으로 성능 향상

 대량 데이터 발생으로 인한 현상

  • 블록 I/O 횟수 증가, 디스크 I/O 가능성 상승, 디스크 I/O 성능 저하
  • ※ 로우체이닝(Row Chaining) : 행(Row) 길이가 길어 데이터 블록 하나에 데이터를 모두 저장하지 않고 두 개 이상의 블록에 걸쳐 하나의 로우를 저장하는 형태 
  • ※ 로우마이그레이션(Row Migration) : 수정된 데이터가 해당 블록에 저장하지 못하고 다른 블록의 빈 공간에 저장되는 현상
  • ※ 파티셔닝(Partitioning) : 테이블 수평 분할 기법으로 논리적으로 하나의 테이블이지만, 물리적으로 여러 데이터 파일에 분산 저장하여 데이터 조회 범위를 줄여 성능 향상
    • Range Partition : 범위로 분할
    • List Partition : 특정한 값 기준 분할
    • Hash Partition : 해시 함수 적용 분할 

슈퍼/서브타입 데이터 모델

  • 논리적 데이터 모델에서 주로 이용
  • 물리적 데이터 모델로 설계시 문제 발생

 물리적인 테이블 형식으로 변활할 때 (성능 저하 원인 3가지)

  • Union 연산에 의한 성능 저하
    • 트랜잭션 : 전체 대상 일괄 처리 / 테이블 : 서브타입별 개별 유지
  • 불필요하게 많은 데이터 집적으로 인한 성능 저하
    • 트랜잭션 : 서브타입 개별 처리 / 테이블 : 하나로 통합 변환
  • 조인에 의한 성능 저하
    • 트랜잭션 : 슈퍼/서브타입 공통 처리 / 테이블 : 개별 유지

 변환기술

  • 개별 발생 트랜잭션 : 개별 테이블(One to One type)
  • 슈퍼/서브타입 발생 트랜잭션 : 슈퍼/서브타입 테이블(Plus type)
  • 전체 발생 트랜잭션 : 하나의 테이블(Single type)
구분 One to One type Plus type Single type
확장성 우수 보통 나쁨
조인 필요 수 많음 보통 적음
I/O 성능 저하 양호 양호 나쁨
관리 용이성 나쁨 나쁨 좋음
적합 트랜잭션 유형 개별 발생 슈퍼/서브 발생 전체 발생

※ 쪼개질수록 확장성과 디스크 I/O 성능은 향상 하지만, 조인 성능과 관리 용이성은 낮아짐


PK/FK 컬럼 순서 및 성능

 

 인덱스 중요성

  • 데이터 조작 시 가장 효과적으로 처리될 수 있는 접근 경로 제공
  • (특징) 여러개의 속성이 하나의 인덱스로 구성되어 있을때 앞쪽에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율을 나타낼 수 있음. 앞쪽에 위치한 속성이 가급적 '=' 아니면 최소한 범위 'BETWEEN'이 들어와야 함