Database 81

[Real MySQL] 13-1. 파티션: 개요

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 파티션 기능은 큰 테이블을 논리적으로 여러 개의 작은 단위로 나누어 저장하는 기능입니다. 1. 개요파티션을 사용하는 이유단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리파티션하지 않으면 인덱스도 커지고 그만큼 메모리 공간도 많이 필요해짐인덱스 크기가 메모리 사이즈보다 커지면 연산 시 성능이 심각하게 저하됨파티션은 데이터와 인덱스를 조각화해서 물리적 메모리를 효율적으로 사용할 수 있게 만들어줌 데이터의 물리적인 저장소를 분리데이터나 인덱스가 파일 시스템에서 차지하는 공간이 크다면 백업이나 관리작업이 어려워짐단, 파티션별 인덱스를 따로 가지는 것은 지원하지 않음 이력 데이터의 효율적인 관리라이프 사이클이 짧음불필요해진 데이터..

Database/Mysql 2025.03.12

[Real MySQL] 10-3. 실행 계획: 실행 계획 분석

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.  1. id 칼럼테이블들이 조인될 경우, 같은 id 값을 할당받음id 값은 테이블의 접근 순서를 의미하지 않음같은 id라면 먼저 올라온 것이 먼저 접근된 순서임을 의미함 2. select_type 칼럼각 단위 select 쿼리가 어떤 타입의 쿼리인지 표시되는 컬럼 select_type설명예제SIMPLE단순한 SELECT 쿼리로, 서브쿼리를 사용하지 않음. PRIMARYUNION이나 서브쿼리를 포함하는 쿼리에서 가장 바깥쪽의 SELECT 쿼리. UNIONUNION으로 결합된 SELECT 쿼리 중 두 번째 이후의 쿼리. DEPENDENT UNION서브쿼리 내에서 UNION 또는 UNION ALL로 결합된 테이블. UNION RESULT..

Database/Mysql 2025.03.12

[Real MySQL] 10-2. 실행 계획: 실행 계획 확인

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 출력 포맷단순 테이블 형태JSON (FORMAT 옵션)TREE (FORMAT 옵션) 2. 쿼리 실행 시간 확인EXPLAIN ANALYZE실행 계획 및 단계별 소요 시간 정보 확인 TREE 형태들여쓰기는 호출 순서를 의미함같은 레벨에서는 상단에 위치한 라인이 먼저 실행다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행 예시explain analyze select e.hire_date, avg(s.salary) from employees e inner join salaries s on s.emp_no = e.emp_no and s.salary > 50000 and s.from_date '1990-01-..

Database/Mysql 2025.03.12

[Real MySQL] 10-1. 실행 계획: 통계 정보

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 테이블 및 인덱스 통계 정보통계 정보가 비용 기반 최적화에 가장 중요함 MySQL 서버의 통계 정보InnoDB 스토리지 엔진을 사용하는 테이블에 대한 통계 정보를 영구적으로 관리할 수 있음서버가 재시작되어도 재사용이 가능함 통계 테이블 mysql.innodb_table_statsmysql.innodb_index_stats 통계 테이블 컬럼select * from mysql.innodb_index_stats where table_name ='employees';stat_name='d_diff_pfx01': 인덱스가 가진 유니크한 값의 개수stat_name='n_leaf_pages': 인덱스의 리프 노드 페이지 개수stat_nam..

Database/Mysql 2025.03.12

[Real MySQL] 9-3. 옵티마이저와 힌트: 힌트

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 인덱스 힌트STRAIGHT_JOIN조인 순서를 고정하는 역할을 담당함from 절에 명시된 테이블의 순서대로 조인을 수행하도록 유도함기본적으로 여러 개의 테이블이 조인되는 경우, 어떤 테이블이 드라이빙 테이블이 될지 모름 (통계 정보 기반으로 수립됨) 옵티마이저 힌트인 동시에 조인 키워드select straight_join e.first_name, e.last_name, d.dept_name from employees e, dept_emp de, departments d where e.emp_no=de.emp_no and d.dept_no=de.dept_no; select /*! straight_join */ e.f..

Database/Mysql 2025.03.11

