RealMySQL - MyISAM, MySQL 로그파일, 트랜잭션

흑이·2023년 3월 1일
0

운영체제의 캐시 및 버퍼

  • MyISAM 테이블의 인덱스는 키 캐시를 이용해 디스크를 검색하지 않고도 충분히 빠르게 검색할 수 있다.

  • 하지만 MyISAM 테이블의 데이터에 대해서는 디스크로부터의 I/O를 해결해 줄만한 어떠한 캐시나 버퍼링 기능도 MyISAM 스토리지 엔진은 가지고 있지 않다.

  • 그래서 MyISAM 테이블의 데이터 읽기나 쓰기 작업은 항상 운영체제의 디스크 읽기 또는 쓰기 작업으로 요청될 수밖에 없다.


데이터 파일과 프라이머리 키(인덱스) 구조

  • MyISAM 테이블은 데이터 파일이 힙(Heap) 공간처럼 활용된다.

  • 레코드는 프라이머리 키 값과 무관하게 INSERT되는 순서대로 데이터 파일에 저장된다.

  • 테이블에 저장되는 레코드는 모두 ROWID라는 물리적인 주소값을 가진다.

  • ROWID는 가변길이와 고정길이의 두 가지 방법으로 저장될 수 있다.


슬로우 쿼리 로그

  • MySQL 서버의 전체적인 성능 저하를 검사하거나 정기적인 점검을 할때 어떤 쿼리가 문제의 쿼리인지 판단하는데 슬로우 쿼리 로그가 많은 도움이 된다.

  • 슬로우 쿼리 로그 파일에 기록되는 쿼리는 일단 정상적으로 실행이 완료됐고 실행하는데 걸린 시간이 long_query_time에 정의된 시간보다 많이 걸린 쿼리인 것


트랜잭션

  • 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어주는 기능이다.

  • 잠금은 동시성을 제어하기 위한 기능

  • 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다.

  • 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다.


주의 사항

  • 실제로 DBMS에 데이터를 저장하는 작업은 트랜잭션에 포함

  • 데이터베이스 커넥션은 개수가 제한적이어서 각 단위 프로그램이 커넥션을 소유하는 시간이 길어질수록 사용 가능한 여유 커넥션의 개수는 줄어듬

  • 단위 프로그램에서 커넥션을 가져가기 위해 기다려야 하는 상황이 발생할 수 있다.

  • 메일 전송이나 FTP 파일 전송 작업 또는 네트워크를 통해 원격 서버와 통신하는 등과 같은 작업은 어떻게 해서든 DBMS의 트랜잭션 내에서 제거하는 것이 좋다.

  • 프로그램이 실행되는 동안 메일 서버와 통신할 수 없는 상황이 발생한다면 웹 서버뿐 아니라 DBMS 서버까지 위험해지는 사오항이 발생할 것이다.

0개의 댓글