데이터베이스 성능

데이터 베이스 성능

성능이란 ?

클라이언트 요청에 대한 응답시간(Response Time) 과 시간당 처리할 수 있는 처리량(Throughtput) 이다.

용어 알아보기

Corrent User = Active User + Inactive User : 현제 사용자를 의미하는데 서버에 부하를 일으키는 Active User와 서버에 부하를 일으키지 않는 Inactive User로 나뉜다.

TPS : 서버가 일정 시간 내의 처리한 트랜잭션의 양

Response Time : 요청 후 응답을 받을 때 까지 소요된 시간

Resource : 한정된 값을 가진 시스템의 구성요소

성능의 특성

경합 부하 구간에서 Response Time이 급격하게 늘어나게 된다.

데이터베이스 병목의 원인

여러 요인이 있지만 DBMS 내부 I/O 병목으로 인한 대기시간 증가가 가장 큰 이유이다. 대부분은 I/O(Sleep) 에서 발생힌다.

병목현상을 해결하기 위해서는

  • 절대적인 블록 I/O 를 줄여야 함.
  • 블록 I/O를 줄이기 위한 모델 설계, DBMS 환경 구축, SQL 튜닝등의 기술이 필요함.

포로세스 생성 주기에 영향을 받는다.

여러 프로세스가 하나의 CPU를 공유 할 수 있지만, 특정 순간에는 하나의 프로세스만 CPU를 사용한다. 디스크에서 데이터를 읽어야할 땐 CPU를 OS에 반환하고 잠시 수면 상태에서 I/O 가 완료되기를 기다린다. 즉, SQL 문에서 발생하는 절대적인 I/O 횟루를 줄이는 것이 성냉 개선의 핵심이다.

성능을 결정하는 요인

성능을 결정하는 가장 큰 요인에는 옵티마이저의 성능이 있다. 사용자가 SQL 문을 입력하면 옵티마이저는 파싱한 SQL를 최적화하여 프로시저로 변환시키는 작업을 한다.

옵티마이저는 통계정보를 이용해 각 실행 계획의 예상 비용을 산정한 후 최저 비용을 나나태는 실행 계획을 선택한다.

옵티마이저가 참조하는 통계정보

SQL 파식 -> 실행계획 작성 ( 통계 정보 활용) -> 실행계획 선택 ( 옵티마이저의 역활) -> SQL 실행

통계정보 :

  • 테이블의 행수
  • 데이터형
  • 크기
  • 제약정보
  • 인덱스에 대한 통계
  • 열 값에 대한 통계 등등..

실행 계획은 어떻게 세워지는

인덱스

지정한 컬럼을 기준으로 메모리 영역에 일종의 목차를 생성하는것, 조회 할때는 좋은 성능을 보이만, insert, update, delete 등의 작업을 해야 할때에는 인덱스 테이블까지 변경해하는 상황이 발생하면서 오히려 성능이 안좋을 수 있다.

``SQL
CREATE INDEX IDX_TB_EXECUTION_TEST_01 ON TB_EXECUTION_TEST(CUSTOMER_ID);

1
2
3
4
5
6
7
8
9

인덱스는 B-Tree를 사용하여 테이블을 조회한다. 반면에, 인데스가 없는 조회 조건은 모든 요소를 비교하면서 조회하게 된다. 이를 Table Full Scan 이라고 한다.

반면에 인덱스를 사용하면 B-Tree를 이용하여 Range Scan 을 하게 된다.

먼저 branch 노드에서 커르고 리픝 노드에서 수평적으로 검사하여 디스크에 접근 하는 것이다.

인덱스를 사용할 컬럼은 카디너리티가 높은 컬럼을 사용해야 한다. 카디널리티는 Distint 명령을 수행했을때 숫자 라고 생각하면 쉽게 생각 할 수 있는데, 성별보다 주민등록 번호가 카디너리티가 높다는 것은 여기에 기인하여 생각할 수 있다.
여러 컬럼으로 인덱스를 사용할때에는 카디너리티가 높은 순에서 낮은 순서로 사용해야 한다.