[Real MySQL] 9-2. 옵티마이저와 힌트: 고급 최적화

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 옵티마이저 스위치 옵션조인 옵션optimizer_switch 시스템 변수옵티마이저 스위치 옵션 등록을 위한 키로 사용됨 MRR과 배치 키 액세스 (batch key access)Multi-Range Read네스티드 루프 조인의 단점을 보완함 (레코드를 매번 새롭게 랜덤 액세스하므로 최적화하여 읽을 수 없음)조인 대상 테이블 중 하나로부터 레코드를 읽어서 조인 버퍼에 버퍼링함조인 버퍼에 레코드가 가득차면, MySQL 엔진은 버퍼링된 레코드를 스토리지 엔진으로 한번에 요청함읽어야 할 레코드를 정렬된 순서로 접근해서 디스크 읽기를 최소화 할 수 있음배치 키 엑세스MRR을 응용해서 실행되는 조인 방식부가적인 정렬 작업이 필요함 (성능..

Database/Mysql 2025.03.10

[Real MySQL] 9-1. 옵티마이저와 힌트: 기본 데이터 처리

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 개요쿼리 실행 절차SQL ParserSQL 문장을 잘게 쪼개서 Parse Tree 생성 (MySQL 서버가 이해할 수 있음)SQL Parser라는 모듈이 담당함문법 검사최적화 및 실행 계획 수립Parse Tree를 참조하여 결정함불필요한 조건 및 복잡한 연산의 단순화어떤 테이블을 먼저 읽을 것인지인덱스 통계 정보를 이용해 사용할 인덱스 결정가져온 레코드들을 임시 테이블에 넣고 추가로 가공해야 할지 여부 결정스토리지 엔진으로부터 데이터를 가져옴 옵티마이저 종류데이터베이스 서버에서 두뇌와 같은 역할최적의 실행 계획을 수립함 비용 기반 최적화 쿼리를 처리하기 위한 여러 가지 방법을 만듬실행 계획별 비용을 산출 (각 단위 작업의 비용 ..

Database/Mysql 2025.03.09

[Real MySQL] 7-2. 데이터 암호화: 테이블 & 로그

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 테이블 암호화일반적인 테이블 생성 구문과 동일 암호화테이블 생성 ENCRYPTION 옵션 추가하기default_table_encrtyption 시스템 변수 활성화하기 응용 프로그램 암호화버퍼 풀에 데이터가 암호화되어 적재됨인덱스를 사용할 수 없음평문의 내용을 바로 확인할 수 없음 테이블스페이스 이동테이블의 데이터 파일만 백업했다가 복구 Flush 명령어FLUSH TABLES source_table FOR EXPORT;source_table 구조를 source_table.cfg에 저장source_table.ibd와 source_table.cfg를 목적지 서버로 복사UNLOCK TABLES 명령어를 수행하여 잠금 풀기 2. 언두 로..

Database/Mysql 2025.03.09

[Real MySQL] 7-1. 데이터 암호화: MySQL 서버

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. MySQL 서버의 데이터 암호화TDE스토리지 엔진의 I/O 레이어와 디스크 사이에서 암호화/복호화 수행즉, 데이터 파일이 디스크에 저장될 떄 암호화되고 읽을 떄 복호화됨MySQL 서버에서는 테이블의 데이터가 암호화되있는지 여부를 파악할 필요 없음 2단계 키 관리master key데이터베이스 전체의 키를 관리하는 최상위 키 (데이터를 암호화는 것이 아니라, tablespace key를 암호화)파일에 의해 관리되므로 보안상 주기적으로 변경해야 함키 변경) ALTER INSTANCE ROTATE INNODB MASTER KEY; tablespace key (private key)각 테이블마다 개별적으로 존재하는 키마스터 키에 의해 암..

Database/Mysql 2025.03.09

[Real MySQL] 6. 데이터 압축

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 페이지 압축디스크에 저장하는 시점에 페이지가 압축되어 저장됨디스크에서 페이지를 읽어올 때 압축이 해제됨 압축 크기한 페이지가 어느 정도로 압축될지는 모름단, 특정 테이블의 페이지 크기는 모두 동일함 펀치홀운영체제의 파일 압축 기능MySQL에서는 16KB를 유지하면서 압축 후, 남은 공간은 운영체제에 반납하여 공간을 절약함 (실제로는 압축된 페이지만 사용)여러 문제점으로 인해 잘 사용되지 않음 문제점운영체제 뿐만 아니라, 하드웨어 자체에서도 지원해야 함파일 시스템 관련 명령어가 펀지 홀을 지원하지 못함 (복구하는 과정에서 남은 공간까지 가져올 수 있음) 설정CREATE TABLE t1 (c1 INT) COMPRESSION="zl..

Database/Mysql 2025.03.08