고성능을 낼 수 있는 이유
- 옵티마이저를 활용하여 쿼리 실행 계획을 최적화
- 옵티마이저란 쿼리를 분석하고 실행 계획을 생성하는 엔진
- 쿼리를 분석하고 쿼리를 실행할 때 발생하는 비용(CPU, I/O)에 따른 계획을 생성하여 가장 비용이 적은 계획을 선택
- 인덱스를 사용하여 데이터의 검색 속도 향상
- 자주 엑세스 되는 데이터를 메모리에 캐싱하여 디스크 엑세스를 줄이고 버퍼 캐시를 통해 변경된 데이터를 일시적으로 메모리에 보관하여 디스크에 대한 입출력을 줄임
높은 가용성을 보장하는 이유
- 실시간 백업 및 복구 기능을 제공하여 데이터 손실을 최소화 하고 신속하게 복원할 수 있음
- Oracle Data Guard는 데이터베이스의 높은 가용성을 제공하는 솔루션 중 하나입니다. 이는 주 데이터베이스와 이를 보조하는 스탠바이 데이터베이스 간에 데이터를 동기화하여, 주 데이터베이스에 장애가 발생한 경우 스탠바이 데이터베이스로 즉시 전환하여 서비스 중단을 최소화
- Oracle RAC은 여러 노드 간에 데이터베이스를 공유하여 고가용성과 확장성을 제공합니다. 이를 통해 시스템 장애가 발생해도 사용자는 다른 노드에서 서비스를 계속 받을 수 있음
스토리지 엔진 종류
- InnoDB
- 가장 많이 사용되는 엔진으로 ACID 트랜잭션을 지원하며 뛰어난 성능과 장애 복구 기능을 가진 대표적인 엔진
- 결재 정보와 같이 무결성을 가져야 하고 손실이 되면 안되는 중요한 데이터를 필요로 할 때 사용
- 자동 데드락 감지, 외래키 지원, 자동화 장애 복구등을 지원
- MyISAM
- full-text인덱싱, 압축, 공간 (Geographic Information System, GIS, 지리정보시스템) 함수 등을 지원하지만 트랜잭션을 지원하지 않기 때문에 에 InnoDB보다 심플하고 기본적으로 빠르지만 동시성 제어가 어려움
- Read 쿼리가 많은 DW 환경에서 많이 사용된다.
- Memory
- 메모리에 데이터를 저장하는 엔진으로 트랜잭션을 지원하지 않고 테이블 레벨 락을 사용
- 메모리를 사용하기 때문에 기본적으로 속도가 아주 빠르지만 데이터를 잃어버릴 위험이 있기 때문에 빠른 처리가 필요한 임시 테이블로 많이 사용
ex) 주기적으로 집계되는 데이터의 결과 캐싱용- Archive
- 아주 빠르게 INSERT 쿼리를 처리할 수 있는 엔진으로 데이터 쓰기를 버퍼링하고 각 행이 삽입될 때마다 zlib으로 압축
- Index를 지원하지 않으며 INSERT/REPLACE/SELECT 쿼리와 같이 데이터를 삽입하거나 읽는 것은 가능하지만 DELETE/UPDATE와 같이 데이터를 삭제하거나 수정할 수 없음
- transaction을 지원하지 않고 row-level locking을 사용하며 주로 많은 양의 로그성 데이터를 저장하고 읽는데 주로 사용
다중 버전 동시성 제어란?
- 갱신 / 변경된 데이터를 이전 데이터와 버전을 달리해 버전을 관리하고 이를 기반으로 일관성을 유지
- 버전 데이터가 계속 쌓인다는 단점이 있지만 일반적인 RDBMS보다 빠르게 작동한다는 장점이 있음
- 버전 데이터는
https://nomadlee.com/mysql-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84-%EC%A2%85%EB%A5%98-%EB%B0%8F-%ED%8A%B9%EC%A7%95/
https://velog.io/@onejaejae/DB-MVCC
https://daniel6364.tistory.com/entry/PostgreSQL-RDBMS
https://www.integrate.io/ko/blog/postgresql-vs-mysql-which-one-is-better-for-your-use-case-ko/