알쓸코지
article thumbnail
[MySQL] 실행 계획 - partitions 칼럼
Backend/Database 2024. 2. 15. 22:37

Real MySQL 8.0 - 10.3.4 partitions 칼럼 부분을 공부하는데 파티션에 대한 이해도가 부족해서 설명이 완벽하게 이해되지 않았다. 그래서 해당 내용을 이해하기 위해 필요한 부분 위주로 간단히 정리해보고자 한다. 파티션이란? 대용량 테이블이나 인덱스를 작은 논리적 단위로 나누는 것 파티션 기능은 테이블을 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리해서 관리할 수 있게 해 준다. 파티션이 필요한 경우는? 주로 대용량의 테이블을 여러 개의 소규모 테이블로 분산하는 목적으로 사용함 인덱스 크기가 과도하게 커질 때 인덱스가 커지면 SELECT 뿐만 아니라 INSERT, UPDATE, DELETE 작업도 함께 느려진다. `인덱스의 크기 > MySQL이 사용 가능한 메모..

article thumbnail
[MySQL] 히스토그램
Backend/Database 2024. 2. 7. 21:12

히스토그램(Histogram)이란? 칼럼의 데이터 분포를 시각적으로 나타내는 통계 정보로 MySQL 8.0 버전부터 사용 가능하다. 데이터의 빈도를 그룹화하여 각 그룹의 빈도를 막대그래프로 표시한다. 데이터의 분포를 빠르게 이해하고 이상치를 감지하는 데 도움이 되며, MySQL의 옵티마이저가 쿼리 실행 계획을 수립할 때 활용된다. 히스토그램 정보 수집 과정 1. 다음 명령을 실행하여 히스토그램 정보를 수동으로 수집 및 관리 (자동 수집 X) ANALYZE TABLE 테이블명 UPDATE HISTOGRAM ON 칼럼명; 2. 수집된 히스토그램 정보를 시스템 딕셔너리에 저장 3. MySQL 서버가 시작될 때 딕셔너리의 히스토그램 정보를 `information_schema` 데이터베이스의 `column_sta..

article thumbnail
[MySQL] Read Ahead에 대해서 알아보자
Backend/Database 2024. 1. 25. 23:02

InnoDB 스토리지 엔진은 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드(Read ahead) 작업이 자동으로 시작된다. - Real MySQL 8.0의 9.2.1 책에서 리드 어헤드에 대해서 간단히 언급하고 지나갔는데, 더 자세히 알아보고 싶어서 정리하게 되었다. 풀 테이블 스캔 `풀 테이블 스캔(Full Table Scan)`은 인덱스를 사용하지 않고, 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업으로, 테이블의 레코드 건수가 너무 작거나 적절한 인덱스가 없을 때 이 방식을 사용한다. 풀 테이블 스캔 방식의 문제점은 테이블의 모든 행을 순차적으로 읽어오기 때문에 상당히 많은 디스크 I/O가 필요하다는 것인데, 대부분의 DBMS는 성능 최적화..

article thumbnail
[MySQL] 암호화 알고리즘
Backend/Database 2024. 1. 11. 21:14

Real MySQL 8.0 - 7.1.1 2단계 키 관리에서 MySQL 서버의 TDE에서 지원되는 암호화 알고리즘에 대해 설명하였는데,이와 관련하여 몇 가지 궁금증이 있어서 작성하게 되었다. MySQL 서버의 TDE에서 지원되는 암호화 알고리즘은 AES 256 비트이며, 이외의 알고리즘은 지원되지 않는다. 테이블스페이스 키는 AES-256 ECB(Electronic CodeBook) 알고리즘을 이용해 암호화되고, 실제 데이터 파일은 AES-256 CBC(Cipher Block Chaining) 알고리즘을 이용해서 암호화된다. Q1. 다양한 암호화 알고리즘 중 왜 AES 256만 지원할까? Q2. 테이블스페이스 키는 AES-256 ECB, 실제 데이터 파일은 AES-256 CBC 알고리즘을 이용하여 암호화..

article thumbnail
[MySQL] 격리성 수준에 따른 MVCC
Backend/Database 2024. 1. 4. 19:03

Real MySQL 8.0 - 4.2.3 MVCC에서 "MVCC가 격리 수준에 따라 동작하는 방식이 다를 수 있다"라고 하는데 직접 실습을 통해 더 알아보고 싶어서 작성하게 되었다. MVCC(Multi-Version Concurrency Control) 데이터베이스가 동시성을 제어하기 위해 사용하는 방법 중 하나로, 여러 트랜잭션이 동시에 데이터베이스에 접근할 때 발생할 수 있는 갱신 충돌을 방지하고 데이터 일관성을 유지하는데 도움을 준다. MySQL의 InnoDB에서는 Undo log를 활용하여 MVCC를 구현한다. 하나의 레코드에 대해 `여러 개의 버전(Multi Version)`이 동시에 관리된다. 트랜잭션의 격리 수준 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나..