MySQL , MariaDB

Database 2016. 8. 30. 13:07

# 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

Posted by 감각적신사
,