일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ATOM
- AWS
- {}
- JaCoCo
- primitive type
- sinopia
- API
- dict
- NPM
- java
- RESTful
- node.js
- Travis CI
- Code-coverage
- 인프런
- ECMAScript2015
- REST
- ubuntu
- nginx
- 개인정보수정
- Lodash
- PowerMock
- python
- GIT
- Gitbook
- sanghaklee
- javascript
- Linux
- Coveralls
- Unit-test
Archives
- Today
- Total
이상학의 개발블로그
[MySQL / G Junior] MySQL 아키텍처 본문
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
- Define : 데이터와 인덱스를 캐싱하기 위해 메모리에 사용하는 공간
- 자주 사용되는 데이터를 메모리 영역에 캐싱해서 빠르게 접근할 수 있다.
- https://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html
MVCC ( Multi Versioning Concurrency Control )
- Define : 관계형 DB에서 동시성 제어와 DB에 다수 사용자 접근을 쉽게할 수 있게 하는 DB 디자인이다.
- Lock을 사용하지 않고 일관된 데이터를 제공하는 것이 목적이다.
- http://ronaldbradford.com/blog/understanding-innodb-mvcc-2009-07-15/
'교육 > 세미나' 카테고리의 다른 글
[세미나] Code States J2S 미니컨퍼런스 (0) | 2016.09.12 |
---|---|
[PHP / G Junior] Modern PHP & PSR (0) | 2016.09.12 |
[Ubuntu/7월 정기 세미나] Ubuntu 윈도우에서 리눅스 돌리기 특집 (0) | 2016.08.01 |
[티아카데미/클리닉] 조대협씨의 스타트업을 위한 모바일 백앤드 서버의 설계 (0) | 2016.05.02 |
Comments