PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 장 29. 디스크 사용량 모니터링 | 다음 |
각 테이블은 대부분의 데이터가 저장되는 1차 힙 디스크 파일을 갖고 있다. 테이블 칼럼의 값이 잠재적으로 큰 범위인 경우 메인 테이블에 잘 맞지 않는 값을 저장하는 데 사용되고 테이블에 연결된 TOAST 파일이 있을 수도 있다(65.2절 참조). 그런 경우에는, 유효 인덱스 1개가 TOAST 테이블에 존재한다. 또한 베이스 테이블에 연결된 인덱스도 있을 수 있다. 각 테이블 및 인덱스는 개별 디스크 파일에 저장된다. 파일 크기가 1기가바이트를 초과하는 경우에는 파일이 하나 이상일 수 있다. 이러한 파일의 네이밍 규칙은 65.1절에 설명되어 있다.
디스크 공간은 3가지 방법으로 모니터링할 수 있는데, 표 9-83에 나열된 SQL 함수를 사용하거나, oid2name 모듈을 사용하거나, 시스템 카탈로그 수동 검사를 사용할 수 있다. SQL 함수는 사용법이 매우 쉬워 보편적으로 권장된다. 이 절의 나머지 부분에서는 시스템 카탈로그를 검사하는 방법에 대해 설명한다.
최근 vacuum되었거나 분석된 데이터베이스에서 psql을 사용하면 쿼리를 실행하여 임의의 테이블에서 디스크 사용량을 볼 수 있다.
SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customer'; pg_relation_filepath | relpages ----------------------+---------- base/16384/16806 | 60 (1 row)
각 페이지는 일반적으로 8킬로바이트이다. (relpages는 VACUUM 및 ANALYZE, CREATE INDEX 같은 몇 가지 DDL 명령으로만 업데이트된다.) 파일 경로명은 테이블의 디스크 파일을 직접 검사하려는 경우에 중요하다.
TOAST 테이블에서 사용하는 공간을 표시하려면 다음과 같은 쿼리를 사용한다.
SELECT relname, relpages FROM pg_class, (SELECT reltoastrelid FROM pg_class WHERE relname = 'customer') AS ss WHERE oid = ss.reltoastrelid OR oid = (SELECT indexrelid FROM pg_index WHERE indrelid = ss.reltoastrelid) ORDER BY relname; relname | relpages ----------------------+---------- pg_toast_16806 | 0 pg_toast_16806_index | 1
인덱스 크기를 손쉽게 표시할 수도 있다.
SELECT c2.relname, c2.relpages FROM pg_class c, pg_class c2, pg_index i WHERE c.relname = 'customer' AND c.oid = i.indrelid AND c2.oid = i.indexrelid ORDER BY c2.relname; relname | relpages ----------------------+---------- customer_id_indexdex | 26
이 정보를 이용하면 최대 크기의 테이블과 인덱스를 찾을 때 용이하다.
SELECT relname, relpages FROM pg_class ORDER BY relpages DESC; relname | relpages ----------------------+---------- bigtable | 3290 customer | 3144