DB ARCHITECTURE

DB ARCHITECTURE

sql server 데이터베이스 구조의 원리(2) - 파일 액세스 방법

데이터베이스 내의 각 오브젝트에 액세스 하는 방법과 순서는 쿼리 옵티마이저가 결정한다. 옵티마이저에 따라서 가장 효율적으로 데이터에 액세스 하기 위한 수단을 결정하고, 그 결정에 기초한 순서대로 데이터를 취득한다. 쿼리 옵티마이저의 동작 자체도 매우 흥미롭지만, 여기서는 우선 쿼리 옵티마이저가 데이터에 액세스 하는 수단을 결정한 후에 어떤 알고리즘으로 실제의 데이터를 취득하는지 소개한다. 인덱스가 사용되는 경우 각 인덱스 페이지는 동일 계층의 앞 페이지와 다음 페이지의 포인터를 각각 갖고 있다. 또한 인덱스의 각 계층도 링크 리스트로 링크되어 있다. 목적하는 데이터를 취득하기 위해 인덱스를 스캔해야 하는 경우 매우 심플한 알고리즘으로 데이터를 취득할 수 있다. 인덱스 페이지 계층의 상위에서 하위로 링크 ..

DB ARCHITECTURE

sql server 데이터베이스 구조의 원리(1) - 데이터 파일

1.페이지와 익스텐트 데이터베이스를 구성하는 데이터 파일은 내부적으로 페이지라고 하는 8KB의 논리 단위로 구분되어 사용된다. 페이지는 테이블 등의 오브젝트에 저장된 데이터를 읽고 쓸 때의 최소 I/O 단위다. 그러나 오브젝트에 새로운 영역을 할당해야 하는 경우에는 페이지가 아니라 익스텐트라는 단위가 사용된다. 익스텐트는 8KB 페이지가 8개로 구성되어 있다. 테이블에 할당된 모든 페이지에 빈 용량이 없어지면 테이블에는 새로운 익스텐트가 할당된다. 2.단일 익스텐트와 혼합 익스텐트 익스텐트의 종류는 하나의 오브젝트에 8페이지 모두를 점유하는 단일 익스텐트와 복수의 오브젝트를 공유하는 혼합 익스텐트가 존재한다. SQL 서버는 2014까지 디폴트 동작으로 오브젝트의 초기 구성에 혼합 익스텐트를 할당했다. 디..

DB ARCHITECTURE

sql server 메모리 관리(5) - 메모리의 용도

각 컴포넌트는 메모리 매니저를 사용해서 획득한 메모리 영역을 8Kb 단위로 구분해서 사용한다. 각 메모리 블록은 페이지라고 불린다. 버퍼 풀(버퍼캐시)은 대다수의 경우 SQL 서버가 확보한 메모리의 가장 많은 부분을 차지하는 영역으로, 데이터베이스의 데이터 페이지와 인덱스 페이지를 디스크에서 읽어들여 캐시하기 위해 사용된다. SQL 서버가 데이터를 조작하는 경우 버퍼 풀에 읽어들인 데이터를 사용한다. 그때 조작 대상 데이터를 취득하기 위해 매회 버퍼 풀 전체를 스캔하는 것은 아무리 고속 액세스가 가능한 메모리상의 조작이라고 해도 큰 오버헤드가 된다. 때문에 SQL 서버는 버퍼 풀에 데이터베이스를 배치할 때 해시 알고리즘을 사용한다. 각 데이터베이스가 가진 고유의 값을 토대로 해시값이 생성되고 해시 버킷이..

DB ARCHITECTURE

sql server 메모리 관리(4) - 프로세스 내부 메모리 관리 방법

