항목확인 방법의미성능 영향1. 인덱스 사용 여부EXPLAIN의 type, keytype이 ALL이면 풀스캔 (성능 저하), key에 인덱스명 있는지 확인⭐ 매우 큼2. 임시 테이블 사용 여부EXPLAIN의 Extra, SHOW STATUS LIKE 'Created_tmp_%'Using temporary 문구 존재 시 임시 테이블 사용, 디스크 기반이면 더 느림⭐ 매우 큼3. 정렬 방식 (filesort)EXPLAIN의 ExtraUsing filesort는 인덱스를 이용하지 않고 정렬함 (CPU/메모리 부담)⭐ 매우 큼4. 조인 순서 및 전략EXPLAIN 조인 순서 확인큰 테이블이 먼저 읽히거나 인덱스 없이 조인되면 느려짐⭐⭐ 큼5. SELECT * 사용 여부쿼리 직접 확인불필요한 모든 컬럼을 읽음 → I..
트랜잭션의 격리 수준이란 여러 트랜잭션이 동시에 처리 될 때, 다른 트랜잭션에 의해 영향을 받는 정도이다.트랜잭션 격리 수준은 아래와 같이 4단계로 이루어져있다.READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE각 단계에서 발생할 수 있는 상황과 격리수준 및 동시 처리 성능은 아래와 같다. DIRTY READNON-REPEATABLE READPHANTOM READ격리 수준동시 처리 성능READ UNCOMMITTEDOOO낮음높음READ COMMITTEDXOO REPEATABLE READXXX SERIALIZABLEXXX높음낮음일반적으로 격리 수준이 높아질수록 동시 처리 성능이 크게 떨어진다고 하지만, mysql에서 serializable을 제외한 나머..

낙관적 락과 비관적 락낙관적 락충돌이 드물게 발생한다고 가정데이터 변경 시점에 다른 사용자에 의해 값이 변경됬는지 체크낙관적 락은 데이터를 변경하는 시점에 다른 사용자에 의해 값이 변경됬는지 체크하는 방식으로update나 delete 쿼리 수행시 버전 정보나 타임 스탬프를 통해 다른 사용자에 의한 변경을 체크할 수 있다.애플리케이션 수준에서 동시성 제어를 해보았다면 update나 delete 쿼리 수행시 where 문에 조건절을 걸어 반영된 레코드가 존재하는지 여부로 판단하는 구현이 대표적인 낙관적 락의 예시이다. 비관적 락총돌이 발생한다고 가정레코드 자체에 락을 걸며, 쓰기 작업에 잠금을 하는 공유 락과 읽기/쓰기 모두 못하게 하는 배타 락이 존재한다.비관적 락은 레코드 자체에 잠금을 걸고 변경 작업을..
버퍼풀 자료구조버퍼풀은 여러개의 데이터 페이지로 이루어져 있다.버퍼풀은 메모리 공간에 존재하기에 무한정 많은 데이터를 담고 있을 수 없다.사용하지 않는 데이터는 제거되야한다.버퍼풀에서 사용되는 자료구조를 살펴보자. LRU(Least Recently Used) 리스트 : 가장 오래동안 사용되지 않은 데이터 페이지 제거New 서브리스트- MRU(Most Recently Used) 알고리즘을 통해 가장 많이 읽힌 데이터들이 존재하는 공간- 버퍼풀의 데이터를 읽어들이면 해당 데이터는 리스트의 머리부분으로 이동한다.Old 서브리스트 - LRU 알고리즘이 사용되는 공간으로 오랫동안 읽히지 않는 데이터 관리- 오랫동안 사용되지 않은 데이터는 나이가 증가하고 꼬리 부분으로 이동된다.데이터를 디스크에서 처음 버퍼풀로 가..

* 이글은 RealMysql 책을 참고하여 작성한 내용입니다.db 성능은 디스크 접근횟수에 달려있다. 일반적으로 메모리는 디스크보다 1000~1만 배 빠르다.최대한 메모리에서 많은 작업을 하고 디스크 접근을 최소화해야한다. mysql db를 공부하며 위의 전제조건이 중요하다.mysql 아키텍쳐 설계는 쓰기 작업의 안정성도 보장하지만 무엇보다 읽기 성능 향상을 위해 설계되어있다.위 내용을 중점에 두고 글을 이해해보자. mysql 아키텍쳐 [mysql 엔진]커넥션 핸들러 - 클라이언트 접속 허용- 쿼리 실행 요청sql 파서- 쿼리를 토큰(mysql이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조를 만들어 내는 작업- 기본 sql 문법 오류 검사sql 전처리기- 쿼리 파서에 의해 만..

B-tree (Balaced tree) Mysql DB는 인덱스 및 실제 데이터를 B-tree 알고리즘을 통해 관리한다. 각 노드는 하나의 페이지 형태로 여러 레코드 정보를 갖고 있다.페이지의 크기가 정해져 있기에 인덱스 키 값의 크기에 따라 저장할 수 있는 레코드 수가 달라진다.클러스터드 인덱스는 데이터 파일의 물리적 저장 방식을 결정하기에 리프 노드에 모든 칼럼 정보가 저장되며,세컨더리 인덱스의 경우 데이터의 주소로 클러스터드 인덱스 키값을 사용한다.따라서 세컨더리 인덱스로 조회하는 경우 클러스터드 인덱스를 한번 더 거쳐 조회되는 특징이 있다.세컨더리 인덱스 리프 노드에 데이터 주소가 아닌 pk 값을 할당하는 이유?데이터 주소를 사용하게 되면 데이터 변경, 이관, 분리와 같은 상황에서 이를 사용하는..

안녕하세요. 오늘은 데이터베이스 정규화에 대해 알아보겠습니다. - 정규화'관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다.' 위의 정의가 일반적인 정규화의 정의 입니다. 데이터에 중복을 제거하고 삽입이상, 갱신이상, 삭제이상이 나타나지 않도록 테이블을 설계하는게 정규화라고 생각하면 될 것 같습니다. - 제1정규형제 1정규형은 한 릴레이션을 구성하는 모든 도메인이 원자값만으로 구성되도록 하는 정규형을 말합니다. 이름취미철수축구, 야구, 농구영희농구, 배구민수골프, 축구, 탁구 위와 같은 테이블은 취미 칼럼에 여러개의 데이터가..

안녕하세요. 오늘은 관계형 데이터베이스의 키의 개념과 구분에 대해서 알아보려고 합니다. 관계형 데이터베이스의 키의 개념을 알기 위해서는 유일성과 최소성의 개념에 대해 알아야 합니다. - 유일성관계형 데이터베이스에서 유일성이란 테이블의 행을 고유하게 식별할 수 있는 속성 또는 속성의 집합을 말합니다. 위와 같은 테이블에서 행 하나를 유일하게 구별할 수 있는 필드값을 찾아봅시다. 학번으로 유일하게 구별 할 수 있으며 생년월일도 가능하며 이름도 가능합니다. 성별은 중복이 있어서 불가능하죠. 그런데 여기서 (이름, 성별)을 묶어서 생각하면 유일하게 구별할 수 있습니다. 마찬가지로 (학번, 생년월일) , (생년월일, 이름), (생년월일, 이름, 성별), (학번, 생년월일, 이름) 등등..... ..