Oracle에서 PostgreSQL로의 전환 2탄: 테이블스페이스의 차이점 분석

이세현·2024년 10월 9일
0

PostgreSQL for DBA

목록 보기
13/19

블로그 작성 배경

Oracle와 PostgreSQL에서의 테이블스페이스는 데이터베이스 객체의 저장 및 관리에 있어 중요한 개념으로, 두 DBMS가 각각 다르게 구현하고 있기 때문에 이를 이해하는 것이 중요합니다. 이 글에서는 Oracle과 PostgreSQL에서 테이블스페이스가 어떻게 다른지, 그리고 그 차이가 데이터베이스 관리에 어떤 영향을 미치는지 심도 있게 설명하겠습니다.

0. 테이블스페이스

테이블스페이스는 데이터베이스 관리 시스템에서 중요한 역할을 하며, 데이터베이스 객체인 테이블과 인덱스가 저장되는 위치와 방식을 결정합니다. Oracle과 PostgreSQL 모두 테이블스페이스 개념을 가지고 있지만, 각 데이터베이스의 전체 아키텍처에 따라 이를 다르게 구현합니다.

Oracle의 테이블스페이스는 데이터 유형을 분리하고, 저장소를 관리하며, 성능을 최적화하는 등 다양한 기능을 제공하는 데이터베이스의 필수적인 부분입니다. 반면, PostgreSQL은 주로 데이터베이스의 물리적 파일이 저장되는 위치를 제어하기 위해 테이블스페이스를 사용하며, 접근 방식이 더 단순합니다.

1. Oracle의 테이블스페이스

1. Oracle과 PostgreSQL의 테이블스페이스 개요

Oracle의 테이블스페이스 접근법

그림1

Oracle에서 테이블스페이스는 하나 이상의 데이터 파일로 구성된 논리적 저장 단위입니다. 이 데이터 파일은 테이블, 인덱스 및 물리화된 뷰와 같은 실제 데이터를 저장합니다. Oracle은 특정 목적을 위해 다양한 유형의 테이블스페이스를 사용합니다.

  • SYSTEM 및 SYSAUX: 시스템 메타데이터를 포함한 필수 관리 데이터를 포함합니다. SYSTEM 테이블스페이스는 데이터베이스 작동에 필수적이며, SYSAUX는 일부 작업 부하를 분산하는 데 도움을 줍니다.
  • 사용자 테이블스페이스: 애플리케이션 전용 데이터를 저장하는 데 사용되며, 관리자가 다양한 데이터 세트를 조직하는 방법에 대한 유연성을 제공합니다.
  • TEMP 테이블스페이스: 임시 데이터를 관리하는 데 사용됩니다. 예를 들어, 결과 정렬과 같은 임시 작업에 사용됩니다.
  • UNDO 테이블스페이스: 트랜잭션 롤백 및 읽기 일관성을 유지하는 데 필수적인 UNDO 정보를 저장하는 데 사용됩니다.

Oracle의 접근 방식은 DBA가 저장소 성능을 관리하고 I/O를 최적화하며 데이터베이스 유지 관리를 용이하게 할 수 있도록 합니다.

PostgreSQL의 테이블스페이스 접근법

그림2

PostgreSQL 테이블스페이스는 Oracle에 비해 훨씬 간단하며, 주로 데이터가 저장되는 파일 시스템의 디렉토리에 대한 포인터로 작용합니다. 기본 저장소 위치는 데이터 디렉토리(pg_default)이며, 사용자 정의 테이블스페이스를 생성하여 다양한 물리적 디스크에 저장소를 관리할 수 있습니다.

PostgreSQL은 CREATE TABLESPACE 명령어를 사용하여 테이블스페이스를 생성하고 디렉토리 경로를 지정할 수 있습니다.

이러한 사용자 정의 테이블스페이스는 데이터베이스 객체를 다양한 저장소 위치에 저장하는 데 사용할 수 있으며, I/O 부하를 분산하여 성능을 개선합니다.

