본문

DB 아키텍처와 성능 관리

도입

이번 포스팅에서는 DBMS의 동작에 대해 정리할 예정이다.


DB 아키텍처의 종류

  1. RDBMS: Entity와 Relation으로 이뤄진 DB
    e.g. 사람 - 편의점 진열대 - 알바생 - 창고
  2. NOSQL: Key-Value로 이뤄진 DB

RDBMS를 중심으로 정리할 예정이고
RDBMS의 관리 핵심은 Memory에 있는 데이터를 Disk에 경유하지 않고 재활용(Buffer Hit)하는 하는 하는 것이다.

https://en.wikipedia.org/wiki/Relational_database#/media/File:RDBMS_structure.png


MySQL 아키텍쳐

  1. MySQL Engines
    1. Client의 요청 처리
    2. Syntax 분석 및 Optimize (문장 분석 및 최적화)
  2. Storage Engines
    1. Disk Storage에 읽고 저장
    2. Buffer Pool 갖고 있음
  3. OS & Hardware
    1. 물리적 저장
    2. MySQL 로그 저장

https://dev.mysql.com/doc/refman/8.0/en/images/mysql-architecture.png

`MySQL Server Process`에서 크게 위와 같이 3가지로 나눌 수 있다.


MySQL Thread 구조

MySQL Engine: thread pool에 있는 Foreground thread, client와 1:1 관계
Storage Engine: background thread, foreground와 n:n 관계
병목현상이 발생하는 곳은 storage Engine(창고 알바생) 쪽이다.

https://image.slidesharecdn.com/mysqlquickdive8thapril-140413003058-phpapp02/95/mysql-quick-dive-51-638.jpg?cb=1397349539


DB Memory 구조(on Storage Engines)

  1. Global Memory (SGA): 모든 Storage Engine이 공유하는 메모리 영역, Buffer Pool이 있다.
  2. Session Memory (PGA): 1개의 client에 1:1 대응하는 메모리 영역
    client가 계속 증가하면 connection이 계속 할당되어 Global Memory 영역이 줄어들 수 있다. -> 성능 저하 발생

오라클 DB 구조 https://techtrackers.files.wordpress.com/2012/03/oracle.jpg


SQL Processing(a.k.a SQL 튜닝, on MySQL Engines)

MySQL Optimizer: MySQL를 최적화 함 (c.f. 자동차 네비게이션)

  1. SQL Parsing: Syntax(정상 SQL인지), Semantic(권한, table 존재 등) 확인
  2. Optimization: 최적 SQL 판단, 실행 계획 생성
  3. Row-Source Generation: 코드, 프로시져 생성
  4. Execution: 실행

Processing 과정

  1. SELECT
  2. UPDATE
    commit하면 redo에 내림(빠름, 왜냐하면 변경 사항은 append로 처리하므로, 일단 저장해 영속성 설정)
    (c.f. 실제 주소에 저장하면 해당하는 곳을 찾아야하므로 오래 걸림)

ONE SQL & Array Processing

  1. ONE SQL
    명령: 100개 가져와
    방법1: 1개를 100번
    방법2: 100개를 1번
    각각 장단이 있고 적정 수준을 설정하는 것이 중요 -> 불필요한 왕복을 줄이는 것이 핵심

  2. Array Processing
    Array 단위로 데이터 처리
    fetchSize 설정으로 처리


Lock & Transaction

  1. Lock: 데이터의 일관성을 위해 다중 사용자가 같은 데이터에 동시에 엑세스 할 수 없도록 하는 방법
    (범위에 따라 전체 테이블을 lock, column을 lock하는 방법 등이 있다.)
  2. Transaction: 여러개의 변경 작업을 하나의 작업으로 묶어 전부 처리하거나 전부 처리하지 않는 방법
    e.g. 동시성 그래프
    e.g. 영화 좌석 예매

Lock Contention 감소 전략

  1. Index 설정으로 SQL 성능 up
  2. Table 정규화로 table를 분리해 Lock을 벗어날 수 있는지 검토

'컴퓨터 > 이론: 개발' 카테고리의 다른 글

DB 인덱싱과 최적화  (0) 2020.07.27
DB 인덱싱의 기본 원리와 이해  (0) 2020.07.26
DB 아키텍처와 성능 관리  (0) 2020.07.21
DB Modeling  (0) 2020.07.20
HashMap 동작원리 및 충돌해결  (0) 2020.07.15
프로세스 VS 쓰레드  (0) 2020.07.14

공유

댓글 0