[왜 TableSpaces 를 나눌까?]
PostgreSQL의 테이블스페이스는 데이터베이스 관리자가 데이터베이스 객체를 나타내는 파일을 저장할 수 있는 파일 시스템의 위치를 정의할 수 있게 한다. 생성된 경우 테이블스페이스는 데이터베이스 객체 생성 시 이름으로 참조가 가능하다.
[PostgreSQL 에서 테이블스페이스를 사용함으로써 'Disk Layout' 을 제어할 수 있게 된다.]
- 1. 클러스터가 초기화된 파티션 또는 볼륨 공간이 고갈되어 확장이 불가능한 경우, 다른 파티션에 테이블스페이스를 생성하고 시스템이 재인식될 때까지 사용할 수 있어진다.
- 2. 관리자가 성능 최적화를 위해 데이터베이스 객체의 사용 패턴에 대한 지식을 사용가능하게 한다.
ex. 사용이 빈번한 Index는 SSD 같은 속도가 빠르고 고가용성인 디스크에 할당할 수 있으며, 거의 사용되지 않거나 성능이 중요하지 않은 데이터가 저장된(되는) 테이블은 HDD에 할당할 수 있게 된다.
[pg_tblespc 의 역할]
테이블스페이스 생성을 위해 특정 폴더(디렉토리)를 만들고(지정하고) 테이블스페이스를 생성하게 되면, Data/pg_tblspc/[oid] 에 Sybolic Link가 걸리게 되며 해당 링크를 통해 디렉토리의 파일들을 조회할 수 있게 된다.
아래 그림을 보면 /opt/PostgreSQL/9.4/Data/base 디렉토리에 16628(oid) 라는 테이블스페이스가 Symbolic Link 가 걸리게 되는데, 실제 해당 링크는 /PostgreSQL/tblspace/ 이다.
ex)
[pg_tblspc]
C:\database\Postgresql\pgsql\Data\pg_tblspc\
테이블스페이스를 2개 생성하여 사용 중이며, 각각 밸런싱하여 데이터를 적재시키고 있다.
C:\onTune\database\Postgresql\pgsql\Data\pg_tblspc\456573\PG_15_202209061\16384
[실제 tablespace 경로]
C:\ontunedata1\PG_15_202209061\16384
C:\ontunedata2\PG_15_202209061\16384
[DB에 대한 OID 확인]
ontune=# select oid,datname from pg_database;
oid | datname
-------+-----------
5 | postgres
1 | template1
4 | template0
16384 | ontune
(4개 행)
ontune=# \db
테이블스페이스 목록
이름 | 소유주 | 위치
-------------+--------+----------------
ontunedata1 | ontune | C:\ontunedata1
ontunedata2 | ontune | C:\ontunedata2
pg_default | ontune |
pg_global | ontune |
(4개 행)
ontune=# \list
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | ICU 로케일 | 로케일 제공자 | 액세스 권한
-----------+--------+--------+---------+-------+------------+---------------+-------------------
ontune | ontune | UTF8 | C | C | | libc | =Tc/ontune +
| | | | | | | ontune=CTc/ontune+
| | | | | | | itsmusr=c/ontune
postgres | ontune | UTF8 | C | C | | libc |
template0 | ontune | UTF8 | C | C | | libc | =c/ontune +
| | | | | | | ontune=CTc/ontune
template1 | ontune | UTF8 | C | C | | libc | =c/ontune +
| | | | | | | ontune=CTc/ontune
(4개 행)
[테이블스페이스 생성 방법]
1. 디렉토리 생성
Windows : 테이블스페이스로 사용하길 원하는 디스크의 경로에 생성
Linux : 테이블스페이스로 사용하길 원하는 파일시스템에 생성
ㄴ mkdir -p /tablespace
2. 디렉토리 권한 부여
Linux : chown postgres /tablespace
3. 테이블스페이스 생성
LOCATION - 테이블스페이스 생성 경로를 지정
OWNER - 해당 테이블스페이스를 소유하는 DB 유저를 지정 (생략할 경우, 쿼리를 작성하는;현재 접속중인 계정의 소유물
로 된다. pg의 슈퍼유저만 테이블스페이스를 생성할 수 있지만, 권한을 부여받은 USER도 생성이 가능함)
여기서 생성이 안되면 해당 테이블스페이스의 디렉토리에 대한 권한이 없는 것임
CREATE TABLESPACE [테이블스페이스명] OWNER [DB사용자명] LOCATION '/tablespace';
[테이블스페이스 변경 방법]
1. 이름 변경
ALTER TABLESPACE [테이블스페이스명] RENAME TO [새로운 테이블스페이스명];
2. 소유자 변경
ALTER TABLESPACE [테이블스페이스명] OWNER TO [새로운 사용자명];
[테이블스페이스 삭제 방법]
주의
* TABLESPACE 를 삭제해도, OS 내에 생성한 테이블스페이스 디렉토리는 없어지지 않음
* DB 객체가 있을 경우, 삭제되지 않음
DROP TABLESPACE [테이블스페이스명];
'DataBase > postgreSQL' 카테고리의 다른 글
[PostgreSQL] 데이터베이스 관리 - 권한 (0) | 2024.12.12 |
---|---|
[PostgreSQL] DB 로그인시 자동접속 설정하기(pgpass.conf) (0) | 2024.12.03 |
[PostgreSQL] idle in transaction 설정 (0) | 2024.10.25 |
[PostgreSQL] initDB 실패 (0) | 2024.10.11 |
[PostgreSQL, CentOS7] 소스코드 컴파일하여 postgresql 16 설치 (소스 설치) (1) | 2024.09.04 |