Oracle과 달리 PostgreSQL은 임시 또는 UNDO 데이터에 대한 전문 테이블스페이스를 포함하지 않으며, 대신 MVCC를 사용하여 읽기 일관성을 유지하고 파일 시스템 디렉토리를 저장소로 활용합니다.

2. 테이블스페이스의 생성 및 관리

Oracle 테이블스페이스 관리

Oracle에서 테이블스페이스를 생성하고 관리하는 것은 여러 고급 기능을 포함합니다.

테이블스페이스 생성: Oracle 테이블스페이스는 CREATE TABLESPACE 명령어로 생성됩니다. 관리자는 데이터 저장 방식을 관리하기 위해 DATAFILE, SIZE, AUTOEXTEND 및 익스텐트 관리와 같은 매개변수를 지정할 수 있습니다.

CREATE TABLESPACE user_data 
DATAFILE '/u01/app/oracle/oradata/orcl/user_data01.dbf' SIZE 100M 
AUTOEXTEND ON NEXT 10M MAXSIZE 1G;

이 명령어는 필요에 따라 크기가 증가하는 데이터 파일과 함께 user_data 테이블스페이스를 생성합니다.

  • Managing Growth: Oracle은 AUTOEXTEND 기능을 통해 유연성을 제공하며, 테이블스페이스 용량을 늘리기 위해 데이터 파일을 추가할 수 있습니다. 대형 데이터베이스를 위한 간편한 관리 기능을 제공하는 big file 및 small file 테이블스페이스 사용이 또한 도움이 됩니다.

  • Specialized Tablespaces: TEMP 및 UNDO 테이블스페이스와 같은 전문 기능을 제공하여 임시 정렬 작업이나 트랜잭션 롤백을 관리할 수 있습니다. 이러한 세분화는 성능을 향상시키고 서로 다른 작업이 동일한 저장소 자원을 경쟁하지 않도록 보장합니다.

PostgreSQL 테이블스페이스 관리

PostgreSQL에서는 CREATE TABLESPACE 명령어를 사용하여 테이블스페이스를 생성하고 특정 디렉토리에 연결됩니다.

sql
CREATE TABLESPACE fast_storage LOCATION '/mnt/ssd/pg_fast_storage';

이 명령어는 /mnt/ssd/pg_fast_storage 디렉토리를 가리키는 fast_storage 테이블스페이스를 생성합니다.

  • 테이블스페이스 할당: PostgreSQL은 테이블스페이스를 전체 데이터베이스, 개별 테이블 또는 인덱스에 할당할 수 있습니다. 이러한 유연성은 DBA가 다양한 물리적 장치에 데이터를 분산하여 성능을 최적화할 수 있도록 도와줍니다.

  • 디렉토리 기반 관리: Oracle의 데이터 파일 시스템과 달리 PostgreSQL 테이블스페이스는 파일 시스템에 직접 의존합니다. 자동 크기 조정 또는 익스텐트 관리가 없습니다.

3. 아키텍처적 차이

데이터 파일 처리

  • Oracle: Oracle에서 테이블스페이스는 하나 이상의 데이터 파일로 구성됩니다. 이러한 데이터 파일은 자동으로 성장하거나 수동으로 크기를 조정할 수 있습니다. Oracle은 extents 와 segments 를 사용하여 테이블스페이스 내에서 데이터 분배를 관리하여 저장소 최적화 및 성능을 개선합니다.

  • PostgreSQL: PostgreSQL 테이블스페이스는 파일 시스템의 디렉토리로 표현되며, 해당 테이블스페이스와 관련된 모든 데이터가 저장됩니다. PostgreSQL은 명시적인 데이터 파일 없이 파일 시스템에 의존하여 데이터 관리를 수행합니다.

목적 및 복잡성

  • Oracle: Oracle 테이블스페이스는 시스템, 사용자, 임시 및 UNDO 데이터를 분리하는 논리적 컨테이너 역할을 합니다. 이 계층화된 아키텍처는 더 나은 제어 및 성능 조정 기능을 제공합니다.

  • PostgreSQL: PostgreSQL 테이블스페이스는 주로 데이터를 서로 다른 저장 장치에 배치하는 데 사용됩니다. PostgreSQL의 테이블스페이스 아키텍처의 단순성은 DBA에게 직관적인 저장소 솔루션을 제공하지만, Oracle에서 찾을 수 있는 Specialized Tablespaces 옵션이 부족합니다.

