반응형

DBA 실무/PostgreSQL 15

[PostgreSQL 15편] PostgreSQL 고가용성 & 모니터링 + AI 운영 자동화 (시리즈 완결)

PostgreSQL 고가용성 & 모니터링 + AI 운영 자동화 (시리즈 완결)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c드디어 이 시리즈의 마지막 편입니다. 15편에 걸쳐 Oracle DBA 관점에서 PostgreSQL을 정리해왔는데, 그 대미를 장식할 주제는 고가용성(HA), 모니터링, 그리고 AI를 활용한 운영 자동화입니다. 운영의 궁극적 목표는 하나입니다. "서비스가 멈추지 않게 하는 것." Oracle에서 Data Guard, RAC로 이걸 달성했다면, PostgreSQL은 스트리밍 복제를 기반으로 합니다. 이번 편에서 그 방법과, 15년 경험에 AI를 더하는 법까지 정리합니다. 이번 편은 운영 시리즈의 마지막이자 PostgreSQL 시리즈 전체의 완결..

[PostgreSQL 시리즈 14편] PostgreSQL 물리 백업 & PITR 완벽 정리 - 증분 백업까지 (Oracle RMAN 대응)

PostgreSQL 물리 백업 & PITR 완벽 정리 - 증분 백업까지 (Oracle RMAN 대응)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c"실수로 운영 테이블을 DROP 했어요. 오후 3시였는데, 2시 59분으로 되돌릴 수 있나요?"Oracle DBA라면 "RMAN으로 PITR 하면 되지"라고 답할 겁니다. PostgreSQL도 됩니다. 바로 이번 편의 주제, 물리 백업과 PITR(시점 복구) 입니다.13편의 논리 백업(pg_dump)이 "유연한 백업"이었다면, 이번 물리 백업은 "대용량 운영 DB의 진짜 백업" 입니다. 그리고 본인이 요청하신 증분 백업도 드디어 나옵니다. 마침 PostgreSQL 17에서 증분 백업이 새로 추가돼서 시의적절해요.이번 편..

PostgreSQL 백업의 시작 - pg_dump 논리 백업 완벽 정리 (Oracle exp/imp 대응)

PostgreSQL 백업의 시작 - pg_dump 논리 백업 완벽 정리 (Oracle exp/imp 대응)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cDBA에게 백업은 마지막 보루입니다. 다른 건 다 실패해도 백업만 있으면 살아남죠. 반대로 백업이 없으면? 상상하기도 싫습니다.Oracle에서는 exp/imp, Data Pump, RMAN으로 백업했습니다. PostgreSQL은 크게 논리 백업(pg_dump) 과 물리 백업(pg_basebackup) 두 가지로 나뉩니다. 이번 편은 그 첫 번째, 논리 백업입니다.이번 편은 운영 시리즈의 네 번째 글이자, 본인이 요청하신 백업/복구 편의 시작입니다. Oracle의 exp/imp에 해당하는 pg_dump를 실전 위주로..

[PostgreSQL 시리즈 12편] 새벽 3시에 걸려오는 전화의 원인들 - PostgreSQL 운영 장애 TOP 10 (그림 3개)

새벽 3시에 걸려오는 전화의 원인들 - PostgreSQL 운영 장애 TOP 10 (그림 3개)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cDBA에게 가장 무서운 건 새벽 3시의 전화입니다. "DB가 이상해요", "서비스가 느려요", "접속이 안 돼요."Oracle이든 PostgreSQL이든 장애는 옵니다. 그런데 PostgreSQL은 Oracle과 자주 터지는 지점이 조금 다릅니다. MVCC, autovacuum, 연결 모델 같은 PostgreSQL 특유의 구조에서 오는 문제들이 있거든요.이번 편은 운영 시리즈의 세 번째 글입니다. 15년 넘게 운영하며 만난, 그리고 PostgreSQL 커뮤니티가 공통으로 꼽는 운영 장애 TOP 10을 정리했습니다. 각 문제의..

autovacuum 방치했다가 DB 멈춘 썰 (PostgreSQL VACUUM 완벽 정리, 그림 5개)

autovacuum 방치했다가 DB 멈춘 썰 (PostgreSQL VACUUM 완벽 정리, 그림 5개)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle DBA 시절엔 신경 쓸 필요 없던 게 PostgreSQL엔 하나 있습니다. 바로 VACUUM입니다.처음엔 저도 무시했습니다. "자동으로 돈다며? 그럼 놔두면 되지." 그런데 어느 날 디스크가 이유 없이 계속 차오르고, 잘 돌던 쿼리가 느려지기 시작했습니다. 알고 보니 autovacuum이 제대로 안 돌고 있었고, dead tuple이 산더미처럼 쌓여 있었습니다. 최악의 경우엔 트랜잭션 ID wraparound로 DB가 통째로 멈출 수도 있다는 걸 나중에 알고 식은땀을 흘렸습니다.이번 편은 운영 시리즈의 두..

