개발자가 되고 싶은 준개발자

mysql 과 oracle 비교 본문

카테고리 없음

mysql 과 oracle 비교

준개발자 2022. 12. 14. 18:53

#가격

mysql은 community와 enterprise 버전이 있고, community 버전은 무료이다. 이에 비해 오라클은 가격이 비싸고 무료 버전이 없다.

 

# 스토리지

오라클 DB는 통합된 스토리지 하나를 공유하여 사용하나 MySQL은 물리적인 DB 서버마다 독립적으로 스토리지를 할당하여 구성한다. 따라서 오라클은 공유 스토리지를 사용하므로 어느 DB 서버에 접속하여 SQL문을 수행하더라도 같은 결과를 출력한다.

MySQL에서도 복제 구성을 통해 DB 여러 대가 같은 데이터를 갖도록 구성할 수 있다. 단 이 경우에는 대부분 master-slave 구조로 구축을 하기 때문에 쓰기 작업은 한 서버에서만 발생하고, 나머지 서버에서는 읽기 작업만 하는 구조를 갖는다. master-slave 구조로 구축할 경우에는 Query Offloading을 통해 DB 처리량을 증가시킬 수 있다.

Query Offloading?

DB 서버의 트랜잭션에서 쓰기 트랜잭션과 읽기 트랜잭션을 분리하여 DB 처리량을 증가시킬 수 있도록 하는 것이다. Master-slave의 경우 Master에서는 쓰기 트랜잭션(UPDATE, INSERT, DELETE)을, 나머지 DB(SELECT)에서는 읽기 트랜잭션을 처리하도록 한다.

 

# 스토리지 엔진

MySQL에는 오라클과 달리 데이터를 저장하는 스토리지 엔진이라는 개념이 있다. MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 구성되는데, 스토리지 엔진은 실제 디스크 스토리지에 데이터를 저장하는 역할이다. 스토리지 엔진의 종류로는 MyISAM과 InnoDB가 있으며, InnoDB가 더 많이 쓰인다.

사용자가 SQL문을 실행하면, 먼저 MySQL 엔진에서는 문법 에러가 있는지, Db에 해당 테이블이 있는지 등을 검사한다. 이후 옵티마이저가 사용자의 요청 SQL을 빠르게 수행할 계획을 세우고, 이를 토대로 스토리지 엔진에 위치한 데이터를 찾아 MySQL 엔진으로 전달한다. MySQL 엔진은 전달된 데이터에서 불필요한 부분을 필터링하여 연산을 수행한 뒤 사용자에게 최종 결과를 반환한다.

 

#메모리 사용율

오라클 대비 MySQL은 메모리 사용률이 낮다. 따라서 저사양 PC에서도 설치하여 사용할 수 있다.

 

#조인 알고리즘

MySQL은 대부분 Nested Loop Join 방식으로 조인을 수행하나, 오라클은 sort merge join과 hash join도 제공한다.(MySQL도 8.0.18버전부터 hash join을 지원하나 자주 쓰이지는 않는다. nested_loop_join은 마지막 레코드를 찾는 데까지 오래 걸리지만 첫 레코드는 빨리 찾는다. 이에 반해 해시 조인은 첫 레코드를 찾기까지 오래 걸리나 최종 레코드까지 찾는 데는 상대적으로 빠르다. 해시 조인은 우선 해시 테이블을 메모리에 생성하고 해당 테이블을 probe하면서 일치하는 레코드를 찾아야 하므로 초기 시간이 더 걸릴 수 밖에 없다.)