4. 실용적 사용 사례

Oracle 테이블스페이스는 다음과 같은 용도로 사용됩니다.

  • I/O 최적화: 테이블과 인덱스를 서로 다른 테이블스페이스에 배치하여 경쟁을 줄이고 성능을 향상시킵니다.
  • 스토리지 확장: 빅파일 테이블스페이스를 사용하여 대량 데이터 세트를 관리함으로써 처리해야 하는 물리적 파일 수를 줄입니다.

PostgreSQL 테이블스페이스는 종종 다음과 같은 용도로 사용됩니다.

  • 데이터 분산: 데이터를 서로 다른 드라이브에 분산하여 성능을 개선하고 저장소 자원을 효율적으로 사용합니다.

  • 사용자 정의 저장소 위치: 고사용량 테이블이나 인덱스를 더 빠른 저장소(예: SSD)에 할당하여 읽기/쓰기 성능을 개선합니다.

5. 백업, 복구 및 유지 관리

백업 전략

  • Oracle: Oracle 테이블스페이스는 RMAN을 사용하여 개별적으로 백업할 수 있으며, 특정 테이블스페이스에 대해 시점 복구를 수행하는 데 매우 유용합니다.

  • PostgreSQL: PostgreSQL은 pg_dump 및 pg_restore를 사용하여 데이터베이스의 백업과 복원을 수행하며, 각 테이블스페이스를 별도로 백업할 수 있습니다.

유지 관리 작업

  • Oracle: 테이블스페이스의 정기적인 모니터링, 조정 및 최적화를 수행하여 데이터베이스 성능을 유지하고 효율성을 높입니다.

  • PostgreSQL: PostgreSQL은 VACUUM 및 ANALYZE를 통해 데이터베이스의 성능을 유지하고, 각 테이블스페이스의 통계를 수집하여 쿼리 옵티마이저를 돕습니다.

6. 고가용성 및 성능 고려 사항

고가용성

  • Oracle: Oracle 데이터베이스는 Real Application Clusters(RAC)를 통해 여러 인스턴스에서 테이블스페이스를 공유하여 고가용성을 지원합니다.

  • PostgreSQL: PostgreSQL은 테이블스페이스를 복제하여 고가용성을 구현할 수 있지만, Oracle만큼 완전한 솔루션은 아닙니다.

성능 관리

  • Oracle: 성능 조정은 테이블스페이스 내의 세그먼트와 익스텐트를 관리하여 수행됩니다.

  • PostgreSQL: PostgreSQL은 테이블스페이스를 여러 드라이브에 분산하여 성능을 조정하며, 더 간단한 구조로 인해 DBA가 성능을 관리하는 데 집중할 수 있습니다.

마이그레이션 고려 사항

Oracle에서 PostgreSQL로 마이그레이션할 때, 테이블스페이스 구조와 이를 적절하게 반영하는 것이 중요합니다. DBA는 다음 사항을 고려해야 합니다.

  • 테이블스페이스의 재구성: Oracle 테이블스페이스를 PostgreSQL의 기본 및 사용자 정의 테이블스페이스로 변환합니다. 필요한 경우 PostgreSQL의 데이터를 다시 분산합니다.
  • 성능 테스트: 마이그레이션 후 성능 테스트를 통해 쿼리 성능을 보장하고, 문제를 조기에 식별합니다.

결론

Oracle과 PostgreSQL의 테이블스페이스는 데이터베이스 성능과 관리에 중요한 역할을 합니다. Oracle은 데이터 분할 및 성능 최적화에 필요한 다양한 고급 기능을 제공하지만, PostgreSQL은 직관적인 관리와 유연성을 제공합니다. DBA는 이러한 차이를 이해하고 각 데이터베이스의 요구에 맞게 최적화된 테이블스페이스 전략을 개발하여 데이터베이스 성능을 향상시킬 수 있습니다.

profile
pglover_12

0개의 댓글