DataBase/MySql

MySql MyISAM, INNODB Lock 간단 정리(DB Lock, 테이블 락, 트랜잭션, 스토리지 엔진)

개발자 DalBy 2024. 5. 14. 15:50
반응형

어느 날 업무중에...

MySql의 스토리지 엔진의 MyISAM INNODB로 변경 해야하는 상황이 생겼었습니다.

처음 해보는 작업이라, 자료를 정리하는 중, 새롭고 재미있는 사실을 알게되어 좋은 시간이었던것 같습니다.

간략하게 알게 된 내용들을 정리 해 보았습니다.

 

스토리지 엔진의 특징

MyISAM : 디스크로 부터 페이지를 하나씩읽는다 (read only)

INNODB : 스토리지 엔진 특정 테이블 연속된 페이지가 읽히면 배크라운드 스레드에 의해 리드어헤드 작업이 자동 실행 다음에 읽게될 디스크를 예측해서 읽음

 

이 둘 엔진의 차이는

MyISAM의 경우 non-transactional 타입으로 rollback이 필요한 경우 수동으로 처리해야 한다고 한다.

INNODB의 경우 transaction 타입으로 rollback이 필요한 경우 자동으로 처리 된다고 한다.

 

어느 사용자가 특정 데이터 ROW를 SELECT가 아닌 transaction이 발생하는 조건으로 처리 한다고 하면

데이터의 동시 수정을 방지하기 위해 테이블을 locking 한다. MyISAM은 단일 세션에서 수정 가능하기에 하나의 사용자만

테이블을 변경해야 한다. 만약 다른 사람이 변경한다면, Table Lock을 볼 수 있다. 왜 read only라는 특징을 알 수 있었다.

INNODB는 테이블의 ROW만 잠그는 방식으로 다중 세션을 지원한다. 여러 사용자가 접근하여 사용할 수 있다. 다만 이러한 이유로 MyISAM 보다 처리 속도가 느리다고 합니다.

 

Lock

원칙과 동시성을 보장하기 위해 다양한 종류의 Lock을 사용한다고 한다.

 

해당 쿼리가 실행되면 조건절에 걸린 Row 혹은 그와 연관된 recode에 lock이 잡히고,
lock이 걸린 Row에 접근하여 값을 변경하려는 다른 트랜잭션들은 모두 블로킹(blocking)된다고 한다.

 

Record Lock

Record Lock은 DB Index Record에 걸리는 lock이라고 한다.

 

Gap Lock

Gap Lock은 Record 사이의 Lock이라고 한다. 해당 공간은 하나 이상의 Index Recode의 간격이거나 

Recode가 없는 부분이라고 한다.

 

Commit과 Roll-Back 되면 Lock이 해제된다.

 

transaction

transaction 격리수준 다음과 같다.
1 read uncommitted 커밋 읽기 x
2 read committed 커밋 읽기
3 repeatable read 반복 가능한 읽기
4 serializable 직럴화

 

 



반응형