[OS] 주소 공간의 동적 재배치
·
OS
사람들이 컴퓨터를 더 많이 사용하길 원하면서 시분할, 대화식 이용의 개념이 등장하였다.시분할을 구현하는 가장 고전적인 방법은 프로세스를 짧은 시간동안 실행시키고, 중단한 후 중단 시점의 모든 상태를 디스크에 저장하고, 다른 프로세스를 또 탑재해서 실행시키는 것을 반복하는 방법이 있다. 하지만 알다시피 디스크 입출력은 엄청나게 느리기 때문에 이 방식은 비효율적이였다. 따라서 프로세스 전환 시 프로세스를 메모리에 그대로 유지하면서 운영체제가 시분할을 할 수 있도록 하는 개념이 등장하였다.말은 좋지만, 결국 여러 프로그램이 메모리에 동시에 존재하려면 한 프로세스의 메모리를 다른 프로세스의 메모리로부터 보호해야하는 문제가 생겼다.그런 위험에 대비해서 운영체제가 사용하는 메모리 개념이 주소 공간이다. 주소 공간은..
[MySQL] 클러스터링 인덱스
·
Database
프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하는 것을 클러스터링 인덱스라고 한다.중요한 점은 프라이머리 키 값에 의해 레코드의 저장 위치가 결정된다. 따라서 프라이머리 키 값의 변경은 레코드의 물리적 저장위치의 변경을 뜻한다.클러스터링 인덱스는 사실 인덱스라기 보단 레코드의 저장 방식으로 보는게 편하다. (클러스터링 테이블이라고 부름)일반적으로 우리가 사용하는 InnoDB 테이블은 항상 클러스터링 인덱스로 저장되기 때문에 키 기반의 검색이 매우 빠르지만,그에따라 레코드의 저장이나 프라이머리 키의 변경이 상대적으로 느리다. 클러스터링 인덱스 구조 자체는 일반 B-Tree와 비슷하지만, 세컨더리 인덱스를 위한 B-Tree의 리프 노드와는 달리, 클러스터링 인덱스의 리프 노드에는 모든 칼럼이 같이 저장되..
[MySQL] B-Tree 인덱스 - 2
·
Database
인덱스를 적재적소에 활용하려면, 결국 MySQL이 어떻게 인덱스를 타고 실제 레코드를 읽어내는지에 대해 좀 더 깊이 살펴봐야 한다. 인덱스 레인지 스캔인덱스 레인지 스캔은, 인덱스의 접근 방법 가운데 가장 대표적인 접근 방식이다.B-Tree 인덱스의 필요한 영역을 스캔하는데에는 어떤 작업이 필요할까 ? 다음 쿼리를 예제로 살펴보자SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'Gad'; 인덱스 레인지 스캔은, 검색해야할 범위가 결정되었을 때 사용하는 방식이다.위 그림은 "인덱스"를 읽는 경우에 대한 그림인데, 크게 두 가지 과정이 수반된다. 이는 먼저 브랜치 노드를 거쳐 리프노드의 레코드 시작지점을 찾는 과정, 그리고 해당 시작 지점부터 리프노..