본문 바로가기
DB 인사이드 | MySQL Architecture - 1. MySQL 엔진 MySQL Server의 구성MySQL Architecture는 기본적으로 Server-Client 구조로 이루어져 있습니다.MySQL Database가 Server의 역할을 수행하며, MySQL Server에 연결하는 Application을 Client라고 부릅니다. 이러한 MySQL Server는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있습니다.이 중 MySQL 엔진의 경우 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 역할을 수행하며, 스토리지 엔진은 실제 Data를 디스크 스토리지에 저장하거나 읽어오는 부분을 담당합니다.이처럼 각각의 엔진의 역할이 극명하게 나뉘다 보니, 사용자의 요청을 처리하기 위한 엔진 간의 Data 요청 및 전송 과정은 필수 불가결합니다.. 2022. 6. 30.
DB 인사이드 | PostgreSQL Vacuum - 6. Autovacuum 📢 Manual Vacuum에 이어, 본 문서 역시 ①Autovacuum이 무엇인지 알아보고, ②Autovacuum의 동작 조건 및 ③Autovacuum 프로세스에 의해 수행되는 Anti-Wraparound Vacuum에 대해 알아보도록 하겠습니다. 마지막으로 ④Autovacuum 전체 프로세스에 대해 확인해보도록 하겠습니다.AutovacuumAutovacuum이란 Vacuum수행을 자동화해주는 기능을 이야기합니다. Autovacuum기능은 Autovacuum Daemon이라고 불리는 여러 개의 프로세스들에 의해 수행되며, 이 중 Autovacuum Launcher 프로세스는 Worker 프로세스를 관리하고 지시하는 역할을 수행합니다.Autovacuum이 동작하기 위해서는 AUTOVACUUM, TRAC.. 2022. 4. 29.
DB 인사이드 | PostgreSQL Vacuum - 5. Manual Vacuum 📢 본 문서에서는 ①Vacuum의 목적과 ②Vacuum 동작 Mode에 대해 먼저 알아보도록 하겠습니다. 이후 조금은 특별하게 동작하는 ③Vacuum Freeze의 동작원리를 설명한 후 마지막으로 ④전체적인 Vacuum 수행 프로세스에 대해 알아보도록 하겠습니다. 더불어 지난 문서들을 통해 소개되었던 개념들이 모두 혼용되어 사용되는 만큼, 충분한 이해를 바탕으로 읽기를 추천합니다.Manual VacuumVacuum 이란?진공청소기라는 뜻을 지닌 Vacuum은 PostgreSQL에만 존재하는 특수한 개념입니다. 앞선 문서에서 강조했다시피 MVCC 동작원리에 따른 공간 비효율과 XID Wraparound발생 등 PostgreSQL의 특성에 기인한 부작용을 회피하기 위해 등장했습니다.Vacuum은 명령어 조.. 2022. 4. 29.
DB 인사이드 | PostgreSQL Vacuum - 4. Visibility Map 📢 본 문서에서는 Visibility Map (이하 VM)이라는 메타 파일에 대한 내용을 다룹니다. 우선 Vacuum의 기준정보로 활용하는 ①VM File이란 무엇인지 알아보고, ②사용자 조작에 따라 어떻게 변경되며, 어떻게 관찰할 수 있는지 알아보도록 하겠습니다.Visibility MapVM File이란?VM이란 Heap Relation(*테이블)을 구성하는 개별 페이지의 상태를 2개의 Bit값으로 표현하는 메타정보 파일이며 페이지가 포함하는 Tuple(Row)들의 상태 정보를 축약해서 담고 있습니다.VM 파일은 Relation OID에 해당하는 숫자에 접미어 "_vm"을 붙인 형태로 관리되며 사용자가 VACUUM 또는 VACUUM FREEZE와 같은 명시적인 Vacuum작업을 수행하거나 Autova.. 2022. 4. 29.
DB 인사이드 | PostgreSQL Vacuum - 3. Age 📢 본 문서에서는 XID의 연장선상에 있는 Age에 대해 알아보도록 하겠습니다. ①Age의 개념과 도입 배경을 우선 확인한 후, ②Table 및 Row에서 사용되는 Age의 의미와 차이점에 대해 알아보도록 하겠습니다.Age 란?Age = Current XID - 생성시점의 XID앞서 Data Freezing과정을 설명하며 “Current XID - 생성(입력) 시점의 XID” 값이 21억을 초과하기 전에 Frozen XID로 변경돼야 XID Wraparound 상황을 피할 수 있다고 이야기했습니다.이처럼 Data Freezing 대상을 선정하기 위해서는 XID값 그 자체보다는 입력(생성) 후 얼마나 오래되었는지 측정할 방법이 필요해졌으며 이를 위한 개념으로 Age가 도입되었습니다.Age의 특징은 다음과.. 2022. 4. 29.
DB 인사이드 | PostgreSQL Vacuum - 2. Transaction ID 📢 본 문서에서는 MVCC 모델을 통해 소개한 Transaction ID(이하 XID)에 대해 자세히 알아보도록 하겠습니다. 우선 ①XID의 정의와 용도를 확인하고, ②부족한 XID를 극복하기 위해 PostgreSQL이 선택한 방법을 알아보도록 하겠습니다.Transaction IDXID 란?우리는 미래에 일어날 사건에 대해 알지 못하지만 과거에 일어났던 사건들은 충분히 알 수 있습니다. 현실이 아닌 DBMS에서 일어나는 일련의 사건들을 트랜잭션이라고 부르며, 트랜잭션이 발생한 시점을 식별하기 위한 정보로 XID가 사용됩니다. 즉, XID란 일종의 시간 정보로 이해할 수 있습니다.XID는 트랜잭션이 일어날 때마다 하나씩 증가하며, MVCC모델의 구현 및 읽기 일관성을 위해 사용됩니다.XID 사용용도트랜잭.. 2022. 4. 29.
DB 인사이드 | PostgreSQL Vacuum - 1. MVCC 📢 Vacuum Series의 첫 시작으로, PostgreSQL의 MVCC모델에 대해 알아보도록 하겠습니다. 본 문서에서는 ①MVCC동작 방식 및 예제를 설명한 후 ②해당 모델로 인해 발생 가능한 문제점들을 알아보도록 하겠습니다.MVCC 동작 방식MVCC 란?MVCC(Multi Version Concurrency Control)란 “다중 버전 동시성 제어”의 줄임 말로, 과거부터 현재까지의 다양한 버전 데이터들에 대한 관리와 제공이 가능한지를 나타내는 DBMS 필수 기능 중 하나입니다. 즉 시시각각 변하고 있는 데이터 중 사용자가 조회를 시작한 시점의 정확한 데이터를 제공받을 수 있는지를 나타내는 것으로, 그 구현 방법은 각각의 DBMS마다 다르지만 목적만은 모두 동일하다고 할 수 있습니다.Postgr.. 2022. 4. 29.
DB 인사이드 | PostgreSQL Architecture - 4. 동작 원리 본 문서에서는 PostgreSQL Architecture 전반에서 다룬 내용을 바탕으로 커넥션 생성 및 사용자요청처리, 백그라운드 Process의 동작 방식 등에 대한 내용을 다루겠습니다. 커넥션 생성 과정우선 사용자가 PostgreSQL과 커넥션을 맺고 요청을 처리/회신하는 과정을 확인해보겠습니다.1. postmaster 프로세스는 Listener 역할을 하며 Client로부터 새로운 연결 요청을 기다립니다.2. postmaster 프로세스는 새로운 Client 연결 요청에 대한 인증을 하고 postgres 프로세스를 생성합니다. 이때 각각의 프로세스에는 work_mem 같은 Local Memory가 개별 할당됩니다.3. postgres 프로세스가 Client와 연결되면 postmaster 프로세스는 .. 2022. 4. 27.
DB 인사이드 | PostgreSQL Architecture - 2. Physical Structure Physical Structure본 문서에서는 Data 파일, Engine Log 파일, Configuration 파일 등 PostgreSQL이 관리하는 다양한 파일과 디렉토리에 대한 내용을 다루도록 하겠습니다. 해당 파일 및 디렉토리들은 PGDATA라고 하는 Database Cluster의 data 디렉토리에 위치하고 있습니다. PGDATA의 일반적인 위치는 /var/lib/pgsql/13/data 이며 해당 경로는 설치 방법에 따라 변경 수 있습니다. 📌 Database 및 Cluster 등에 관한 내용은 Logical Structure 내용을 참조바랍니다.Data Directory 구조(PGDATA) 일반적으로 Database Cluster의 구성요소는 data 디렉토리 하위에 위치하고 있습니다... 2022. 4. 27.