MySQL 5

CH17 Innodb 클러스터

mysql5.7버전에서 나온 빌트인 형태의 HA 솔루션 구성 요소 그룹 복제 소스 서버의 데이터를 레플리카 서버로 동기화하는 기본적인 복제 역할뿐만 아니라 복제에 참여하는 MySQL들에 대한 자동화된 멤버십 관리 역할 담당 MySQL 라우터 애플리케이션 서버와 MySQL 서버 사이에서 동작하는 미들웨어 프로그램. 애플리케이션이 실행한 쿼리를 적절한 MySQL서버로 전달하는 Proxy 역할 담당 MySQL shell 기존 MySQL 클라이언트보다 좀 더 확장된 기능. SQL뿐 아니라 자바스크립트 및 파이썬 작성 가능. 클러스터 구성등의 어드민 기능 가능 구성 형태 그룹 복제에 설정된 모드에 따라서 복제 그룹 내에서 프라이머리는 하나만 존재할 수도 있고 여러대가 존재할 수도 있다. 그룹 복제 row포멧 바이..

MySQL 2023.08.26

Real MySQL 파티션

CH13 파티션 파티션을 사용하는 이유 테이블이 커져서 인덱스의 크기가 물리적인 메모리보다 크거나, 데이터 특성상 주기적인 삭제가 필요한 경우 단일 insert와 범위 select의 빠른 처리 결과적으로 파티션은 데이터와 인덱스를 조각화해서 물리적 메모리를 효율적으로 사용하게끔 함 이력 데이터의 효울적인 관리 불필요한 데이터 삭제작업은 단순히 파티션을 추가하거나 삭제하는 방식으로 빠르고 간단하게 해결 Q. 파티션이 없다면 불필요한 데이터 삭제는 어떤식으로 할 수 있을까 ? soft delete / hard delete 파티션 테이블의 레코드 insert 파티션 키를 통해 insert되어야할 파티션을 선정 후 일반 테이블에 insert하는 것과 동일하게 처리된다. 파티션 키 컬럼이 변경될때는 기존 파티션에..

MySQL 2023.08.04

Real MySQl CH11 쿼리 작성 및 최적화

INSERT … ON DUPLICATE KEY UPDATE 일반적인 INSERT가 수행되나, PK나 UK에 중복이 발생하면 UPDATE문이 수행된다. LODA DATA 데이터를 빠르게 적재하는 방법 단점 단일 스레드로 실행 데이터가 매우 크다면 시간이 매우 길어진다. 레코드 insert 및 인덱스 insert가 단일 쓰레드로 직렬 수행 단일 트랜잭션으로 실행 언두로그 사이즈가 커지며, 레코드를 읽는 쿼리들이 필요한 레코드를 찾는데 더 많은 오버헤드 발생 해결방안 LODA DATA로 적재할 파일을 여러개로 준비 테이블간 복사 작업이라면 INSERT .. SELECT 작업으로 진행, PK값을 기준으로 나눠서 진행 Q. 데이터를 빠르게 저장하는 다른 방법은 뭐가 있을까? 기존에 존재하는 테이블이라면 인덱스 및..

MySQL 2023.07.21

MySQL binlog format

binlog를 저장하는 format은 3가지가 있다. STATEMENT format ROW format MIXED format global 및 각 세션마다 binlog format을 설정할 수 있다. mysql> SET GLOBAL binlog_format = 'ROW'; mysql> SET SESSION binlog_format = 'STATEMENT'; mysql> SET SESSION binlog_format = 'ROW'; mysql> SET SESSION binlog_format = 'MIXED'; 1. ROW format 변경된 row를 binary format으로 binlog에 저장한다. Each row may consist of a Before Image (BI) and/or an Afte..

MySQL 2022.06.08

NULLABLE 컬럼에 대한 인덱스 사용 ( Oracle vs MySQL)

* 요약 오라클에서는 NULL 값을 인덱스에 저장하지 않는다. 따라서 오라클에서는 NULL 이 허용된 컬럼에 대해 인덱스를 생성해도 IS NULL 혹은 IS NOT NULL 조건으로 조회시 인덱스를 사용할 수 없고, group-by 혹은 distinct 사용시 인덱스를 사용할 수 없다. (NULL이 있는지 없는지 FULL SCAN을 해야만 알 수 있으므로) 하지만 MySQL/Maria 에서는 NULL 값도 인덱스에 저장한다. 따라서 컬럼을 IS NULL 혹은 IS NOT NULL로 비교해서 인덱스를 사용할 수 있고, group-by 및 distinct 사용시 인덱스를 사용할 수 있다. https://dev.mysql.com/doc/refman/8.0/en/is-null-optimization.html 1..

MySQL 2022.05.10