![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN1aH9%2FbtsEClDqpRl%2FB3Ardc5fhgKxiMd2YZy25k%2Fimg.png)
히스토그램(Histogram)이란? 칼럼의 데이터 분포를 시각적으로 나타내는 통계 정보로 MySQL 8.0 버전부터 사용 가능하다. 데이터의 빈도를 그룹화하여 각 그룹의 빈도를 막대그래프로 표시한다. 데이터의 분포를 빠르게 이해하고 이상치를 감지하는 데 도움이 되며, MySQL의 옵티마이저가 쿼리 실행 계획을 수립할 때 활용된다. 히스토그램 정보 수집 과정 1. 다음 명령을 실행하여 히스토그램 정보를 수동으로 수집 및 관리 (자동 수집 X) ANALYZE TABLE 테이블명 UPDATE HISTOGRAM ON 칼럼명; 2. 수집된 히스토그램 정보를 시스템 딕셔너리에 저장 3. MySQL 서버가 시작될 때 딕셔너리의 히스토그램 정보를 `information_schema` 데이터베이스의 `column_sta..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp4oGV%2FbtsEhoPzM1E%2FLeaKITDubDXebCg8hoQKN0%2Fimg.png)
InnoDB 스토리지 엔진은 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드(Read ahead) 작업이 자동으로 시작된다. - Real MySQL 8.0의 9.2.1 책에서 리드 어헤드에 대해서 간단히 언급하고 지나갔는데, 더 자세히 알아보고 싶어서 정리하게 되었다. 풀 테이블 스캔 `풀 테이블 스캔(Full Table Scan)`은 인덱스를 사용하지 않고, 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업으로, 테이블의 레코드 건수가 너무 작거나 적절한 인덱스가 없을 때 이 방식을 사용한다. 풀 테이블 스캔 방식의 문제점은 테이블의 모든 행을 순차적으로 읽어오기 때문에 상당히 많은 디스크 I/O가 필요하다는 것인데, 대부분의 DBMS는 성능 최적화..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA4K1M%2FbtsDCUaFjs4%2FZarz0XK3VmtVHiyypfKpJ1%2Fimg.png)
Real MySQL 8.0 - 8.3.2에서 인덱스 키 추가 및 삭제 과정에 대한 설명이 쭉 나와 있는데, 시각화된 자료가 없어서 동작 과정이 와닿지 않았다. 그러던 중 B-Tree Visualization이라는 좋은 사이트를 알게 되어서 직접 조작하여 눈으로 확인해보고자 한다. B-Tree란? 자식 노드의 개수가 2개 이상인 트리 하나의 노드가 최대 `M`개의 자식을 가질 수 있는 B-Tree를 `M차 B-Tree`라고 부른다. 각 노드는 최대 `M - 1`개의 key를 가질 수 있다. 노드의 데이터 수가 `N`개라면, 자식 노드의 개수는 `N + 1`개이다. 노드의 데이터는 항상 정렬된 상태여야 한다. 노드의 자식 노드들은 노드 데이터를 기준으로 더 작은 값을 왼쪽 서브 트리에, 더 큰 값들은 오른쪽..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM4e3z%2FbtsDnu3awoN%2FiDTdcJzzoukxjMndvAgb50%2Fimg.png)
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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCiwB9%2FbtsCX37fA6T%2FDbGxmkIJ1T9ZAb0ZRLbLx1%2Fimg.png)
Real MySQL 8.0 - 4.2.3 MVCC에서 "MVCC가 격리 수준에 따라 동작하는 방식이 다를 수 있다"라고 하는데 직접 실습을 통해 더 알아보고 싶어서 작성하게 되었다. MVCC(Multi-Version Concurrency Control) 데이터베이스가 동시성을 제어하기 위해 사용하는 방법 중 하나로, 여러 트랜잭션이 동시에 데이터베이스에 접근할 때 발생할 수 있는 갱신 충돌을 방지하고 데이터 일관성을 유지하는데 도움을 준다. MySQL의 InnoDB에서는 Undo log를 활용하여 MVCC를 구현한다. 하나의 레코드에 대해 `여러 개의 버전(Multi Version)`이 동시에 관리된다. 트랜잭션의 격리 수준 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나..