[PostgreSQL 시리즈 10편] Oracle 권한 관리 그대로 했다가 막힌 썰 (PostgreSQL ROLE 완벽 정리)

[PostgreSQL 시리즈 10편] Oracle 권한 관리 그대로 했다가 막힌 썰 (PostgreSQL ROLE 완벽 정리)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle DBA에게 권한 관리는 기본 중의 기본입니다. CREATE USER, GRANT, ROLE... 눈 감고도 하죠. 그래서 저는 PostgreSQL에서도 똑같이 했습니다.CREATE USER app_user IDENTIFIED BY 'password';ERROR: syntax error at or near "IDENTIFIED""어? IDENTIFIED BY가 안 돼?"그리고 테이블에 SELECT 권한을 줬는데도 사용자가 "권한이 없다"며 막히는 상황까지. Oracle 습관대로 했다가..

Oracle 사용자가 PostgreSQL 보고 배 아파하는 기능 6가지 (PostgreSQL 킬러 기능 총정리)

Oracle 사용자가 PostgreSQL 보고 배 아파하는 기능 6가지 (PostgreSQL 킬러 기능 총정리)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c지금까지 이 시리즈는 "Oracle과 뭐가 다른가"를 주로 다뤘습니다. 대부분 "Oracle에선 이랬는데 PostgreSQL에선 저렇다" 식이었죠.이번 편은 다릅니다. "이건 Oracle에도 있었으면 좋겠다" 싶은, PostgreSQL만의 킬러 기능들입니다. 솔직히 저는 이 기능들을 보면서 Oracle 시절이 살짝 억울했습니다. "이걸 그동안 복잡하게 돌아갔던 거야?"이번 편은 실무 시리즈의 하이라이트입니다. 실습으로 직접 확인하며 진행합니다.①JSONB - MongoDB를 대체하는 문서 저장소②배열 타입 -..

PL/SQL 그대로 옮겼다가 다 터진 썰 (Oracle DBA를 위한 PL/pgSQL 완벽 비교)

PL/SQL 그대로 옮겼다가 다 터진 썰 (Oracle DBA를 위한 PL/pgSQL 완벽 비교)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle DBA에게 PL/SQL은 자부심입니다. 15년간 프로시저, 패키지, 트리거로 온갖 로직을 짜왔죠. 그래서 저는 PostgreSQL로 넘어갈 때 자신만만했습니다. "PL/SQL 잘하니까 PL/pgSQL도 금방이겠지."그리고 기존 PL/SQL 프로시저를 그대로 복사해서 붙여넣었습니다. 결과는?ERROR: syntax error at or near "CREATE OR REPLACE PACKAGE""어? 패키지가 없어?"네, PostgreSQL엔 패키지가 없습니다. 그것뿐이 아닙니다. 프로시저 선언 방식, 변수 선언,..

B-tree만 알던 내가 GIN 인덱스 보고 눈 돌아간 썰 (PostgreSQL 인덱스 완벽 정리)

