# MySQL , MariaDB
------------------
[mysql공식](dev.mysql.com)
[MariaDB](mariadb.org)
[mariadb installation](http://www.tutorialbook.co.kr/entry/Ubuntu-1404LTS-%EC%97%90-MariaDB-10-%EB%A5%BC-apt%EB%A1%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0)
0. MySQL
- deafult : InnoDB 엔진
- 5.6 버전 이후 권장
1. MariaDB
- Mysql 과 동일하다, 커멘드 기타 등등
- deafult : InnoDB 엔진
- XtraDB엔진 : InnoDB 엔진의 강화버전 , Mysql 과 차별화 되는 점(아직 사용사례가 없다)
- open source 로 mysql 에 더 많은 기능을 추가하고자 한다
- cassandra 와 친해지려 한다
- 10.0 버전 이후 권장
2. MariaDB vs Mysql
- 엔진 비교
- InnoDB
- 트랜잭션 보장 엔진
- 확장성, 성능, 모니터링 일부 미흡
- 원하는 테이블에 대해서만 MyISAM 엔진을 사용할 수 있도록 옵션을 주어 설정할 수 있다
- MyISAM
- 트랜잭션 미보장 엔진 (배치성으로 작업하는 DB)
- 기능과 구조가 단순한 스키마에 적합하며 빠른 성능을 보장한다
- Aria 엔진
- MyISAM 엔진의 강화버전(트랜잭션부분 일부 지원),
- MyISAM 엔진 대비 강점
1. crash safe : (myisam 대비, aria-log.xxxx 파일을 생성하여 메모리에서 발생한 정보를 기록한다)
2. caching : data + index (myisam 은 index 만 캐싱이 가능하다)
- 튜닝 포인트 : aria-pagecache-buffer-size
3. 트랜잭션 일부 지원
- 튜닝 포인트 : aria-checkpoint-interval ... : wal file 의 주기
- 기능 비교
- buffer pool 의 프리 로드 (온/오프가 가능하다)
- 자주 사용하는 정보는 메모리에 올린다
- 서브쿼리 최적화 : Oracle 은 기본으로 기능 제공 (왠만하면 안쓰는 것을 추천함)
- 마리아 DB 는 from 절의 서브쿼리만...
3. 모니터링을 위한 커멘드 (Mysql, MariaDB 공통)
- show processlist : mysql 의 현재 쓰레드 별 상태 정보를 보여주는 명령어
- info 컬럼의 경우 전체 명령어가 나오지는 않는다 <-> oracle 은 전문 출력이 가능하다
- show status : mysql 의 통계정보를 모니터링 하는 명령어
- copy to tmp table : alter table 문을 수행중 데이터는 옮겨지기 전
- copying to group table : oder by , group by 절의 컬럼이 다를때
- sorting for group
- sorting for order
- executing :
- sending data : 쿼리문 결과를 주는 작업
- killed
- locked
- show slave status : replication 을 모니터링 하기 위한 slave 서버에서 수행
- seconds_behind_master: sec 단위의 벌어진 격차를 기록, 갭이 늘어나면 문제
4. 서버 프로세스 (Mysql, MariaDB 공통)
- Connection layer : 커낵션 핸들링
- communication protocols :
- TCP/IP
- Unix socket file
- Shared memory
-Named pipes
- threads
- 커넥샨당 하나의 thread 유지
-쿼리 실행을 핸들링
- Authentication
- id/pw 점검
- SQL layer
- Parser : 문법 검사
- Authorization : 유저 권한 확인
- Optimizer : 쿼리에 대한 실행 계획 생성
- Query execution : 실행계획에 따른 쿼리 수행
- Query cache : SQL 문과 수행결과를 메모리에 캐싱
- 용도코드성에 쓰는게 좋다 (대부분 0 으로 튜닝한다)
- 일반적인 OLTP 시스템에서는 적절하지 않다
- Query logging : 실행 쿼리 기록
- Storage layer
- Disk : 디스크 상에 데이터를 저장하는 스토리지 엔진
- InnoDB
- MyISAM
- Memory : 메모리 상에서 데이터를 저장하는 스토리지 엔진
- Network : 데이터 고가용성을 위해 클러스터를 활용한 확장
- Network Block Device
5. Disk 공간의 사용 (Mysql, MariaDB 공통)
- MAD, MAI, etc
6. Memory (Mysql, MariaDB 공통)
- Server/Shared : Query cache, Thread cache
- Storage Engine/Shared :
- buffer pool : 전체 메모리의 50 ~ 80% 로 설정하는 것이 좋다
- 튜닝시, DB 가 죽지 않게는 해줄수 있다
- default 300 MB
- log buffer : InnoDB 의 경우
- key buffer : MyISAM 의 경우 index 만 캐싱하고 데이터는 하지 않는다
- Connection/Session : Sort buffer, Read buffer, Temporary table(sort 하기 위한 임시 테이블)
7. HA (Mysql, MariaDB 공통)
- replication
----------------- ( 아래는 상용 솔루션 이다 ) -----------------
- MHA
- MHA manager : master 를 heart-bit 하다가 slave 를 올린다(마스터로 ),
auto fail0ver 는 되는데 auto filaback 은 안된다
- DRBD
- auto fail0ver 는 되는데 auto failaback 은 된다
- 4 TB 이상은 지원하지 않는다
- 트랜잭션 지원 디비 엔진(Inno, Xtra)만 지원한다
- OS Cluster
- Galera