Database

[Database] 성능 개선

구루싸 2020. 11. 13. 13:47
반응형
SMALL

성능 개선 목표

  • 처리 능력(Throughput)
    • 해당 작업을 수행하기 위해서 소요되는 시간
    • 처리 능력 = 트랜잭션 수 / 시간
  • 처리 시간(Throught Time)
    • 처리 시간은 작업이 완료되는 데 소요되는 시간을 의미함
    • 배치 프로그램의 성능 목표로 설정하며 배치 작업의 수행 시간을 단축하기 위해서는 아래와 같은 작업을 고려함
병행 처리(Parallel Processing)를 실시
인덱스 스캔보다 Full 테이블 스캔으로 처리
Nest-Loop 조인보다 Hash 조인으로 처리
대량 작업을 하기 위한 SORT_AREA, HASH_AREA의 메모리를 확보
병목을 없애기 위한 작업 계획
파티션 생성
  • 응답 시간(Response Time)
    • 사용자의 입력 후 시스템이 응답할 때까지 시간으로 최종 사용자가 느끼는 시스템의 성능 척도
    • 일반적으로 OLTP 시스템에서 성능 지표가 되며 응답 시간을 향상하기 위해서는 아래와 같은 작업을 고려함
인덱스를 이용하여 엑세스 경로를 단축
부분 범위 처리를 실시
Sort-Merge 조인이나 Hash 조인을 사용하지 않고 Nest-Loop 조인으로 처리
시퀀스(Sequence) 오브젝트를 이용하여 잠김(Locking) 발생을 억제
하드 파싱을 억제
  • 로드 시간(Load Time)
    • 정기적 혹은 비정기적으로 발생하는 데이터베이스에 데이터를 로드하는 작업 수행 시간을 의미함
    • 로드 시간을 단축하기 위해서는 아래와 같은 작업을 고려함
로그 파일을 생성하지 않는 다이렉트 로드(Direct Load)를 사용
병행 로드 작업을 실시
DISK IO 경합이 없도록 작업을 분산
인덱스가 많은 테이블인 경우는 인덱스를 삭제하고 데이터 로드 후 인덱스를 생성
파티션을 이용하여 작업을 단순화

성능 설계

1. 엔터티 통합

  • 유사한 엔터티를 하나로 만들어 데이터베이스를 간단하게 구성하는 것을 의미함
  • 트랜잭션 유형에 대한 사전조사가 필요함
  • 데이터량과 트랜잭션량이 많지 않은 경우 통합을 유도함
  • 데이터량과 트랜잭션량이 많은 경우는 트랜잭션의 유형에 따라 결정해야 함

2. 데이터 모델 구조

  • 정규화와 반정규화를 통한 성능 개선
  • 데이터 모델 단순화를 통한 성능 개선

3. 대용량 데이터 특성

  • 테이블 수직/수평 분할을 통한 성능 개선
  • 슈퍼타입/서브타입 모델의 성능을 고려한 물리 데이터 모델을 통한 성능 개선
  • 이력 데이터 모델의 성능 향상 기법을 통한 성능 개선
  • 공통 코드 처리를 통한 성능 개선
  • 데이터 분산 환경 구성을 통한 성능 개선

4. PK, FK, 인덱스

  • PK 순서는 인덱스 정렬 구조를 이해한 상태에서 인덱스를 효율적으로 이용할 수 있도록 지정
  • 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞 쪽에 위치한 속성의 값이 비교 대상에 포함되어 있어야 좋은 효율을 보이며 가급적 동등비교가 되거나 적어도 범위비교가 되어야 함

관계형 테이블 전환

  • 논리 모델과 물리 모델의 용어 비교
논리모델 물리모델
엔터티 테이블
속성 컬럼
식별자 주식별자 Primary Key
보조식별자 Unique Index
Non-Unique Index
외부식별자 Foreign Key
도메인 Check Constraint
  • 주식별자를 Primary Key로 변환할 때에는 아래와 같이 진행해야 함
    • 데이터 모델의 주식별자는 Primary Key로 전환
    • 데이터를 유일하게 식별할 수 있게 함
    • Primary Key는 Null 값을 갖지 않음
    • Primary Key는 변경되지 않음
    • 가능하면 모든 테이블에 Primary Key를 정의

테이블

1. 테이블의 유형

유형 설명
Heap-Organized Table ☞ 대부분의 상용 DBMS에서 표준 테이블로 사용
☞ 테이블 내에서 Row의 저장 위치는 특정 속성 값에 기초하지 않고 해당 Row가 삽입될 때 결정
Clustered Index Table ☞ PK 값이나 인덱스 키 값의 순서로 데이터가 저장되는 테이블
☞ B 트리의 리프 노드에 RID 대신 데이터 페이지가 존재
☞ 데이터 페이지가 키 값의 순서로 정렬되어 있기 때문에 프리 패치가 가능
☞ 탐색은 빠르나 삽입이 느림

Partitioned Table ☞ 대용량의 테이블을 보다 작은 논리적인 단위로 나눔
☞ 범위(Range) 분할, 해시(Hash) 분할, 결합(Composite) 분할 등의 방식이 있음
☞ 파티션 키에 따라 성능이 좌우되므로 전략적으로 키를 선정해야 함

