| PostgreSQL 9.2.24 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.2 : 메이저 토토 사이트 물리적 스토리지 | 위로 | 56장. 토토 핫 물리적 저장소 | 토토 : 문서 : 9.2 : 토스트 | |
이 섹션에서는 다음 수준의 저장 형식을 설명합니다. 파일 및 디렉터리.
데이터베이스 클러스터에 필요한 모든 데이터는 데이터베이스 클러스터에 저장됩니다. 일반적으로 다음과 같이 참조되는 클러스터의 데이터 디렉터리입니다.PGDATA(환경 변수 이름 뒤) 정의하는 데 사용할 수 있습니다.) 의 공통 위치PGDATAis/var/lib/pgsql/data. 여러 클러스터, 관리됨 서로 다른 서버 인스턴스로 동일한 시스템에 존재할 수 있습니다.
그PGDATA디렉토리에는 여러 개가 포함되어 있습니다. 하위 디렉터리 및 제어 파일(그림 참조)표 56-1. 이러한 필수 항목 외에도 클러스터 구성 파일postgresql.conf, pg_hba.conf및pg_ident.conf전통적으로 다음 위치에 저장됩니다.PGDATA(비록포스트그레SQL8.0 이상에서는 다음이 가능합니다. 다른 곳에 보관하세요).
표 56-1. 의 내용PGDATA
| 항목 | 설명 |
|---|---|
| PG_VERSION | 다음의 주요 버전 번호를 포함하는 파일포스트그레SQL |
| 베이스 | 데이터베이스별 하위 디렉토리 하위 디렉터리 |
| 글로벌 | 다음과 같은 클러스터 전체 테이블을 포함하는 하위 디렉토리pg_database |
| pg_clog | 트랜잭션 커밋 상태를 포함하는 하위 디렉토리 데이터 |
| pg_multixact | 다중 트랜잭션 상태 데이터가 포함된 하위 디렉토리 (공유 행 잠금에 사용됨) |
| pg_notify | LISTEN/NOTIFY 상태를 포함하는 하위 디렉토리 데이터 |
| pg_serial | 커밋에 대한 정보가 포함된 하위 디렉토리 직렬화 가능한 트랜잭션 |
| pg_snapshots | 내보낸 스냅샷이 포함된 하위 디렉터리 |
| pg_stat_tmp | 임시 파일이 포함된 하위 디렉토리 통계 하위 시스템 |
| pg_subtrans | 하위 거래 상태를 포함하는 하위 디렉토리 데이터 |
| pg_tblspc | 다음에 대한 기호 링크가 포함된 하위 디렉토리 테이블스페이스 |
| pg_twophase | 준비된 상태 파일을 포함하는 하위 디렉토리 업무 |
| pg_xlog | WAL(미리 쓰기 로그)을 포함하는 하위 디렉토리 파일 |
| postmaster.opts | 서버의 명령줄 옵션을 기록하는 파일 마지막으로 시작되었습니다. |
| postmaster.pid | 현재 포스트마스터 프로세스를 기록하는 잠금 파일 ID(PID), 클러스터 데이터 디렉터리 경로, 포스트마스터 시작 타임스탬프, 포트 번호, Unix 도메인 소켓 디렉터리 경로 (Windows에서는 비어 있음), 첫 번째 유효한 Listen_address(IP 주소 또는*, 그렇지 않은 경우 비어 있음 TCP 수신) 및 공유 메모리 세그먼트 ID(이것은 서버 종료 후 파일이 존재하지 않습니다) |
클러스터의 각 데이터베이스에는 하위 디렉토리가 있습니다 이내에PGDATA/베이스, 데이터베이스의 OID를 따서 명명됨pg_database. 이 하위 디렉터리는 데이터베이스 파일의 기본 위치. 특히 그 시스템 카탈로그가 여기에 저장됩니다.
각 테이블과 인덱스는 별도의 파일에 저장됩니다. 을 위한 일반적인 관계에서 이러한 파일은 테이블 이름을 따서 명명되거나 인덱스파일 노드숫자, 다음과 같을 수 있습니다. 에서 발견됨pg_class.relfilenode. 하지만 일시적인 관계의 경우 파일 이름은tBBB_FFF, 여기서BBB은 백엔드의 백엔드 ID입니다. 파일을 생성했으며, 그리고FFF이것은 파일노드 번호. 두 경우 모두 기본 파일 외에 (a/k/a 메인 포크), 각 테이블과 인덱스에는여유 공간 지도(참조섹션 56.315498_15664_fsm. 테이블에는 다음도 있습니다.가시성 지도, 접미사가 붙은 포크에 저장됨_vm, 어떤 페이지가 알려진지 추적 데드 튜플이 없습니다. 가시성 지도는 다음에 자세히 설명되어 있습니다.배트맨 토토 : 문서 : 9.2 : 가시성 맵. 기록되지 않은 테이블 및 인덱스에는 초기화 포크라고 하는 세 번째 포크가 있습니다. 접미사가 붙은 포크에 저장됩니다._init(참조윈 토토 : 문서 : 9.2 : 초기화 포크).
| 주의 |
|
테이블의 파일 노드는 종종 테이블의 파일 노드와 일치한다는 점에 유의하십시오.
OID는요아님반드시 해당 경우입니다.
다음과 같은 일부 작업잘라내기,
REINDEX, 클러스터및 일부 형태의테이블 변경, 파일 노드를 변경할 수 있는 동안
OID를 보존합니다. 파일 노드와
테이블 OID는 동일합니다. 또한 특정 시스템 카탈로그의 경우
포함pg_class그 자체,pg_class.relfilenode0이 포함되어 있습니다. 실제
이러한 카탈로그의 파일 노드 번호는
하위 수준 데이터 구조이며, 다음을 사용하여 얻을 수 있습니다. |
테이블이나 인덱스가 1GB를 초과하면 다음으로 나뉩니다. 기가바이트 크기세그먼트. 첫 번째 세그먼트의 파일 이름은 파일 노드와 동일합니다. 후속 세그먼트의 이름은 filenode.1, filenode.2 등으로 지정됩니다. 파일 크기 제한이 있는 플랫폼에서의 문제를 방지합니다. (실제로는 1GB가 기본 세그먼트 크기입니다. 세그먼트는 구성 옵션을 사용하여 크기를 조정할 수 있습니다.--세그사이즈 포함빌드할 때PostgreSQL.) 원칙적으로 여유 공간 맵은 가시성 맵 포크에도 여러 세그먼트가 필요할 수 있습니다. 하지만 실제로는 이런 일이 일어날 가능성이 없습니다.
잠재적으로 큰 항목이 있는 열이 있는 테이블은 관련이 있습니다토스트테이블입니다. 너무 큰 필드 값을 라인 외부에 저장하는 데 사용됩니다. 테이블 행을 적절하게 유지합니다.pg_class.reltoastrelid테이블에서 해당 테이블로의 링크토스트테이블(있는 경우). 보다섹션 56.2더 보기 정보.
테이블과 색인의 내용은 다음에 자세히 설명되어 있습니다.PostgreSQL : 문서 : 9.2 : 데이터베이스 토토 레이아웃.
테이블스페이스는 시나리오를 더욱 복잡하게 만듭니다. 각 사용자 정의 테이블스페이스에는 내부에 심볼릭 링크가 있습니다.PGDATA/pg_tblspc디렉터리(물리적 테이블스페이스 디렉토리를 가리킴) (즉, 테이블스페이스의테이블스페이스 생성명령). 이 심볼릭 링크는 테이블스페이스의 OID를 따서 명명되었습니다. 물리적 테이블스페이스 내부 디렉터리에는 다음 이름에 따라 이름이 지정된 하위 디렉터리가 있습니다.PostgreSQL서버 버전, 예: 처럼PG_9.0_201008051. (이유는 이 하위 디렉토리를 사용하면 다음 버전의 데이터베이스는 동일한 것을 사용할 수 있습니다만들기 테이블스페이스충돌 없는 위치 값입니다.) 버전별 하위 디렉터리, 각 버전마다 하위 디렉터리가 있습니다. 데이터베이스 이름을 따서 명명된 테이블스페이스에 요소가 있는 데이터베이스 데이터베이스의 OID입니다. 테이블과 인덱스는 그 안에 저장됩니다. 파일 노드 명명 체계를 사용하는 디렉터리입니다. 그만큼pg_default테이블스페이스는 다음을 통해 액세스되지 않습니다.pg_tblspc, 그러나 다음과 일치함PGDATA/베이스. 마찬가지로,pg_global테이블스페이스는 다음을 통해 액세스할 수 없습니다.pg_tblspc하지만 에 해당함PGDATA/글로벌.
더pg_relation_filepath()함수는 전체 경로를 표시합니다(관련PGDATA) 모든 관계의. 종종 다음과 같이 유용합니다.
위의 많은 규칙을 기억하는 것으로 대체하십시오. 하지만 계속 들어가세요
이 함수는 첫 번째 세그먼트의 이름만 제공한다는 점에 유의하세요.
관계의 주요 포크 중 - 추가해야 할 수도 있습니다.
세그먼트 번호 및/또는_fsm, _vm, 또는_init모두 찾기
관계와 관련된 파일입니다.
임시 파일(보다 많은 데이터를 정렬하는 등의 작업용) 메모리에 맞을 수 있음)은 내에 생성됩니다.PGDATA/base/pgsql_tmp, 또는 a 내에서pgsql_tmp의 하위 디렉토리 테이블스페이스가 아닌 경우 테이블스페이스 디렉터리pg_default이(가) 지정되었습니다. 의 이름 임시 파일의 형식은 다음과 같습니다.pgsql_tmpPPP.NNN, 어디PPP은 PID입니다 백엔드 소유 및NNN해당 백엔드의 다른 임시 파일을 구별합니다.