책/RealMySQL8.0 4

트랜잭션과 잠금 1

트랜잭션은 작업의 완전성을 보장해주는것이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우 원 상태로 복구해 작업의 일부만 적영되는 현상이 발생하지 않게 만들어주는 기능. 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기위한 기능 MySQL에서의 트랜잭션 MyISAM 엔진에서는 Transaction 이 적용되지 않는다. Transaction이 필요할 경우 InnoDB와 같은 스토리지 엔진을 사용하자  트랜잭션 사용시 주의사항1. 꼭 필요한 최소한의 코드에만 적용하자 - 메일 전송이나 FTP 파일 전송 작업 또는 네트워크 통신 같은 작업에서는 어떻게서든 DBMS의 트랙잭션 내에서 제거하는편이 좋다. 프로그램이 실행되는 동안 메일서버와 통신할 수 없는 상황이 발..

책/RealMySQL8.0 2024.10.10

실행 계획 2

책에서는 가독성이 좋은 테이블 포맷으로 실행계획을 살펴본다.각각의 실행계획 테이블 컬럼들의 역할을 알아보자, 1. id 각각의 셀렉트를 분리해 구분할 수 있다. 이것을 단위 쿼리라한다.예를 들어 셀렉트절에 서브쿼리가 존재한다면 셀렉트절이 두개이므로 실행 계획에는 셀렉트절의 아이디가 1 , 2 두개가 존재할것이다.  2.select_type 각각의 select 쿼리가 어떤 타입의 쿼리인지 알려주는 컬럼simple UNION이나 서브쿼리를 사용하지 않는 단순한 셀렉트 쿼리 아무리 복잡한 쿼리라도 실행 계획에서 simple 단위 쿼리는 단 한개만 존재한다.  일반적으로 가장 바깥 쿼리가 simple로 표시된다.PRIMARYUINON이나 서브쿼리를 가지는 셀렉트 쿼리에서 가장 바깥쪽에 있는 단위쿼리 UNIONU..

책/RealMySQL8.0 2024.08.05

실행 계획 1

MySQL Engine 의 Optimizer는 사용자의 쿼리를 최적으로 처리할 수 있게 계획을 수립하지만,매번 옵티마이저가 최적의 쿼리 실행 계획을 수립하는것은 아니다.  때문에 Explain 명령어로 쿼리 사용자가 옵티마이저가 수립한 쿼리 실행 계획을 확인 할 수 있다.  비용 기반 최적화에서 가장 중요한것은 통계 정보다. 통계 정보란 만약 1억건의 데이터가 담겨져 있는 테이블이 존재하지만, 1억건이란 데이터의 통계 정보가 갱신되지않아 옵티마이저가 10건 미만의 테이블로 인식한다면  옵티마이저는 해당 테이블을 10건 미만의 테이블로 인식하고 실행 계획을 수립하게 된다.( 이럴 경우 인덱스를 활용하지않고 테이블 풀스캔으로 성능 저하가 우려 된다.  부정확한 통계 정보로인해 0.1초만에 끝낼 쿼리가 1시간..

책/RealMySQL8.0 2024.08.04

MySQL Engine Architecture

mysql 서버는 사람의 머리 역할을 담당하는 MySQL Engine손발 역할을 담당하는 storage Engine 으로 구분 가능. SQL Parser , Optimizer ... -> MySQL EngineData 를 Disk에 저장하거나 Disk에서 읽어오는 역할 -> Storage Engine MySQL Engine은 단 한개지만 Storage Engine은 여러개를 동시에 사용 가능. 따라서 CREATE TABEL Query에서 각각의 Storage Engine을 지정해 사용이 가능하다. CREATE TABLE inno_db_table (foo INT) ENGINE=INNODB; MySQL Engine 작업 중 데이터를 쓰거나 읽기가 필요할 때 Storage Engine에 쓰기 또는 읽기 요청을..

책/RealMySQL8.0 2024.08.03