MySQL

2023. 6. 1. 11:20· Computer Science/데이터베이스

MySQL

  • 대표적인 관계형 데이터베이스
  • 오픈소스

MySQL엔진

쿼리파서와 전처리기는 컴파일 과정과 매우 유사하다.

하지만 SQL은 프로그래밍 언어 처럼 컴파일 타임때 검증할 수 없어 매번 구문 평가를 진행

  • 쿼리파서
    • SQL을 파싱하여 Syntax Tree를 만듬
    • 이 과정에서 문법 오류 검사가 이루어짐
  • 전처리기
    • 쿼리파서에서 만든 Tree를 바탕으로 전처리 시작
    • 테이블이나 컬럼 존재 여부, 접근권한 등 Semantic 오류 검사
  • 옵티마이저
    • 쿼리를 처리하기 위한 여러 방법들을 만들고, 각 방법들의 비용정보와 테이블의 통계정보를 이용해 비용을 산정
    • 테이블 순서, 불필요한 조건 제거, 통계정보를 바탕으로 전략을 결정(실행 계획 수립)
    • 옵티마이저가 어떤 전략을 결정하는냐에 따라 성능이 많이 달라진다.
    • 가끔씩 비효율적인 판단을 해 개발자가 힌트를 사용해 도움을 줄 수 있다.
  • 쿼리실행기
    • 옵티마이저가 결정한 계획대로 스토리지 엔진에 요청을 한다.
    • 이 때Handler API를 사용한다.
    • 옵티마이저 -> 쿼리실행기 ->(Handler API) -> 스토리지 엔진

스토리지 엔진

  • 디스크에서 데이터를 가져오거나 저장하는 역할
  • MySQL 스토리지 엔진은 플러그인 형태로 Handler API만 맞춘다면 직접 구현해서 사용할 수 있다.
  • InnoDB, MyIsam 등 여러개의 스토리지 엔진이 존재
  • 8.0대 부터는 InnoDB엔진이 기본값

InnoDB의 핵심키워드

  • Clusterd Index
  • Redo-Undo
  • Buffer pool

 

 

쿼리캐시

  • MySQL 5.0까지는 쿼리 캐시라는 것이 있었으나 8.0대에 들어와서 폐기됨
  • 중복된 요청일시 성능의 향상을 위해 캐시에서 바로 꺼내어서 주는 용도 였지만 데이터베이스의 데이터가 달라지면서 생기는 Lock 등과 같은 문제점때문에 폐기됨 (이점보다 문제점이 크다고 판단)
  • 오라클에서는 소프트파싱과 하드파싱이 있다.
    캐시와는 조금 다르다. 캐시는 데이터를 캐시에서 바로 찾는 것이고(데이터를 캐시에 저장), 소프트 파싱은 옵티마이저 과정(실행계획)을 생략하는 것이다.(옵티마이저과정을 캐시에저장, 실행전략만 빠르게 세우고 데이터는 DB에서 가져온다.)
    • 소프트 파싱: SQL, 실행 계획을 캐시에서 찾아 옵티마이저 과정을 생략하고 실행 단계로 넘어감, 하지만 모든 SQL과 매핑해 데이터까지 캐싱하지는 않음(힌트나 설정으로 가능하긴 하다.)
    • 하드 파싱: SQL, 실행 계획을 캐시에서 찾지 못해 옵티마이저 과정을 거치고나서 실행단계로 넘어감
  • 현재 MySQL에는 소프트 파싱이 없지만 쿼리캐시가 있었다.(5.0이전)
  • 쿼리 캐시는 SQL에 해당하는 데이터를 저장하는 것
  • 쿼리캐시는 데이터를 캐시하기때문에 테이블의 데이터가 변경되면 캐시의 데이터도 함께 갱신시켜줘야함
  • MySQL의 쿼리캐시, Oracle의 소프트 파싱 모두 성능 최적화를 위해 캐시라는 기술을 도입했었다.
    하지만 이 둘은 캐시의 범위가 다르다.
  • 캐시를 도입할 때는 항상 만료정책을 고려해야한다.
    쿼리캐시는 소프트 파싱에 비해 조회성능은 더 높지만(디스크까지안가니깐) 캐시데이터 관리에 더 높은 비용이 들어감 

 

'Computer Science > 데이터베이스' 카테고리의 다른 글

데이터베이스의 성능  (0) 2023.06.03
데이터베이스 정규화  (0) 2023.06.01
oracle 실습환경 구축  (0) 2023.05.30
UML 기호  (0) 2023.04.16
erd 식별관계, 비식별관계  (0) 2023.03.23
'Computer Science/데이터베이스' 카테고리의 다른 글
  • 데이터베이스의 성능
  • 데이터베이스 정규화
  • oracle 실습환경 구축
  • UML 기호
윤재에요
윤재에요
yunzae.log윤재에요 님의 블로그입니다.
윤재에요
yunzae.log
윤재에요
전체
오늘
어제
  • 분류 전체보기 (438)
    • Computer Science (115)
      • 데이터베이스 (50)
      • 네트워크 (18)
      • 소프트웨어 공학 (1)
      • 알고리즘 (10)
      • 자료구조 (9)
      • 컴퓨터구조 (0)
      • 운영체제 (0)
      • 데이터 통신 (16)
      • 프로그래밍언어론 (11)
    • Project (20)
      • 후크(Flutter) (1)
      • BDSR로그북(App,BackEnd) (2)
      • 나만의 주점(STM32,Arduino,androi.. (9)
      • 공다(App,BackEnd) (2)
      • 카카오쇼핑 클론코딩 (4)
      • 암호화폐자동매매 (2)
    • Problem Solving (208)
      • 자바 문법 (20)
      • 파이썬 문법,함수 (6)
      • 그리디 (5)
      • 구현 (43)
      • DFS (3)
      • BFS (17)
      • 정렬 (15)
      • 이진 탐색 (16)
      • 다이나믹 프로그래밍 (6)
      • 최단 경로 (5)
      • 그래프 (1)
      • 자료구조 (5)
      • 투포인터 (15)
      • SQL (44)
      • 구간합 (7)
    • I leaned (78)
      • 스프링,스프링부트 (31)
      • Git (6)
      • JAVA (5)
      • Etc (30)
    • 취업 (15)
      • PT면접 (6)
      • 기술면접 (9)
      • 인성면접 (0)
    • log (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 최단거리
  • 다이나믹프로그래밍
  • UML
  • Relationship model
  • 힙큐
  • 먀
  • 파이썬
  • 효율적인화폐구성
  • 플로이드 워셜
  • 기수정렬
  • 카카오테크캠퍼스
  • DP
  • E-R Model
  • 다이나믹
  • 이것이 코딩테스트다.
  • 참조 무결성
  • 이것이 코딩테스트다
  • 이것이코딩테스트다
  • 데이터베이스
  • 다이어그램
  • 재시도
  • weak entity
  • 부품찾기
  • 제약 사항
  • 최단 거리
  • 교환정렬
  • 그리디
  • 다익스트라
  • 계수정렬
  • 개미전사

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
윤재에요
MySQL
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.