B-tree만 알던 내가 GIN 인덱스 보고 눈 돌아간 썰 (PostgreSQL 인덱스 완벽 정리)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c 비교 기준Oracle DBA에게 인덱스는 곧 B-tree입니다. 비트맵 인덱스도 있지만 OLTP에선 잘 안 쓰죠. 그래서 저도 "인덱스 = B-tree" 공식으로 15년을 살았습니다.그런데 PostgreSQL을 배우다가 이런 걸 봤습니다.-- JSONB 컬럼을 통째로 인덱싱?!CREATE INDEX idx_data ON events USING GIN (data);-- 10억 건 테이블 인덱스가 B-tree의 1/8500 크기?!CREATE INDEX idx_time ON logs USING BRIN (created_at..

Oracle 함수 그대로 쳤다가 에러 폭탄 맞은 썰 (PostgreSQL 함수 완벽 변환표)

Oracle 함수 그대로 쳤다가 에러 폭탄 맞은 썰 (PostgreSQL 함수 완벽 변환표)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c 비교 기준PostgreSQL로 넘어온 첫 주, 저는 습관적으로 이렇게 쳤습니다.SELECT NVL(bonus, 0) FROM employees;그리고 돌아온 답: ERROR: function nvl(numeric, integer) does not exist"어? NVL이 없다고?"당황해서 DECODE를 쳤더니 또 에러. SYSDATE를 쳤더니 또 에러. FROM dual을 붙였더니 이번엔 dual 테이블이 없다네요. 그야말로 에러 폭탄이었습니다.Oracle DBA가 PostgreSQL에서 처음 마주하는 벽이 바로 이겁니다. S..

[PostgreSQL 시리즈 4편] psql 완벽 활용 + AI로 학습 가속

[PostgreSQL 시리즈 4편] psql 완벽 활용 + AI로 학습 가속- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle DBA에게 SQL*Plus는 손에 붙은 도구입니다. DESC emp, SET LINESIZE 200, SPOOL result.log, login.sql… 눈 감고도 칩니다.그런데 psql 앞에 앉으면 막막합니다. DESC를 치면 에러가 나고, 컬럼 20개짜리 테이블을 조회하면 화면이 무너집니다. 문법은 3편까지 익혔는데 도구가 손에 안 붙는 상태입니다.이번 편은 그 간극을 메웁니다. 그리고 Phase 1의 마지막인 만큼, 앞으로 남은 학습을 AI로 가속하는 방법까지 함께 다룹니다. 핵심은 하나입니다. AI에게 묻고, psql로 ..

[PostgreSQL 시리즈 3편] DML과 트랜잭션 - Oracle UNDO vs PostgreSQL MVCC (시리즈 핵심)

[PostgreSQL 시리즈 3편] DML과 트랜잭션 - Oracle UNDO vs PostgreSQL MVCC (시리즈 핵심)테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c 이 시리즈에서 가장 중요한 한 편을 꼽으라면 이 글입니다.Oracle DBA가 PostgreSQL을 다룰 때 SQL 문법은 금방 익숙해집니다. 하지만 트랜잭션이 내부에서 어떻게 동작하는지는 근본적으로 다릅니다. 이 차이를 모르면 "왜 테이블이 안 줄어들지?", "왜 디스크가 계속 늘지?" 같은 문제에서 헤맵니다.핵심은 하나입니다. Oracle은 UNDO, PostgreSQL은 MVCC. 이 차이가 운영의 많은 것을 결정합니다.이번 편에서 다룰 내용입니다.DML 문법 비교 (INSERT/UPD..

[PostgreSQL 시리즈 2편] 자료형과 DDL 완벽 비교 - Oracle 타입을 PostgreSQL로 옮기기

[PostgreSQL 시리즈 2편] 자료형과 DDL 완벽 비교 - Oracle 타입을 PostgreSQL로 옮기기- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cPostgreSQL로 넘어온 Oracle DBA가 실무에서 가장 먼저 부딪히는 것이 자료형입니다. NUMBER, VARCHAR2, DATE... 익숙한 타입들이 PostgreSQL에선 다른 이름이거나, 아예 개념이 다릅니다. 여기서 잘못 매핑하면 데이터 정합성 문제나 성능 저하로 이어집니다.이번 편에서는 1편(첫걸음)에 이어 실제 테이블을 만들며 다음을 다룹니다.Oracle vs PostgreSQL 자료형 완벽 매핑표숫자·문자·날짜 타입의 핵심 차이★ SERIAL vs IDENTITY vs 시퀀스 (자동..

PostgreSQL 시리즈 1편] Oracle DBA를 위한 PostgreSQL 첫걸음 - 아키텍처부터 첫 접속까지

[PostgreSQL 시리즈 1편] Oracle DBA를 위한 PostgreSQL 첫걸음 - 아키텍처부터 첫 접속까지- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19cOracle을 오래 다뤄온 DBA에게 PostgreSQL은 낯설면서도 익숙한 데이터베이스입니다. SQL은 대부분 통하는데, 아키텍처와 운영 방식은 꽤 다릅니다. 이 차이를 모르고 Oracle 습관대로 접근하면 곳곳에서 헤맵니다.이 시리즈는 15년차 Oracle DBA가 PostgreSQL로 넘어가며 정리한 실전 노트입니다. 모든 개념을 Oracle과 비교하되, PostgreSQL 중심으로 설명합니다. Oracle을 아는 분이라면 훨씬 빠르게 습득하실 수 있습니다.이번 1편에서 다룰 내용입니다.왜 지금..

PostgreSQL, 설치할 때 정한 걸로 3년을 삽니다 — 설치부터 초기 설정까지

PostgreSQL, 설치할 때 정한 걸로 3년을 삽니다 — 설치부터 초기 설정까지PostgreSQL 실무 시리즈 ① 이 글의 모든 명령어와 출력은 실제로 실행한 결과입니다.검증 환경: PostgreSQL 16.2 / Ubuntu 22.04 / UTF8 PostgreSQL 설치는 쉽습니다. apt install postgresql 한 줄이면 끝나니까요.문제는 그 다음입니다. 설치 시점에 정하고 나면 두 번 다시 못 바꾸는 옵션이 몇 개 있는데, 하필 그게 기본값으로 두면 안 되는 것들입니다. 그리고 그 대가는 보통 2~3년 뒤, 데이터가 수백 GB로 불어난 다음에 청구됩니다.이 글에서는 설치부터 첫 접속까지를 다루되, "왜 이렇게 하는가" 에 집중합니다. 명령어만 필요하시면 맨 아래 체크리스트로 바로 가..

반응형