mysql 트랜잭션

Koder·2023년 1월 28일
0

세션 커밋 옵션

set autocommit true;
set autocommit false; // 반드시 commit 커맨드 별도 호출

트랜잭션

SHOW ENGINE INNODB STATUS;
SELECT * FROM information_schema.innodb_locks; // 잠금 상태
SELECT * FROM information_schema.innodb_trx; // 트랜잭션 상태 
  • 데이터 정합성을 보장해주는 메커니즘
  • 갯수에 관계없이 작업의 묶음을 말하며 작업이 끝나면 COMMIT/ROLLBACK 보장하는것
  • 트랜잭션의 점유 시간동안 커넥션도 점유하여 불필요한 작업이 엮이면 고갈될수 있다.

Engine(InnoDB)

  • 동시접속 처리가 많은 업무에 최적이다.
  • 트랜잭션이 필요하고 용량이 크고 많은 데이터 관리시에 적합하다.
  • 풀텍스트 인덱스를 지원하지 못한다.
  • 인덱스를 테이블 영역에 같이 저장한다.
  • 쿼리중 일부 오류가 발생하면 원상복귀 한다.

Engine(MyISAM)

  • 트랜잭션이 필요없고 읽기 위주 작업시에 사용한다.
  • 테이블 자체에 COUNT를 갖고있어 부담없이 count() 함수 사용이 가능하다.
  • 테이블 전체에 LOCK 걸리는점과 용량이 크면 WRITE/UPDATE 성능이 저하된다.
  • 풀텍스트 인덱스 지원한다.
  • 인덱스를 테이블 영역과 별도로 나누어 저장한다.

격리 수준

-DIRTY READNON_REPEATABLE_READPHANTOM-READ
READ-UNCOMMITTEDOOO
READ-COMMITTEDXOO
REPEATABLE-READXXO(innodb는 X)
SERIALIZABLEXXX

READ-UNCOMMITED

  • COMMIT/ROLLBACK의 최종 처리가 되기전에 서로 다른 트랜잭션에서 DIRTY READ가 된다.
  • DIRTY-READ는 데이터가 나왔다 사라졌다 하는 아이러니한 현상을 말한다.

READ-COMMITED

  • 오라클에서는 기본 타입으로 지정하고 온라인에서 많이 이용되는 방식이다.
  • DIRTY-READ 현상은 발생하지 않는다.

REPEATABLE-READ

  • MySql의 InnoDB의 기본적인 격리 수준 속성이다.

REPEATABLE-READ VS READ-COMMITED

REPEATABLE-READ가 READ-COMMITED보다 성능이 떨어지는 점이 있는대 한 트랜잭션을 열고서 모든 테이블을 조회한후 계속 냅둔다면
InnoDB의 Undo 영역이 계속 용량이 커지고 테이블 스페이스 IO가 유발되는 사례가 있다.
하지만 일부로 의도적이 아니라면 그외 성능차이는 크게 나지 않는다.
바이너리 로그가 활성화된 MySQL서버에서는 READ-COMMITTED 수준을 사용할수 없다.

profile
일단 적고 보자

0개의 댓글