External Table ☞ 외부 파일을 데이터베이스 안에 존재하는 일반 테이블 형태로 이용할 수 있는 데이터베이스 객체
☞ DW, ETL 작업 등에 유용한 테이블
Temporary Table ☞ 트랜잭션이나 세션 별로 데이터를 저장하고 처리할 수 있는 임시 테이블
☞ 저장된 데이터는 트랜잭션이 종료되면 휘발하며 다른 세션에서 처리되는 데이터는 공유 불가능함

2. 설계 시 고려사항

  • 컬럼 데이터 길이 합이 블록 사이즈보다 큰 경우 체인이 발생하여 속도 저하 현상을 유발하므로 수직 분할을 고려함
  • 컬럼 길이가 길고 특정 컬럼의 사용 빈도 차이가 심한 경우나 같이 처리되는 경우가 드믄 경우는 수직 분할을 고려함
  • 수직 분할은 분할되는 테이블이 하나의 트랜잭션에 의해 동시에 처리되는 경우나 조인이 빈번하게 발생되는 경우가 없어야 함
  • 검색 조건으로 빈번하게 사용되는 컬럼은 문자 타입을 사용하는 것이 더 효율적임
  • 사건의 일자나 시간을 기록하는 속성은 시간 데이터 타입을 선택하는 추세임

데이터 타입

  • 문자형 데이터는 데이터 길이의 가변 여부를 고려
  • 숫자형 데이터는 숫자 데이터 타입으로 할지 문자형 데이터 타입으로 할지 고려
  • 날짜형 데이터는 문자 데이터 타입으로 지정하는 편이 효율적임(검색 조건으로 자주 쓰일 경우)

인덱스

유형 설명
트리 기반 인덱스 ☞ 대부분의 상용 DBMS에서 트리 구조를 기반으로 하는 B+ 트리 인덱스를 주로 사용
☞ B+ 트리는 밸런스 트리(Balanced Tree) 형태임
☞ 대용량 처리의 데이터 삽입과 삭제 등에 좋은 성능을 유지함

비트맵 인덱스 ☞ 키 값의 비교를 비트 연산으로 처리하여 다중 조건을 만족하는 튜플의 개수를 계산하는 데 적합함
☞ 압축 효율이 좋음
함수 기반 인덱스 ☞ 함수나 수식으로 계산된 결과에 대해 인덱스를 생성, 사용할 수 있는 기능을 제공함
비트맵 조인 인덱스 ☞ 물리적인 구조는 비트맵 인덱스와 동일
☞ 기본 테이블을 기준으로 조인된 결과를 기존의 비트맵 인덱스와 같은 구조로 저장하여 카디널리티가 낮은 데이터에 대한 엑세스에 좋은 성능을 얻을 수 있게 하는 방법
도메인 인덱스 ☞ 새로운 구조의 인덱스 타입을 정의하여 DBMS에서 지원하는 인덱스처럼 사용할 수 있음

  • 하나 이상의 테이블에서 파생된 데이터를 보는 또 다른 방법을 제공
  • 데이터베이스의 정보 중에서 선택된 부분만을 보도록 제한
  • 사용자가 관심을 가지는 데이터에만 초점을 맞출 수 있음
  • 자주 사용되는 질의를 정의하여 사용자의 데이터 조작을 단순화할 수 있음
  • 사용자의 요구에 맞는 뷰를 제공하거나 데이터를 제한할 수 있음

분산 데이터베이스

  • 여러 곳으로 분산되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
  • 물리적 Site 분산과 논리적 사용자 통합 및 공유
  • 분산 데이터베이스의 구조는 아래와 같음

분산 데이터베이스 구조

분산 데이터베이스 관리 시스템

투명성 기능 장점 단점
분할(단편화) DB 분할 관리에 무관한 작업 환경을 제공 Bottle neck 방지
시스템 성능 향상
☞ 충분한 설계 기술이 요구됨
위치 투명성 ☞ Data 저장 장소에 무관한 접근을 제공 ☞ Application 단순화
☞ Data의 자유로운 Site 왕래
☞ 이중 처리로 속도 저하
☞ 저장 공간 낭비
지역 사상 ☞ 각 지역 시스템과 무관한 이름 사용 ☞ 상향식 점진적 확장 제공 ☞ 이질형 시스템 구현 시 복잡
중복 투명성 ☞ 논리적 Data 객체의 Site 중복 가능
☞ Data 일관성 유지에 무관한 사용 제공
☞ 질의 응답 성능 개선 ☞ 갱신 전파 Overhead 추가
☞ 기억 공간
장애 투명성 ☞ 구성요소 장애에 무관한 트랜잭션 원자성 유지 ☞ 장애 처리 구현 단순 장애 원인 규명이 복잡함
병행 투명성 ☞ 동시 수행 시각 트랜잭션 결과 일관성 유지 ☞ 자원 사용 극대화 ☞ 복잡한 Locking

 

반응형
LIST