책/RealMySQL
RealMySQL 5.1 - 트랜잭션
트랜잭션 in MySQL Transaction: 논리적인 작업 set 자체가 100% 적용되거나 (Commit) 아무것도 적용되지 않아야 (Rollback) 함을 보장해주는것 꼭 여러개의 변경작업을 수행할때만 의미있는 개념이 아님 MyISAM vs. InnoDB의 Transaction 차이 Insert 과정에서 모두 PK 중복으로 에러가 발생됌 하지만, MyISAM 테이블에서는 1,2는 INSERT 된 상태 (Partial Update) -> 정합성 맞추는데 많은 어려움 발생 그래서 애플리케이션 단에서 IF/ELSE, 데이터 확인 등으로 직접 Rollback까지 준비해야함 InnoDB에서는 되게 간단하게 구현 가능 트랜잭션 실행시 주의사항 프로그램 코드에서 트랙잭션의 범위를 최소화하는 것이 중요 책에 나..
RealMySQL 4.4 - MySQL 로그 파일(log file)
4.4. MySQL 로그 파일 에러 로그 파일 실행 도중 발생하는 에러/경고 메시지를 담은 로그 파일 생성 경로: my.cnf의 log_error에 정의 되어있는 경로에 생성 에러 로그 파일에 기록되는 다양한 메시지 유형: 설정 파일 변경 혹은 비정상적 종료 이후 재시작인 경우 예. 설정 변경이 있을 경우, 해당 로그를 통해 설정이 의도대로 설정이 되어있는지 확인 비정상적 종료 이후 트랜잭션 복구 시 발생한 경우 복구에 실패할 경우를 대비하여 에러 로그 확인 필요 해당 에러 로그를 보면서 innodb_force_recovery 파라미터 설정 필요 쿼리 처리 도중 에러가 발생한 경우 클라이언트 앱에서 정상적으로 연결 종료를 하지 못한 경우 이 로그를 확인하여 앱의 접속 종료 로직을 검토할 수 있음 max_..
RealMySQL 4.3 - MyISAM 스토리지 엔진 아키텍처
4.3. MyISAM 스토리지 엔진 아키텍처 키 캐시 키캐시 (InnoDB의 버퍼풀): 인덱스만을 대상으로 작동 인덱스의 디스크 쓰기 작업에 대한 버퍼링 역활 키 캐시 hit rate = 100 - (key_reads / key_read_requests * 100) Default 키캐시는 제한된 메모리가 존재 (예. 32비트 OS: 4GB) 제한된 메모리 보다 더 할당하고 싶으면 Default 키캐시 외 별도의 키캐시를 설정해야함 예: key_buffer_size: 4GB, kbuf_board.key_buffer_size: 2GB 추가 키캐시는 어떤 인덱스를 캐시할지 설정 필요 예: CACHE INDEX db1.board, db2.board IN kbuf_board 운영체제의 캐시 및 버퍼 MyISAM ..
RealMySQL 4.2 - InnoDB 스토리지 엔진 아키텍쳐 (2)
4.2.8 Double Write Buffer Partial-Page(Torn-Page) 원인 : redo log는 InnoDb 스토리지 엔진의 redo log 공간 낭비를 막기 위해, 페이지의 변경 내용만 기록 이 때문에, dirty page를 disk로 flush 할 때, 일부만 기록되는 문제가 발생할 수 있음 해당 페이지의 내용은 복구가 불가할 수 있음 다른 원인으로는 HW 오작동 / System 비정상 종료 Double-Write 기법(Dobule Write Buffer) 목적 : DoubleWrite buffer에 더티 페이지를 작성함으로써, 데이터 파일 쓰기 중간에 실패할 때(비정상 종료) 해당 버퍼의 내용과 file의 page들의 내용을 비교하여 안정성과 무결성을 높인다. 이름은 버퍼이나 D..
RealMySQL 4.2 - InnoDB 스토리지 엔진 아키텍쳐 (1)
InnoDB storage architecture storage engine 중 거의 유일한 record기반 lock 지원 동시성, 안정성 높음 cluster by primary key 기본적으로 primary key 기준 clustering key 순서로 disk에 저장 secondary index는 record를 참조하지 않음, primary key를 참조 primary key를 이용한 range scan 성능 향상, primary 비중이 높음(실행계획도 primary 기준으로) MyIsam에선 clustering key 지원 안함 foreigner key InnoDB storage engine level에서 지원 / MyIsam, memory engine에선 지원 안함 부모, 자식 DB 칼럼에 in..
RealMySQL 4장 - 4.1 MySQL 엔진 아키텍처
RealMySQL 8.0 (4장 아키텍처) 4.1 MySQL 엔진 아키텍처 크게 MySQL 서버의 구조를 나누었을 때 3가지로 나눌 수 있다. MySQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러 SQL파서 및 전처리기, 옵티마이저 등으로 이루어짐 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로 부터 데이터를 읽어오는 역할 InnoDB, MyISAM ... MySQL 서버에서 MySQL 엔진은 하나지만, 스토리지 엔진은 여러 개를 동시에 사용 가능 각 스토리지 엔진은 성능 향상을 위해 키 캐시나 InnoDB 버퍼 풀과 같은 기능을 내장 핸들러 API MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽을 때 각 스토리지 엔진에 쓰기/읽기를 요청하는 것을..