DBMS/MySQL
[Real MySQL] 3장(2). 아키텍처 - InnoDB 스토리지 엔진 아키텍처
2. InnoDB 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중에서 거의 유일하게 레코드 기반의 잠금을 제공하고 있어서 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. InnoDB 스토리지 엔진의 특성 프라이머리 키에 의한 클러스터링 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻 프라이머리 키에 의한 레인지 스캔은 상당히 빨리 처리될 수 있음 잠금이 필요 없는 일관된 읽기 MVCC 기술을 이용해 락을 걸지 않고 읽기 작업을 수행. 외래 키 지원 외래 키에 지원은 InnoDB 스토리지 엔진 레벨에서 지원하는 기능으로, MyISAM이나 Memory 테이블에서는 사용할 수 없음. 여러 가지 제약사항 탓에 실무에서는 잘 사용하지 않기 때문에 그렇게 필수적이지..
[Real MySQL] 16장. 베스트 프랙티 - SQL 작성 표준
조인 조건은 항상 ON 절에 기재하자. MySQL의 조인 조건은 WHERE절에 모두 모아서 표기할 수도 있고, JOIN 키워드를 이용해 각 ON절에 명시할 수 도 있다. SELECT * FROM employees e LEFT JOIN dept_manager dm WHERE e.first_name='Smith' AND dm.emp_no=em.emp_no; 하지만, 위와 같은 형태의 쿼리는 MySQL 옵티마이저가 LEFT JOIN이 아니라 INNER JOIN으로 고쳐서 실행해 버리므로, 의도한 결과와는 다른 결과가 나오게 된다. 따라서 LEFT JOIN 뿐만 아니라 INNER JOIN에서도 SQL 표준 조인 표기법으로 작성하고 반드시 조인 조건은 WHERE 절이 아니라 조인의 ON 절에 명시하자! 테이블 별..
[Real MySQL] 6장(1). 실행 계획
실행 계획이란? DBMS의 쿼리 실행에서 같은 결과를 만들어 내는 데 한 가지 방법만 있는 것이 아니라, 아주 많은 방법이 있지만 그중에서 어떤 방법이 최적이고 최소의 비용이 소모될지 결정해야 한다. DBMS에서 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업을 옵티마이저가 담당한다. EXPLAIN MySQL에서는 EXPLAIN이라는 명령으로 쿼리의 실행 계획을 확인할 수 있다. 쿼리 실행 절차 MySQL 서버에서 쿼리가 실행되는 과정은 크게 3가지로 나눌 수 있다. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 SQL 파스 트리를 만든다. (SQL 파싱이..
[Real MySQL] 5장. 인덱스
디스크 읽기 방식 CPU나 메모리와 같은 주요 장치는 ⇒ 전기적 장치 디스크 드라이브 ⇒ 기계식 장치 따라서 데이터베이스 서버에서는 항상 디스크 장치가 병목 지점이 된다. 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 많음. 이러한 기계식 디스크 드라이브를 대체하기 위해 전자식 저장 매체인 SSD가 출시되고 있음. (SSD는 기존의 디스크 드라이브에서 데이터 저장용 플러터를 제거하고 플래시 메모리를 장착하고 있음) 랜덤 I/O와 순차 I/O 랜덤 I/O, 순차 I/O 모두 디스크 드라이버의 플래터를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미. 디스크에 데이터를 쓰고 읽는데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로..
[Real MySQL] 4장. 트랜잭션과 잠금
트랜잭션 vs 잠금 트랜잭션 데이터의 정합성을 보장하기 위한 기능 논리적인 작업셋을 모두 완벽하게 처리하거나 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상(Partial Update)이 발생하지 않게 만들어주는 기능. 잠금 동시성을 제어하기 위한 기능 여러 커넥션에서 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 1. 트랜잭션 MySQL 스토리지 엔진별 트랜잭션 지원 스토리지 엔진 중 MyISAM, MEMOERY은 트랜잭션을 지원하지 않음. 반면 InnoDB는 트랜잭션을 지원함. (참고로 트랜잭션은 개발자를 괴롭히는 것이 아니라, 애플리케이션 개발에서 고민해야 할 문제를 엄청 줄여주는 천사 같은 기능이다) 트랜잭션 주의사항 트랜잭션의 범..