그pgstattuple모듈은 배트맨 토토 수준 통계를 얻기 위한 다양한 기능을 제공합니다.
이러한 함수는 자세한 페이지 수준 정보를 반환하기 때문에 기본적으로 액세스가 제한됩니다. 기본적으로 역할만pg_stat_scan_tables있음실행특권. 물론 슈퍼유저는 이 제한을 우회합니다. 확장 프로그램이 설치된 후 사용자는 다음을 발행할 수 있습니다.부여다른 사람이 실행할 수 있도록 기능에 대한 권한을 변경하는 명령입니다. 그러나 해당 사용자를pg_stat_scan_tables대신 역할을 수행하세요.
pgstattuple(regclass)가 레코드를 반환함pgstattuple관계의 물리적 길이, 백분율을 반환합니다.“죽음”튜플 및 기타 정보. 이는 사용자가 진공이 필요한지 여부를 결정하는 데 도움이 될 수 있습니다. 인수는 대상 관계의 이름(선택적으로 스키마 한정) 또는 OID입니다. 예를 들면:
test= SELECT * FROM pgstattuple('pg_catalog.pg_proc');
-[ 기록 1 ]------+-------
테이블렌 | 458752
tuple_count | 1470
tuple_len | 438896
tuple_percent | 95.67
dead_tuple_count | 11
dead_tuple_len | 3157
dead_tuple_percent | 0.69
여유 공간 | 8932
free_percent | 1.95
          출력 열은 다음에 설명되어 있습니다.표 F.23.
표 F.23. pgstattuple출력 열
| 칼럼 | 유형 | 설명 | 
|---|---|---|
table_len | 
                    bigint | 
                    물리적 관계 길이(바이트) | 
tuple_count | 
                    비긴트 | 
                    라이브 배트맨 토토 수 | 
tuple_len | 
                    비긴트 | 
                    활성 배트맨 토토의 총 길이(바이트) | 
tuple_percent | 
                    float8 | 
                    라이브 배트맨 토토의 백분율 | 
dead_tuple_count | 
                    비긴트 | 
                    죽은 배트맨 토토 수 | 
dead_tuple_len | 
                    비긴트 | 
                    데드 배트맨 토토의 총 길이(바이트) | 
dead_tuple_percent | 
                    float8 | 
                    죽은 배트맨 토토의 백분율 | 
free_space | 
                    비긴트 | 
                    총 여유 공간(바이트) | 
free_percent | 
                    float8 | 
                    여유 공간 비율 | 
그table_len항상 다음의 합보다 큽니다tuple_len, dead_tuple_len그리고free_space. 그 차이는 고정된 페이지 오버헤드, 튜플에 대한 포인터의 페이지별 테이블, 튜플이 올바르게 정렬되도록 보장하는 패딩으로 설명됩니다.
pgstattuple관계에 대한 읽기 잠금만 획득합니다. 따라서 결과는 즉각적인 스냅샷을 반영하지 않습니다. 동시 업데이트가 영향을 미칩니다.
pgstattuple튜플이 다음과 같다고 판단함“죽음”ifHeapTupleSatisfiesDirty거짓을 반환합니다.
pgstattuple(text)가 레코드를 반환함이것은 다음과 같습니다pgstattuple(regclass), 단, 대상 관계가 TEXT로 지정된 경우는 제외됩니다. 이 기능은 지금까지 이전 버전과의 호환성으로 인해 유지되었으며 향후 릴리스에서는 더 이상 사용되지 않을 예정입니다.
pgstatindex(regclass)가 레코드를 반환함pgstatindexB-트리 인덱스에 대한 정보를 표시하는 레코드를 반환합니다. 예를 들면:
test= SELECT * FROM pgstatindex('pg_cast_oid_index');
-[ 기록 1 ]------+------
버전 | 2
트리레벨 | 0
인덱스_크기 | 16384
루트_블록_노 | 1
내부_페이지 | 0
leaf_pages | 1
빈_페이지 | 0
삭제된_페이지 | 0
평균_잎_밀도 | 54.27
잎_조각화 | 0
          출력 열은 다음과 같습니다:
