MVCC(Multi Version Concurrency Control)

⇒ 잠금을 사용하지 않는 일관된 읽기를 제공

  • InnoDB의 undo log를 이용해서 이 기능을 구현
  • 멀티 버전이란 하나의 레코드에 여러 개의 버전이 존재한다는 것

예시

  • 여기서 데이터 조회를 진행한다면 시스템 변수의 격리수준에 따라서 값이 달라진다. 우선 READ_UNCOMMITED의 경우에는 InnoDB의 버퍼풀에 존재하는 값을 조회하도록한다. 하지만 READ_COMMITED이나 그 이상(REPEATABLE_READ, SERIALIZABLE)의 경우에는 undo log에 있는 데이터 즉 아직 확정되지 않은 값을 가져온다. 즉 하나의 레코드에 2개의 버전이 유지되고, 필요에 따라 어느 데이터가 보여지는지 여러 상황에 따라서 달라지는 구조이다.

잠금 없는 일관된 읽기(Non-Locking Consistent Read)

MVCC 기술 덕분에 잠금을 걸지 않고 읽기 작업을 수행한다. 이로 인해서 격리 수준에 따라서 INSERT와 연결되지 않은 순수한 읽기(SELECT) 작업은 다른 트랜잭션의 변경 작업과 관계 없이 항상 잠금을 대기하지 않고 바로 실행된다.

슬로우 쿼리 로그

  • long_query_time(파라미터에 설정된 소수점 값 이상 걸린 쿼리를 모두 기록한다.

  • log_output 옵션을 통해서 슬로우 쿼리 로그를 파일로 기록할지 테이블로 기록할지 선택할 수 있다.

    • 테이블 선택 시 general_log와 slow_log 테이블에 저장
    • 파일 선택 시 디스크의 파일로 저장

    예시

    • Time 항목은 쿼리가 시작된 시간이 아니라 쿼리가 종료된 시점을 의미 → 쿼리 시작 시간 = Time - Query_time
    • User@Host - 사용자명
    • Query_time은 쿼리가 실행되는 데 걸린 전체 시간
    • Rows_examined는 이 쿼리가 처리되기 위해 몇 건의 레코드에 접근했는지를 의미
    • Rows_sent는 실제 몇 건의 처리 결과를 클라이언트로 보냈는지를 의미