1.메모리 아키텍처와 I/O 처리 (Double Buffering)
Oracle(Direct I/O 기반) :
SGA라는 메모리 공간을 할당하여 통제,
디스크에서 데이터를 읽고 쓸 때 OS의 파일 시스템 캐시를 우회하여 오라클 엔진이 메모리를 100% 독점하고 직접 관리함
postgreSQL(OS Page Cache 의존):
자체 버퍼 캐시인 shared_buffers를 가지지만, 오라클처럼 메모리를 독점하지 않음,
데이터를 읽고 쓸 때 OS의 페이지 캐시를 한 번 더 거치는 더블 버퍼링 구조를 갖음
shared_buffers를 전체 RAM의 25% 수준으로만 작게 잡고,
나머지 메모리를 OS가 파일 시스템 캐시용으로 쓰도록 내버려 두는 것이 공식 권장사항
2. 옵티마이저 패러다임과 힌트의 부재
Oracle(Hint 중심 튜닝):
힌트를 강력하게 지원함
옵티마이저가 엉뚱한 실행계획을 세우면 DBA가 힌트를 강제하여 빠르고 직관적으로 튜닝 가능
PostgreSQL(통계 및 파라미터 중심 튜닝):
철학적으로 옵티마이저 힌트를 네이티브로 지원하지 않음(필요시 pg_hint_plan 이라는 확장 모듈을 별도로 설치)
힌트에 의존하기 보다 통계 정보를 최신화하고, 쿼리를 논리적으로 재작성하거나
random_page_cost, seq_page_cost, work_mem 같은 엔진 파라미터를 조절해 옵티마이저가 올바른 비용을 계산하도록 유도
3. NULL과 빈 문자열(Empty String)
Oracle: 길이가 0인 빈 문자열 ``을 NULL과 동일하게 취급
PostgreSQL:
빈 문자열과 NULL을 다른 값으로 엄격하게 구분
오라클에서 정상 조회되던 데이터가 마이그레이션 시 조회가 안되는 오류 발생 가능
4. 인덱스의 NULL 포함 여부
Oracle:
B-TREE 인덱스 생성 시 인덱스 컬럼의 값이 모두 NULL 인 행은 인덱스 트리에 저장하지 않음
PostgreSQL:
NULL 값도 B-TREE 인덱스에 포함하여 저장
5. 트랜잭션 로그 관리(Redo VS WAL)
Oracle(Redo Log):
관리자가 지정한 크기와 개수의 Redo Log 파일(그룹)을 순환하며 덮어쓰는 구조,
덮어쓰기 전에 아카이브로 빼냄
PostgreSQL(WAL - Write Ahead Log):
순환 구조가 아니라, 기본 16MB 크기의 WAL 세그먼트 파일들을 계속 생성해서 관리
6. 스키마(Schema)와 계정(User/Role)의 종속성
Oracle:
유저(User)가 곧 스키마(Schema)
계정을 생성하면 그 계정 이름과 동일한 스키마가 1:1로 생성
PostgreSQL:
롤(Role/User)과 스키마(Schema)가 완전히 분리되어 있음
롤은 DB 클러스터 전체에 생성되는 접속 및 권한의 주체일 뿐이며,
특정 Database 안에 여러 개의 Schema(논리적 폴더)를 자유롭게 만들고,
하나의 롤이 여러 스키마의 소유권을 가질 수 있는 구조
'SQL' 카테고리의 다른 글
| Oracle과 PostgreSQL의 MVCC 구현 방식 차이 (0) | 2026.11.01 |
|---|---|
| RHEL 8에 PostgreSQL 설치하기 (0) | 2026.11.01 |
| [Oracle] DB 서버의 구조 (0) | 2026.07.27 |
| [Oracle] 오브젝트 정리 (1) | 2026.02.23 |
| [오라클] Catalog, 통계정보, Undo Retention (0) | 2026.02.19 |
댓글