스터디(59)
-
Mysql 아키텍처
Mysql은 크게 Mysql 엔진과 스토리지 엔진으로 구분한다. 사람으로 따지자면, Mysql 엔진은 머리 역할, 스토리지 엔진은 손발 역할을 담당한다. MYSQL 엔진 크게 커넥션 헨들러, 파서, 전처리기, 옵티마이저 등으로 구성되어 있다. 커넥션 헨틀러는 클라이언트로부터의 접속 및 쿼리 요청을 처리하고, 옵티마이저는 쿼리의 최적화된 실행을 진행한다. 스토리지 엔진 디스크 스토리지에 저장하거나, 데이터를 읽어오는 역할을 한다. MYSQL 엔진을 하나 두고, 스토리지 엔진을 여러 개 둘 수도 있다. 스토리지 엔진은 성능 향상을 위해 키 캐시나 버퍼 풀 같은 기능을 내장하고 있다. Mysql 스래딩 구조 Mysql 서버는 프로세스 기반이 아닌, 스레드 기반으로 동작한다. 크게 포그라운드 스레드와 백그라운드..
2023.11.26 -
Index 인덱스
인덱스란? 테이블의 검색 속도를 향상시키는 자료구조이다. 쉽게 생각해서 책의 색인과 같다 처음부터 완전 탐색하면 힘든데, abc순으로 정렬하면 빠르게 찾을 수 있지 않은가? ldex를 통해 조회 속도를 올릴 수 있으나, insert, delete,update 속도는 느려진다. 그리고 인덱스를 따로 관리하기 위한 추가 작업이 필요하고, 잘못 사용할 결우 오히려 성능이 악화된다. 인덱스는 그럼 언제 사용하는 것이 좋을까? - 규모가 큰 테이블 - insert, update, delete가 자주 발생하지 않는 컬럼 - join, where, order by가 자주 사용되는 컬럼 - 데이터 중복도가 낮은 컬럼 그럼 Index는 어떻게 구현하는가? 대표적인 방식이 헤시 테이블과 B+ Tree가 있다. 해시 테이블..
2023.11.26 -
DB Lock
Lock 같은 데이터를 동시에 접근하는 상황을 방지하기 위해 접근 한 곳, 혹은 허용되는 수만 접근 되도록 설정하는 것. 데이터의 무결성과 일관성을 지키기 위해 사용 Lock 종류는 다음과 같다 Shared Lock - 공유락 데이터를 변경하지 않는 읽기 명령에 주어진다. 여러 사용자가 동시에 데이터를 읽어도 데이터 일관성에는 아무런 영향을 주지 않는다. 따라서, 공유 락 끼리는 동시 접근이 가능하다. Exclusive Lock - 베타 락 데이터에 변경을 가하는 명령에 주어지는 락이다. Write Lock으로도 불린다. 다른 세션이 해당 자원에 접근(Select, Insert, update, delete...)를 막는다. 베타 락은 트랜젝션 동안 유지된다. Update Lock - 업데이트 락 배타 락..
2023.11.25 -
DB isolation level (격리수준)
격리수준이란(isolation level) 트랜젝션 간 고립 수준을 말한다. 즉, 다른 트랜젝션이 변경한 데이터에 대한 접근 강도를 의미한다. * dirty read : 다른 트렌젝션에서 아직 commit 되지 않은 데이터를 읽는 것 * non-repeatable read : 다른 트랙젝션에서 데이터 수정/삭제 시 커밋한 데이터를 읽을 수 있는 것. 한 트랜젝션에서 같은 쿼리로 2번 이상 조회했을 때 그 결과가 상이한 상황 * phantom read : 데이터 삽입 시 발생, 한 트랜젝션에서 같은 쿼리를 2번 이상 조회했을 때 없던 결과를 조회하는 상황, 다른 트랜젝션이 commit한 데이터가 있더라도, 자신의 트랜젝션에서 읽었던 내용만 사용 격리수준을 좀 더 자세히 알아보자 LEVEL 0 - Read ..
2023.11.25 -
페이지 대치 알고리즘
가상 메모리의 성능은 얼마나 페이지폴트를 줄이냐가 관건이다. 물론 프레임 수가 증가하면 페이지폴트도 줄어든다. 한번 대치 알고리즘에 대해 알아보자 선입선출 대치 알고리즘 각 페이지가 메모리 안으로 들어간 시간을 이용하여 가장 오래된 페이지부터 대치하는 방식이다. 선입선출이 간단한 구조를 가지고 있으나, 성능이 항상 좋은 것은 아니다 이렇게 프레임이 증가함에도 불구하고 페이지 폴트 수가 증가한다. 이러한 현상을 벨레디의 변이라고 한다. 최적 페이지 대치 알고리즘 앞으로 가장 오랫동안 사용하지 않는 페이지를 대치하는 알고리즘이다. 당연히 모든 알고리즘 중에 페이지 폴트 비율이 가장 낮다 아니 근데, 언제 사용할지 예측을 어떻게 하는데~ 그래서 보통 최적 대치 알고리즘은 비교 연구하는 데에서만 사용해용 최근 ..
2023.11.25 -
가상 메모리
가상메모리는 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방법이다. 메인 메모리보다 더 큰 저장 공간을 제공할 수 있다. 사용자와 논리적 주소를 물리적으로 분리하여 사용자가 메인 메모리 용량알 초과한 프로세스에 주소를 지정헤서 메모리를 제한 없이 사용할 수 있도록 하는 개념이다. 활둉 영역을 메인 메모리에 유지하면서 필요할 때는 메모리 사이에 스로세스 코드와 데이터를 저장한다. 메모리 내에 스왑 인/아웃을 거쳐 프로세스를 제할당하는 것이 특징이다. 어떻게 이런 방식으로 메모리를 관리할 수 있을까? 바로 아래 이유에 있다. - 실제로는 모든 프로그램이 항상 동시에 실행하지 않음 - 예외 처리 코드는 자주 필요하지 않고, 안쓸수도 있음 - 배열, 리스트 등은 사용 크기보다 항상 더 크게 정의함 - 문..
2023.11.25