SQL 서버는 자기자신의 메모리 영역을 효율적으로 사용하기 위해 워크스페이스라 불리는 영역을 할당해서 관리한다. 워크스페이스는 다양한 용도별로 준비되는 영역이다. 워크스페이스의 사이즈 조정, 획득 및 내부 컴포넌트 할당 등의 메모리 관리 작업은 메모리 매니저라 불리는 컴포넌트가 담당한다. SQL 서버 프로세스의 내부에서는 유저의 요구와 내부 컴포넌트 등의 다양한 TASK가 실행되고 있다. 각 태스크는 다양한 처리를 실행하기 위해 메모리를 획득할 필요가 있다. 예를들면, 컴파일된 쿼리 실행 플랜을 메모리상에 배치하는 영역이 필요하다. 또는 클라이언트의 요구로 결과 세트의 정렬이 필요한 경우는 해당 TASK 영역이 메모리상에 필요하다. (이러한 용도 외에도 메모리를 필요로하는 수많은 T..

DB ARCHITECTURE

sql server 메모리 관리(3) - NUMA(Non-Uniform Memory Architecture)

NUMA는 공유 메모리 아키텍쳐의 한 형태이다. 대다수의 경우 소규모 SMP(Symmetric Multiprocessing : 대칭형 멀티 프로세싱) 컴퓨터에 구현되어 있는 공유 메모리 아키텍처에서는 컴퓨터에 탑재되어 있는 모든 CPU가 메모리와 메모리 액세스에 사용하는 *버스를 공유하고 있다. *버스 : CPU와 메모리 사이에서 데이터를 교환하는 경로 SMP 아키텍처의 메모리와 버스 하나의 CPU가 메모리 액세스를 위해 버스를 점유하면 다른 CPU는 버스가 해제될 때까지 메모리 액세스를 할 수 없다. 때문에 내장되어 있는 CPU의 수가 늘수록 버스의 해제 대기 시간이 길어질 가능성이 있다. 또한 CPU 수의 증가에 의해 버스도 물리적으로 길어지기 때문에 그에 수반하여 메모리에 도달할 때까지 시간이 걸린..

DB ARCHITECTURE

sql server 메모리 관리(2) - 가상 어드레스 공간의 관리

프로세스에 할당된 가상 어드레스 공간의 모든 영역은 다음 세개의 상태중 하나의 상태에 있다. 1. COMMITED 2. RESERVED 3. FREE 1.COMMITED 가상 어드레스 공간 내에서 실제로 사용되고 있는 영역이다. 이 영역에 대해서는 윈도우 오퍼레이팅 시스템이 물리메모리의 영역을 할당하고 있다. 즉, 커밋된 상태의 메모리 영역은 물리 메모리에 확보되어 있다. 2.RESERVED 나중의 사용에 대비해서 가상 어드레스 공간의 영역이 예약된 상태이다. 이 상태에서는 물리 메모리는 전혀 할당되어 있지 않다. SQL 서버는 실행 시에 필요 최소한의 영역만은 커밋된(Commited) 상태로 하고 나머지 부분을 예약된(Reserved) 상태로 둔다. 메모리 할당 동작에서 커밋된(Commited) 상태로..

DB ARCHITECTURE

sql server 메모리 관리(1) - 가상 어드레스 공간

윈도우 오퍼레이팅 시스템의 관리하에 동작하는 프로세스(애플리케이션)은 각각 가상 어드레스 공간을 유지하고 있다. 대다수의 경우는 컴퓨터에 탑재되어 있는 메모리의 크기적인 제약으로 인해 프로세스의 전체 가상 어드레스 공간을 그대로 물리 메모리상에 전개하는 것은 힘들다. 따라서 윈도우 오퍼레이팅 시스템이 각 프로세스의 가상 어드레스 공간을 관리하고 필요에 따라서 물리 메모리로 전개하거나 또는 *페이지 파일에 적어 넣는다. 가상 어드레스 공간과 물리 메모리 사이의 관계는 CPU 캐시와 RAM 사이의 관계와 비슷하다. 캐시 메모리는 CPU의 속도와 시스템 메모리(RAM)의 속도 차이에 기인한 문제를 해결하기 위해 CPU 안에 포함되는 작고 빠른 메모리이다. 상대적으로 빠른 CPU 의 속도가 상대적으로 느린 시스..

DB ARCHITECTURE

SQL SERVER 가 수행하는 I/O의 특징적 동작

DB 버퍼 캐시는 데이터 파일로부터 읽어 들인 데이터 페이지 (또는 인덱스 페이지)를 담는 캐시 영역이다. 일부 Direct Path Read 메커니즘이 작동하는 경우를 제외하면, 모든 페이지 읽기는 버퍼 캐시를 통해 이루어진다. 즉, 읽고자 하는 페이지를 먼저 버퍼 캐시에서 찾아보고 없을 때 디스크에서 읽는다. 디스크에서 읽을 때도 먼저 버퍼 캐시에 적재한 후에 읽는다. 데이터 변경도 버퍼 캐시에 적재된 페이지를 통해 이루어지며, 디스크 I/O는 물리적으로 액세스 암(Arm)이 움직이면서 헤드를 통해 이루어지는 반면, 메모리 I/O는 전기적 신호에 불과하기 때문에 디스크 I/O에 비교할 수 없을 정도로 빠르다. 디스크에서 읽은 데이터 블록을 메모리 상에 보관해 두는 기능이 모든 데이터베이스 시스템에 필..

DB ARCHITECTURE

SQL SERVER 액세스 패턴

SQL 서버가 데이터베이스를 구성하는 물리 파일에 액세스할 때는 몇가지 특징적인 패턴이 있다. 시나리오를 예로 들어 어떤 종류의 액세스가 SQL 서버의 데이터베이스 파일에 대해 발생하는지를 생각해보자. 1. 데이터 파일에서의 액세스 패턴 1) 온라인 트랜잭션 처리(OLTP) 시스템의 경우 OLTP 시스템에서는 수 많은 클라이언트가 각각 매우 작은 범위의 데이터를 참조 또는 갱신한다. 또한 각 클라이언트가 필요로 하는 데이터의 종류와 분포범위는 제각각이기 때문에 데이터 파일에 저장된 데이터가 파일 내의 다양한 장소에 점재해 있을 가능성이 높다. 그 결과 데이터 파일에 액세스하는 것은 파일 전체에 랜덤으로 발생하는 경향이 높아진다. 2) OLAP 의 경우 주요 용도가 축적한 데이터를 분석하는 일인 OLAP ..

DB ARCHITECTURE

교착상태 - DEAD LOCK

교착 상태(deadlock)이란 두 개 이상의 프로세스가 서로를 차단하고 있는 상태를 말한다. 위의 그림은 일반적인 교착상태의 예제이다. 작업 T1은 리소스 R1에 대한 잠금을 가지며(R1 -> T1) 리소스 R2에 대한 잠금을 요청했다.(R2 -> T2) 작업 T2는 자원 R2에 대한 잠금을 가지며 자원 R1에 대한 잠금을 요청했다. 두 작업은 자원이 사용 가능할 때까지 계속 수행 할 수 없으며 Task가 계속 될 때까지 자원을 해제 할 수 없기 때문에 교착상태가 존재한다. SQL Server DBMS 는 SQL Server 내에서 교착 상태 사이클을 자동으로 감지한다. 특별한 설정을 하지 않는다면 데이터 베이스 엔진이 가장 일을 적게 한 프로세스를 선택해서 중지 시키는데, 그 프로세스의 트랜잭션에서작..

ssh9308
'DB ARCHITECTURE' 카테고리의 글 목록