이상학의 개발블로그

[MySQL / G Junior] MySQL 아키텍처 본문

교육/세미나

[MySQL / G Junior] MySQL 아키텍처

학학이 2016. 8. 29. 23:21

2016.08.24 개발 세미나

Seminar Contents

MySQL 아키텍쳐
  • Connection Pool
  • 쿼리 캐시
    • 쓰는게 좋냐? 안 쓰는게 좋냐?
  • 엔진
    • MySQL 엔진, 스토리지 엔진 분리됨
  • 실행계획
    • 스토리지 엔진 쪽으로 변경 중
  • 지연요소
    • 쿼리 지연 요소를 key, value로 사용할 수 있게 변경 중

캐시 & 버퍼
  • MyISAM : 키 캐시
  • InnoDB : 버퍼 풀

엔진 확인
  • show engines;
  • show plugins;

InnoDB 
  • Primary key 클러스터링
  • 외래 키 지원
  • 자동 데드락 감지
  • 자동화된 장애 복구
  • 버퍼풀 : 메모리 캐시, 커밋 전까지 내용 적재
  • MVCC

MyISAM
  • 트랜잭션 X
  • OS level I/O 요청
  • 키 캐시 히트율 높음
  • 없다고 보는게 좋다. 거의 안 쓴다.


More Information


Connection Pool ( 커넥션 풀이란? )
  • Define : DB 이용시 연결( connect )을 위한 connection 을 미리 만들어서 pool 에 저장해 둔 뒤 연결 요청시 pool 에 있는 connection 들을 리턴
  • 클라이언트가 DB에 연결 작업을 할 때, 매 요청 마다 DB에 연결 요청을 하면 부하가 크다. 이를 개선하기 위해 미리 연결 객체( connection )들을 만들어 놓고 DB 요청시 pool 에 있는 connection을 리턴하고 클라이언트는 DB 작업 종료 후 connection 을 다시 pool 에 반환한다.
  • 미리 정의된 connection 을 사용하기 때문에 DB 연결 시 지연이 없다. connection 을 재사용하기 때문에 효율적이다.
  • pool 에 정의된 connection 보다 많은 양의 요청시 클라이언트들은 pool 에 connection이 반환될 때까지 대기한다.
  • pool이 너무 적다면 대기 시간이 늘어나고, 너무 많다면 차지하는 메모리가 커서 비효율적이다. 적당한 pool 크기가 요구된다.

Query Cache ( 쿼리 캐시란? )
  • Define : 최근 실행된 SQL 쿼리문의 결과를 특정 공간에 저장한 뒤, 이후 같은 SQL 요청시 SQL 쿼리를 하지 않고 저장된 결과를 리턴
  • SQL 쿼리가 아닌 해당 결과 값들을 저장.
  • SELECT * FROM TMP; 와 select * from tmp; 는 다르게 취급됨.
  • 쿼리 캐시 사이즈는 너무 크게 잡을 시 캐시를 유지하기 위한 메모리 오버헤드가 크다. 적당한(~00mb) 크기 유지 필요
  • 데이터 변동이 거의 없고 잦은 SELECT 문이 필요한 경우 유용하다.
  • 쓰는게 좋냐? 안 쓰는게 좋냐?
    결과를 저장하기 때문에 데이터가 추가되는 상황시 다시 캐싱을 하는 경우라면 비효율적일 것 같다. 
    절대적인 답은 없고 상황에 맞게 쓰는게 좋을 것 같다. 제대로 알고 쓰자

Storage Engine ( 스토리지 엔진이란? )

  • Define : 스토리지 엔지( 또는 데이터베이스 엔진 )은 DBMS가 CRUD 작업시 기본적으로 사용하는 SW 컴포넌트
  • 즉, MySQL DBMS를 사용하더라도 어떤 스토리지 엔진을 사용하느냐에 따라 사용할 수 있는 기능이 다르고 상황별 성능이 다르기 때문에 적절하게 스토리지 엔진을 선택해야한다.
  • InnoDB VS MyISAM 

Query Plan ( 실행계획이란? )
  • Define : MySQL 스토리지 엔진이 쿼리를 최적의 상태로 실행하는데 있어 사용되는 plan
  • 실행계획을 통해 현재 쿼리가 어떤 방식으로 동작하는지 알고 쿼리 튜닝을 하는데 도움을 준다.
  • EXPLAIN SELECT * FROM TMP: 
    기본 select 절 앞에 EXPLAIN 이라는 키워드를 추가한다.
  • 실행계획 

캐시 & 버퍼
  • MyISAM key cache
    • Define : 테이블의 인덱스 정보를 저장할 수 있는 메모리 블럭.
    • 테이블로 부터 인덱스 생성, 수정 시 먼저 cache의 내용을 찾는다. 해당 정보가 있다면 cache의 정보를 사용한다.
    • buffer pool이 없기 때문에 OS의 buffer cache를 사용
    • http://rrhh234cm.tistory.com/205 
  • InnoDB buffer pool

MVCC ( Multi Versioning Concurrency Control ) 


Comments