[SQLD/P] 데이터베이스와 성능

Hyo Kyun Lee·2022년 8월 1일
0

SQLD/P

목록 보기
13/82

1. 병목

말 그대로 DBMS에서 많은 수의 부하를 처리하는데, 시간이 오래 걸리는 현상을 의미한다.

1-1. 병목요인

이러한 병목현상이 발생하는 요인은 여러가지가 존재한다.

  • 취급 데이터 양이 많다.
  • 시스템에서 처리해야하는 데이터는 연속적으로 보유해야 할 데이터이다.
  • 데이터의 총 크기가 지속적으로 증가한다.
  • 무조건적인 저장소 확장(자원증가)이 어렵다(동시성 보장 등의 문제로 인해)
  • DBMS 내부 I/O 병목으로 인해 대기시간이 길어질 수 있다.

이때 대부분의 DBMS 성능은 I/O에서 결정된다고 하여도 과언이 아니다. 따라서 DBMS I/O 병목으로 인한 성능 문제를 해결하기 위해선, 절대적인 block I/O를 줄여야 한다.

블록 단위로 읽을 경우, 하나의 레코드만을 읽으려 할 때도 해당 블록(table) 전체를 읽는다. 그만큼의 성능 및 속도 저하 등이 발생할 수 있으므로, block I/O를 줄이기 위해 모델설계, DBMS 환경구축, SQL 튜닝 등을 진행한다.

2. Process 관점에서의 SQL문 실행

block I/O가 실행되는 과정에서는 하나의 process가 CPU를 사용하는 과정을 거치고, 해당 과정은 아래 모식도와 같이 나타낼 수 있다.

다른 프로세스(SQL문) 측에서 디스크 데이터를 읽어야 할 경우, 현재의 프로세스(또다른 SQL문)는 CPU를 OS에 반환하고 수면(waiting) 상태에서 I/O가 완료되기를 기다린다(정해진 OS함수를 호출하고 CPU를 반환한채 알림설정 및 대기큐에서 대기).

따라서 SQL에서 발생하는 절대적인 I/O 횟수를 줄이는 것이 성능 개선의 핵심이라 할 수 있다.

3. 데이터베이스의 성능을 결정하는 요인

SQL문을 실행하기 위해 옵티마이저라는 최적 실행 엔진이 존재하며, Block I/O 및 인덱스 등 성능을 결정하는 요인에 따라 옵티마이저의 속도 등이 영향을 받게 될 것이다.

SQL은 구조적, 집합적, 선언적인 구조화된 언어이며, 각 프로시저(SQL명령을 모아둔 코드)를 만드는 역할은 옵티마이저가 담당한다(SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심엔진).

4. SQL문의 실행과정

SQL 문을 실행하는 단계는 크게 4가지, SQL Parsing > 실행계획작성(*통계정보 활용) > 실행계획선택 > SQL 실행단계로 나눌 수 있다.

이를 아래와 같이 세분화하여 살펴볼 수 있다.

  • SQL Parsing

사용자로부터 SQL문을 전달받고 SQL Parser가 Parsing을 진행한다.
Parsing Tree를 생성(SQL문을 이루는 개별 요소를 분석)하고, Syntax(문법) 오류 및 Semantic(의미상 오류, 존재하지 않는 테이블 등) 오류 등을 확인한다.

  • SQL 최적화

Optimizer가 하는 단계로, 미리 수집한 시스템이나 통계정보를 바탕으로 다양한 실행경로를 생성 후 가장 효율적인 실행경로를 선택한다.

DBMS 성능에 가장 핵심적인 요소이다.

  • 로우 소스 생성

옵티마이저가 선택한 실행 경로를 실제 실행 가능한 코드(script 등), 프로시저 형태로 포맷팅한다.

4-1. 옵티마이저

사용자가 원하는 작업을 가장 효율적으로 수행하기 위해, 최적이 데이터 액세스 경로를 선택해주는 DBMS 핵심엔진이다.

통계정보를 이용하여 각 실행계획의 예상 비용을 산정한 후, 최저 비용을 나타내는 실행계획을 선택한다.

4-2. 옵티마이저가 참조하는 통계정보

  • table 데이터를 샘플링 추출하여, 통계정보를 획득한다.
  • 효율적인 참조 데이터를 수집한다.
  • table 행/열 수와 각 열의 길이, table 크기, 제약 정보(NOT NULL 등)를 보유하고 있다.

5. 참고자료

block I/O - http://wiki.gurubee.net/pages/viewpage.action?pageId=26739100
프로세스 상태 - https://jhnyang.tistory.com/7
옵티마이저 - https://coding-factory.tistory.com/743프로시저 - https://wyatt37.tistory.com/75

0개의 댓글