[DB] 트랜잭션 격리 수준

함민혁·2023년 9월 4일
0

cs면접준비

목록 보기
40/43

Isolation level
여러 트랜잭션이 동시에 처리될 떄, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것

격리 수준이 높은 순서대로

SERIALIZABLE
REPEATABLE READ
READ COMMITTED
READ UNCOMMITED

SERIALIZABLE
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층
가장 엄격한 격리 수준, 트랜잭션을 순차적으로 진행시킴, 여러 트랜잭션이 동일한 레코드에 동시접근 불가능
동시처리 성능 매우 떨어짐
가장 안전하지만 가장 성능이 떨어지므로 극단적으로 안전을 필요로하는 작업이 아니라면 사용하면 안됨

선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때 까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허 + 새로운 레코드 삽입도 막아 완벽한 읽기 일관성 보장

REPEATABLE READ
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층
일반적인 RDBMS는 변경 전의 레코드를 undo 공간에 백업해둠 그러면 변경 전 후 데이터가 모두 존재하므로 동일한 레코드에 대해 여러 버전의 데이터가 존재함( MVCC )
REPEATABLE READ는 MVCC를 이용해 한 트랜잭션 내에서 동일한 결과를 보장함. 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 불가능 MySql에서 디폴트로 사용하는 격리 수준임

선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때 까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허

READ COMMITTED
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 계층
커밋된 데이터만 조회 가능. Phantom Read + Non-Repeatable Read 문제 발생
트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기하게 됨
대부분의 SQL 서버가 Default로 사용하는 Isolation Level임

커밋된 데이터만 읽는 것을 허용

READ UNCOMMITED
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층
트랜잭션이 처리중이거나, 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용함
데이터 일관성 유지 불가능

아예 격리가 되지 않는 레벨

사진 출처 : https://mangkyu.tistory.com/299

저장 프로시저의 장단점

저장 프로시저는 데이터베이스의 성능을 향상시키고 보안을 강화하며 데이터 일관성을 보장하는 데 도움이 되지만, 코드의 복잡성과 유지 관리 과정에서의 어려움과 같은 단점도 있습니다. 사용 사례와 요구 사항에 따라 저장 프로시저를 적절하게 사용하는 것이 중요합니다.

이상 현상의 종류에 대해 설명해주세요

이상현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 논리적 오류를 말함.
삽입 이상, 갱신 이상, 삭제 이상이 있음. 삽입 이상은 자료 삽입시 특정 속성이 없는 경우 null을 입력해야 하는 현상, 갱신 이상은 중복된 데이터 중 일부만 수정되어 모순된 상황이 나오는 현상, 삭제 이상은 어떤 정보를 삭제했을 시, 의도하지 않은 다른 정보까지 삭제되는 현상을 말함.
이러한 이상 현상을 예발하기 위해 정규화 사용

profile
Born to be FE developer 🧑🏻‍💻

0개의 댓글