| 칼럼 | 유형 | 설명 | 
|---|---|---|
버전 | 
                  정수 | 
                  B-트리 버전 번호 | 
tree_level | 
                  정수 | 
                  루트 페이지의 트리 수준 | 
index_size | 
                  비긴트 | 
                  총 색인 크기(바이트) | 
root_block_no | 
                  비긴트 | 
                  루트 페이지 위치(없으면 0) | 
internal_pages | 
                  비긴트 | 
                  개수“내부”(상위) 페이지 | 
leaf_pages | 
                  bigint | 
                  리프 페이지 수 | 
empty_pages | 
                  비긴트 | 
                  빈 페이지 수 | 
삭제_페이지 | 
                  비긴트 | 
                  삭제된 페이지 수 | 
avg_leaf_density | 
                  float8 | 
                  리프 페이지의 평균 밀도 | 
leaf_fragmentation | 
                  float8 | 
                  리프 페이지 조각화 | 
보고된 내용index_size일반적으로 다음이 설명하는 것보다 하나 더 많은 페이지에 해당합니다internal_pages + leaf_pages +empty_pages + delete_pages, 색인의 메타페이지도 포함되어 있기 때문입니다.
와 마찬가지로pgstattuple, 결과는 페이지별로 누적되며 전체 색인의 즉각적인 스냅샷을 나타낼 것으로 예상해서는 안 됩니다.
pgstatindex(text)가 레코드를 반환함이것은 다음과 같습니다pgstatindex(regclass), 단, 대상 인덱스는 TEXT로 지정됩니다. 이 기능은 지금까지 이전 버전과의 호환성으로 인해 유지되었으며 향후 릴리스에서는 더 이상 사용되지 않을 예정입니다.
pgstatginindex(regclass)가 레코드를 반환함pgstatginindexGIN 색인에 대한 정보를 보여주는 레코드를 반환합니다. 예를 들면:
test= SELECT * FROM pgstatginindex('test_gin_index');
-[ 기록 1 ]--+--
버전 | 1
보류 중인_페이지 | 0
보류_튜플 | 0
          출력 열은 다음과 같습니다:
| 칼럼 | 유형 | 설명 | 
|---|---|---|
버전 | 
                  정수 | 
                  GIN 버전 번호 | 
pending_pages | 
                  정수 | 
                  보류 목록의 페이지 수 | 
pending_tuples | 
                  비긴트 | 
                  보류 목록의 배트맨 토토 수 | 
pgstathashindex(regclass)가 레코드를 반환함pgstathashindexHASH 인덱스에 대한 정보를 보여주는 레코드를 반환합니다. 예를 들면:
test= pgstathashindex('con_hash_index')에서 *를 선택하세요.
-[ 기록 1 ]--+----
버전 | 4
버킷_페이지 | 33081
오버플로_페이지 | 0
비트맵_페이지 | 1
미사용_페이지 | 32455
라이브_아이템 | 10204006
죽은 아이템 | 0
free_percent | 61.8005949100872
          출력 열은 다음과 같습니다:
| 칼럼 | 유형 | 설명 | 
|---|---|---|
버전 | 
                  정수 | 
                  HASH 버전 번호 | 
bucket_pages | 
                  비긴트 | 
                  버킷 페이지 수 | 
overflow_pages | 
                  비긴트 | 
                  오버플로 페이지 수 | 
bitmap_pages | 
                  비긴트 | 
                  비트맵 페이지 수 | 
unused_pages | 
                  비긴트 | 
                  사용하지 않은 페이지 수 | 
live_items | 
                  비긴트 | 
                  라이브 배트맨 토토 수 | 
dead_tuples | 
                  비긴트 | 
                  죽은 배트맨 토토 수 | 
free_percent | 
                  플로트 | 
                  여유 공간 비율 | 
