F.26. pg_freespacemap

F.26.1. 함수들
F.26.2. 출력 예제
F.26.3. 만든이

pg_freespacemap 모듈은 free space map (FSM)을 검사하는 기능을 제공한다. pg_freespace 함수와, 같은 함수 이름에 다른 인자를 사용할 수 있는 오버로드된 두 개의 함수도 추가적으로 지원한다. 이 함수는 지정한 페이지 또는 테이블의 여유 공간(free space)을 로우 단위로 리턴한다.

기본적으로 이 함수는 보안상 위험성이 있어, 슈퍼 유저와 pg_stat_scan_tables 롤 소속 사용자만 사용할 수 있다. 필요하다면, GRANT 명령으로 해당 사용자에게 사용 권한을 부여하면 된다.

F.26.1. 함수들

pg_freespace(rel regclass IN, blkno bigint IN) returns int2

지정한 regclass 이름의 릴레이션에서 blkno 블럭번호에서 사용할 수 있는 총 여유 공간을 리턴한다.

pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)

지정한 regclass 이름의 릴레이션의 여유 공간을 (blkno bigint, avail int2) 형태의 로우로 리턴한다. 전체 로우는 해당 객체의 전체 페이지가 되며, 각 블럭별 여유 공간을 살펴 볼 수 있다.

이 여유 공간 값은 엄밀하게 말하는 정확한 값은 아니다. BLCKSZ의 1/256 단위 (기본 BLCKSZ 값의 32 바이트)로 반올림되기 때문에, insert, update 작업으로 그 공간이 줄었는 것을 정확하게 반영하지도 않는다.

인덱스로 사용하는 페이지의 각 페이지별 세부적인 여유 공간 계산은 불가능하기 때문에, 인덱스에 대해서는 해당 페이지 전체가 여유 공간인지 아닌지를 판단하는 기준으로 밖에 사용할 수 없다.

참고

8.4 버전부터 FSM 처리 방식이 바뀌었기 때문에, 이 버전을 경계로 이 모듈을 하위 호환성이 없다. (각 버전에 맞는 모듈을 사용하시길)

F.26.2. 출력 예제

postgres=# SELECT * FROM pg_freespace('foo');
 blkno | avail 
-------+-------
     0 |     0
     1 |     0
     2 |     0
     3 |    32
     4 |   704
     5 |   704
     6 |   704
     7 |  1216
     8 |   704
     9 |   704
    10 |   704
    11 |   704
    12 |   704
    13 |   704
    14 |   704
    15 |   704
    16 |   704
    17 |   704
    18 |   704
    19 |  3648
(20 rows)

postgres=# SELECT * FROM pg_freespace('foo', 7);
 pg_freespace 
--------------
         1216
(1 row)

F.26.3. 만든이

Mark Kirkwood 에 의해 최초 작성 되었으며, Heikki Linnakangas 에 의해, 8.4 버전부터 바뀐 FSM 구현 방식을 처리하기위해 수정되었다.