MySQL

    [MySQL] 파티션

    Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. 파티션 데이터베이스의 크기가 커지면서 발생하는 용량의 한계와 성능 저하를 해결하기 위해 데이터를 여러 부분으로 분할하는 작업을 의미한다. 파티션이 필요한 경우 하나의 테이블이 너무 커서 인덱스의 크기가 물리적 메모리를 초과할 경우 데이터 특성상 주기적인 삭제 작업이 필요한 경우 파티션의 장점 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리 인덱스의 워킹 셋이 실질적인 물리 메모리보다 크다면 SELECT 뿐만 아니라 UPDATE, DELETE 등 모든 쿼리 처리가 상당히 느려질 것이다. 파티션은 데이터와 인덱스를 조각화하여 물리적 메모리를 효율적으로 사용할 수 있도록 해준다. 워킹셋: 데이터 중 활발하게 사용되는 부분. 워킹..

    [MySQL] 트랜잭션과 잠금

    Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. 트랜잭션 트랜잭션이란 데이터베이스에서 더 이상 쪼갤 수 없는 작업의 최소 단위이다. 이 작업 안의 연산들은 모두 반영되거나(commit) 모두 반영되지 않아야 한다(rollback). MySQL의 격리 수준 여러 트랜잭션이 동시에 처리되고 있을때, 트랜잭션 간의 데이터의 조회, 변경에 대한 고립 정도를 나타내는 것을 격리 수준이라고 한다. READ UNCOMMITTED 각 트랜잭션이 commit, rollback 여부와 관계 없이 다른 트랜잭션의 값을 읽을 수 있다. 이름그대로 커밋되지 않은 데이터를 읽을 수 있는 격리 수준을 뜻한다. 이로 인해 Dirty Read 현상이 일어나게 된다. Dirty Read 완료되지 않은 트랜잭션의 데..

    [MySQL] MySQL 엔진 아키텍처

    Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. MySQL 엔진 아키텍처 MySQL 엔진 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 처리를 수행한다. MySQL엔진은 커넥션 핸들러, SQL 파서, 전처리기, 옵티마이저로 구성되어 있다. 또한 MySQL은 표준 SQL 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행될 수 있다. 스토리지 엔진 디스크 스토리지에 실제 데이터를 저장하고 읽어오는 부분을 전담한다. 하나의 MySQL 서버에서 MySQL 엔진은 하나이지만, 스토리지 엔진은 여러개를 동시에 사용할 수 있다. 각 스토리지 엔진은 성능 향상을 위해 키 캐시나 InnoDB 버퍼 풀 같은 기능을 내장하고 있다. 핸들러 A..

    [MySQL] 실행 계획

    Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. 실행 계획이란? 옵티마이저가 쿼리를 실행하기 전 쿼리와 통계정보를 통해 세운 최적의 계획 통계 정보 MySQL 5.7 버전까지는 테이블과 인덱스에 대한 개괄적인 정보만을 가지고 실행 계획을 수립했다. MySQL 8.0 버전부터는 인덱스되지 않은 컬럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램 정보가 도입되었다. 테이블 및 인덱스 통계 정보 주어진 쿼리의 자체의 가장 최적을 선택하는 질의 기반 최적화 방식과 비교하여, 비용 기반 최적화에서 가장 중요한 것은 통계 정보이다. MySQL 서버의 통계 정보 MySQL 5.5 버전까지는 각 테이블의 통계 정보가 메모리에 관리되었기 때문에, 서버 재시작시 수집된 통계 정보가 모두 사..

    [MySQL] InnoDB의 B-Tree Index

    Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. 디스크 읽기 방식 컴퓨터에서 CPU나 메모리 같은 전자식 장치와 달리 기계적 장치인 디스크는 상대적으로 속도가 느리다. 따라서 디스크 I/O 감소가 데이터베이스 성능 튜닝에 많은 영향을 주게 된다. HDD와 SSD의 차이점 이러한 기계식 하드디스크 드라이브를 대체하기 위해 전자식 저장 매체인 SSD가 많이 출시되고 있다. 또한 SSD도 하드 디스크 드라이브와 같은 인터페이스(SATA, SAS)를 지원하므로 내장 디스크나 DAS 또는 SAN에 그대로 사용할 수 있다. 원판을 기계적으로 회전시키는 하드디스크와 달리 SSD는 플래시 메모리를 사용하므로 상대적으로 데이터를 빨리 읽고 쓸 수 있다. 디스크의 헤더를 움직이지 않고 한 번에 많은 ..

    [Docker] Spring Boot와 MySQL을 docker-compose로 실행하자

    이전 게시글에선 서버에서 직접 어플리케이션 소스 코드를 다운받아 빌드하는 배포 방식을 사용했다면, 이번엔 도커를 사용하여 어플리케이션을 이미지로 만들어 배포하는 방식을 사용할 것이다. 따라서 본 게시글엔 이미지 배포의 첫번째 단계인 도커를 통한 이미지 빌드 방식을 서술하려고 한다. Docker 일관성 있는 운영환경의 중요성이 강조됨에 따라 컨테이너를 통한 배포 방식이 주를 이루며 사용되고 있다. 또한 어플리케이션의 코드 상의 문제를 테스트 코드에서 검증했다면, 운영상의 서버 설정 문제를 컨테이너에서 검증할 수도 있다. Dockerfile? docker-compose? docker를 처음 사용하려고 보면 어떤 곳에선 Dockerfile을, 어떤 곳에선 docker-compose를 사용하고 있다. 어떤 차이..