pg_relpages(regclass)가 bigint를 반환함pg_relpages관계의 페이지 수를 반환합니다.
pg_relpages(text)는 bigint를 반환합니다.이것은 다음과 같습니다pg_relpages(regclass), 단, 대상 관계가 TEXT로 지정된 경우는 제외됩니다. 이 기능은 지금까지 이전 버전과의 호환성으로 인해 유지되었으며 향후 릴리스에서는 더 이상 사용되지 않을 예정입니다.
pgstattuple_about(regclass)가 레코드를 반환합니다.pgstattuple_about더 빠른 대안입니다.pgstattuple26996_27096
test= SELECT * FROM pgstattuple_about('pg_catalog.pg_proc'::regclass);
-[ 기록 1 ]---------+-------
테이블렌 | 573440
스캔_퍼센트 | 2
대략_튜플_카운트 | 2740
대략_튜플_렌 | 561210
대략_튜플_퍼센트 | 97.87
dead_tuple_count | 0
dead_tuple_len | 0
dead_tuple_percent | 0
대략_여유_공간 | 11996
약_무료_퍼센트 | 2.09
          출력 열은 다음에 설명되어 있습니다.표 F.24.
반면에pgstattuple항상 전체 테이블 스캔을 수행하고 라이브 및 데드 배트맨 토토(및 해당 크기)과 여유 공간의 정확한 수를 반환합니다.pgstattuple_about전체 테이블 스캔을 피하려고 시도하고 라이브 배트맨 토토 및 여유 공간의 대략적인 수와 크기와 함께 정확한 데드 배트맨 토토 통계를 반환합니다.
가시성 맵에 따라 보이는 배트맨 토토만 있는 페이지를 건너뛰어 이를 수행합니다(페이지에 해당 VM 비트가 설정된 경우 데드 배트맨 토토이 없는 것으로 가정됩니다). 이러한 페이지의 경우 여유 공간 맵에서 여유 공간 값을 파생시키고 페이지의 나머지 공간은 라이브 배트맨 토토이 차지한다고 가정합니다.
건너뛸 수 없는 페이지의 경우 각 배트맨 토토을 검색하여 해당 카운터에 존재 여부와 크기를 기록하고 페이지의 여유 공간을 합산합니다. 마지막에는 스캔된 페이지 및 배트맨 토토 수를 기반으로 총 활성 배트맨 토토 수를 추정합니다(VACUUM이 pg_class.reltuples를 추정하는 것과 같은 방식).
표 F.24. pgstattuple_about출력 열
| 칼럼 | 유형 | 설명 | 
|---|---|---|
table_len | 
                    비긴트 | 
                    바이트 단위의 물리적 관계 길이(정확함) | 
scanned_percent | 
                    float8 | 
                    스캔된 테이블의 비율 | 
about_tuple_count | 
                    비긴트 | 
                    라이브 배트맨 토토 수(예상) | 
about_tuple_len | 
                    bigint | 
                    활성 배트맨 토토의 총 길이(바이트)(추정) | 
about_tuple_percent | 
                    float8 | 
                    라이브 배트맨 토토의 백분율 | 
dead_tuple_count | 
                    비긴트 | 
                    죽은 배트맨 토토 수(정확히) | 
dead_tuple_len | 
                    bigint | 
                    데드 배트맨 토토의 총 길이(바이트)(정확함) | 
dead_tuple_percent | 
                    float8 | 
                    죽은 배트맨 토토의 백분율 | 
about_free_space | 
                    비긴트 | 
                    바이트 단위의 총 여유 공간(예상) | 
about_free_percent | 
                    float8 | 
                    여유 공간 비율 | 
위 출력에서 여유 공간 수치는 다음과 일치하지 않을 수 있습니다.pgstattuple정확하게 출력됩니다. 여유 공간 맵이 정확한 수치를 제공하지만 바이트 단위까지 정확하다고 보장할 수는 없기 때문입니다.
이시이 타츠오, 나가야스 사토시, 아히짓 메논-센
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.