본문 바로가기

전체 글

(88)
HOT (Heap Only Tuple) HOT (Heap Only Tuple) ▪ HOT는 PostgreSQL MVCC 모델의 약점을 극복하기 위한 튜닝 기법이다. ▪ HOT는 ‘테이블에만 존재하는 레코드’ 란 의미이다. ▪ 풀어서 말하면, 인덱스에는 존재하지 않고 테이블에만 존재하는 레코드라는 뜻이다. ▪ HOT는 변경 후의 레코드가 동일 블록에 저장될 때만 동작한다. ▪ 따라서 변경이 빈번한 테이블은 반드시 FILLFACTOR를 작게 설정해야 한다.
Vacuum, Auto Vacuum Vacuum의 목적 ▪ 공간 재활용 1) 오래된 이전 버전 레코드 삭제 작업을 통한 공간 확보 (Vacuum) 2) 오래된 이전 버전 레코드 삭제 작업 후에 공간 압축 (Vacuum Full) ▪ XID Frozen ✓ Vacuum 수행 시에 필요한 레코드에 대해서 수행됨 ✓ Anti-Wraparound Vacuum이라고 함 ▪ Vacuum은 DML과 호환된다. ▪ Vacuum Full은 DML 뿐 아니라 SELECT와도 호환되지 않는다. (PG_REPACK 익스텐션 고려) Autovacuum이 하는 일 1) 데이터 변경에 따른 자동 통계 수집 2) XID 증가에 따른 Anti-Wraparound Vacuum 수행 9.6 버전부터 Anti-Wraparound Vacuum 문제가 해결됨 ▪ Visibili..
MVCC (다중 버전 읽기 일관성) MVCC MVCC (Multi-Version Concurrency Control)는 쿼리 수행 시점의 데이터를 제공하는 기법이다. ▪ 이를 위해서는 변경 후의 현재 데이터 (Current Data) 뿐 아니라, 변경 전의 이전 데이터 (Before Data)를 읽을 수 있어야 한다. PostgreSQL MVCC의 특징 ▪ 특징-1. 이전 버전의 데이터를 테이블 블록 내에 저장한다. 1) 이 특징은 MVCC를 매우 단순하게 구현할 수 있다는 장점이 있다. 2) 하지만 ‘이전 데이터’를 블록 내에 저장함으로써 테이블의 공간 사용 효율이 떨어진다는 단점이 있다. 3) 이 단점을 해결하기 위해서 Vacuum이 필요하다. 4) Vacuum을 수행하면 불필요한 데이터가 삭제된다. 5) Vacuum Full을 수행하..
Shared Buffer Tuning Shared Buffer의 목적은 DISK IO를 최소화함으로써 IO 성능을 향상하는 것이다. 1) 매우 큰 (수십, 수백 GB) 버퍼를 빠르게 액세스해야 한다. 2) 많은 사용자가 동시에 접근할 때 경합을 최소화해야 한다. 3) 자주 사용되는 블록은 최대한 오랫동안 버퍼 내에 있어야 한다. Shared Buffer의 구조는 크게 1) 해시 테이블 2) 해시 엘리먼트 3) 버퍼 디스크립터 4) 버퍼 풀 로 구성된다. Buffer Replacement를 위한 Clock Sweep 알고리즘 ▪ Clock Sweep 알고리즘은 덜 사용된 버퍼를 Victim 버퍼로 선정하는 알고리즘으로써 ▪ NFU (Not Frequently Used) 알고리즘의 일종이다. ▪ 버퍼가 액세스될 때마다 usage_count를 1..
PostgreSQL 아키텍처 PostgreSQL 아키텍처 - PostgreSQL 아키텍처는 매우 단순하다. - 공유 메모리, 매우 적은 수의 백그라운드 프로세스와 데이터파일로 구성된다. - PostgreSQL은 SQL 공유를 위한 Pool이 없다. - PostgreSQL은 세션 레벨의 Plan Caching 기능을 제공한다. 이를 이용한 prepare Stmt 수행 구조도는 다음과 같다.
RDS에서 DDB로 Data Insert PostgreSQL RDS (RDB)의 데이터를 Amazon DynamoDB (NoSQL)로 insert하는 방법에 대해 설명하고자 합니다. 사용하는 툴은 pgAdmin, Amazon S3, Amazon IAM, Amazon Lambda, Amazon DynamoDB, boto3 입니다. Postgre SQL에서 emp 테이블의 결과 값을 csv 파일로 저장합니다. 저장되는 csv 파일의 이름은 data-1617595503266.csv 파일입니다. 다운 받은 csv 파일을 S3 Bucket에 올려줍니다. Insert할 데이터를 담을 테이블을 생성해줍니다. 이후 Lambda와 Boto3를 이용하여 S3 Bucket과 DynamoDB 접근을 위해서 역할을 생성해야 합니다. 그에 앞서서 역할에 적용할 정책을 ..
AWS Command Line Interface (AWS CLI) AWS Command Line Interface AWS Command Line Interface(AWS CLI) - 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다 - 최소한의 구성으로 AWS CLI를 사용하면 터미널 프로그램에 있는 명령 프롬프트에서 브라우저 기반 AWS Management 콘솔에서 제공하는 것과 동일한 기능을 구현하는 명령을 실행할 수 있습니다. - Linux 셸 – bash, zsh, tcsh 등의 일반적인 셸 프로그램을 사용하여 Linux 또는 macOS에서 명령을 실행합니다. - Windows 명령줄 – Windows의 경우 PowerShell 또는 Windows 명령 프롬프트에서 명령을 실행합니다. - 원격 – PuTTY 또는 SSH 등의..
AWS Lambda AWS Lambda AWS Lambda - 서버를 프로비저닝 하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. - 필요 시에만 코드를 실행하며, 하루에 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다. - 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다. - Lambda에서는 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있습니다. - Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버 및 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. - Lambda가 지..