thepg_buffercache
모듈은 공유 토토 캔 캐시에서 실시간으로 발생하는 일을 검사하는 수단을 제공합니다. 또한 테스트 목적으로 데이터를 퇴거시키는 낮은 수준의 방법을 제공합니다.
이 모듈은를 제공합니다.pg_buffercache_pages ()
함수 (감수pg_buffercache
보기),pg_buffercache_numa_pages ()
함수 (감자pg_buffercache_numa
보기),pg_buffercache_summary ()
함수,pg_buffercache_usage_counts ()
함수,pg_buffercache_evict ()
, Thepg_buffercache_evict_relation ()
함수 및pg_buffercache_evict_all ()
기능.
thepg_buffercache_pages ()
함수는 일련의 레코드를 리턴합니다. 각 행은 하나의 공유 토토 캔 항목의 상태를 설명합니다. 그만큼pg_buffercache
조회수는 편리한 용도로 함수를 랩핑합니다.
thepg_buffercache_numa_pages ()
제공Numa공유 토토 캔 항목에 대한 노드 매핑. 이 정보는의 일부가 아닙니다pg_buffercache_pages ()
자체는 검색하기가 훨씬 느리기 때문입니다. 그만큼pg_buffercache_numa
조회수는 편리한 용도로 함수를 랩핑합니다.
thepg_buffercache_summary ()
함수 공유 토토 캔 캐시의 상태를 요약하는 단일 행을 반환합니다.
thepg_buffercache_usage_counts ()
함수는 레코드 세트를 반환합니다. 각 행은 주어진 사용량 수를 가진 토토 캔 수를 설명합니다.
기본적으로 위의 함수의 사용은 슈퍼 유행자와 역할로 제한됩니다.pg_monitor
역할. 를 사용하여 다른 사람에게 액세스 권한이 부여 될 수 있습니다.grant
.
thepg_buffercache_evict ()
함수는 토토 캔 식별자가 주어진 토토 캔 풀에서 블록을 퇴거시킬 수 있습니다. 이 기능의 사용은 수퍼 유행자로만 제한됩니다.
thepg_buffercache_evict_relation ()
함수는 관계 식별자가 주어진 토토 캔 풀에서 퇴거 할 수 있도록 관계에서 모든 고지되지 않은 공유 토토 캔를 허용합니다. 이 기능의 사용은 수퍼 유행자로만 제한됩니다.
thepg_buffercache_evict_all ()
함수를 통해 토토 캔 풀에서 삽입되지 않은 공유 토토 캔를 모두 퇴거시킬 수 있습니다. 이 기능의 사용은 수퍼 유행자로만 제한됩니다.
pg_buffercache
보기#보기에 노출 된 열의 정의는에 표시됩니다.테이블 F.14.
표 F.14. pg_buffercache
열
열 유형 설명 |
---|
ID, 범위 1 .. |
관계의 Filenode 번호 |
관계의 테이블 스페이스 OID |
관계의 데이터베이스 OID |
관계 내 포크 번호; 보다 |
관계 내 페이지 번호 |
페이지가 더럽습니까? |
Clock-Sweep Access Count |
이 토토 캔를 고정시키는 백엔드 수 |
공유 캐시에는 각 토토 캔마다 하나의 행이 있습니다. 사용하지 않은 토토 캔는 모든 필드가 널을 제외한 모든 필드로 표시됩니다Bufferid
. 공유 시스템 카탈로그는 데이터베이스 0에 속하는 것으로 표시됩니다.
캐시는 모든 데이터베이스에서 공유되므로 일반적으로 현재 데이터베이스에 속하지 않는 관계의 페이지가 있습니다. 이것은에서 일치하는 행이 일치하지 않을 수 있음을 의미합니다.PG_CLASS
일부 행의 경우, 또는 잘못된 조인도있을 수 있습니다. 당신이 가입하려고한다면pg_class
, 가입을 행으로 제한하는 것이 좋습니다Reldatabase
현재 데이터베이스의 OID 또는 0과 동일합니다.
토토 캔 관리자 잠금 장치는보기가 표시되는 토토 캔 상태 데이터를 복사하여 촬영되지 않으므로pg_buffercache
보기는 정상적인 토토 캔 활동에 미치는 영향이 적지 만 모든 토토 캔에서 일관된 결과 세트를 제공하지는 않습니다. 그러나 우리는 각 토토 캔의 정보가 일관성이 있는지 확인합니다.
pg_buffercache_numa
보기#보기에 노출 된 열의 정의는에 표시됩니다.테이블 F.15.
표 F.15. pg_buffercache_numa
열
열 유형 설명 |
---|
ID, 범위 1 .. |
이 토토 캔의 OS 메모리 페이지 수 |
id ofNuma노드 |
asNuma각 페이지에 대한 노드 ID 문의를 사용하려면 메모리 페이지가 PAGED-IN이어야합니다.이 기능의 첫 번째 실행은 눈에 띄는 시간이 걸릴 수 있습니다. 모든 경우 (첫 번째 실행 여부),이 정보를 검색하는 것이 비용이 많이 들고 고주파수에서보기를 쿼리하는 것이 권장되지 않습니다.
결정할 때Numa노드,보기는 공유 메모리 세그먼트의 모든 메모리 페이지를 터치합니다. 이렇게하면 공유 메모리가 이미 할당되지 않은 경우 공유 메모리의 할당을 강요하고 메모리가 단일로 할당 될 수 있습니다.Numa노드 (시스템 구성에 따라 다름).
pg_buffercache_summary ()
function#함수에 의해 노출 된 열의 정의는에 표시됩니다.테이블 F.16.
표 F.16. pg_buffercache_summary ()
출력 열
열 유형 설명 |
---|
중고 공유 토토 캔 수 |
사용하지 않은 공유 토토 캔 수 |
더러운 공유 토토 캔 수 |
고정 된 공유 토토 캔 수 |
중고 공유 토토 캔의 평균 사용량 수 |
thepg_buffercache_summary ()
함수는 모든 공유 토토 캔의 상태를 요약 한 단일 행을 반환합니다. 유사하고 더 자세한 정보는에 의해 제공됩니다.pg_buffercache
보기, 그러나pg_buffercache_summary ()
상당히 저렴합니다.
처럼pg_buffercache
보기,pg_buffercache_summary ()
토토 캔 관리자 잠금 장치를 얻지 못합니다. 따라서 동시 활동은 결과에서 약간의 부정확성을 유발할 수 있습니다.
pg_buffercache_usage_counts ()
기능#함수에 의해 노출 된 열의 정의는에 표시됩니다.테이블 F.17.
표 F.17. pg_buffercache_usage_counts ()
출력 열
열 유형 설명 |
---|
가능한 토토 캔 사용량 수 |
사용량 수를 가진 토토 캔 수 |
사용량 수를 가진 더러운 토토 캔 수 |
사용 카운트가있는 고정 토토 캔 수 |
thepg_buffercache_usage_counts ()
함수 가능한 사용 수 값에 대해 집계 된 모든 공유 토토 캔의 상태를 요약 한 행 세트를 반환합니다. 유사하고 더 자세한 정보는에 의해 제공됩니다.pg_buffercache
보기, 그러나pg_buffercache_usage_counts ()
상당히 저렴합니다.
처럼pg_buffercache
보기,pg_buffercache_usage_counts ()
토토 캔 관리자 잠금 장치를 얻지 못합니다. 따라서 동시 활동은 결과에서 약간의 부정확성을 유발할 수 있습니다.
pg_buffercache_evict ()
기능#thepg_buffercache_evict ()
함수는 토토 캔 식별자를 가져옵니다.Bufferid
열의 열pg_buffercache
보기. 토토 캔가 퇴거되고 플러시되었는지에 대한 정보를 반환합니다. buffer_evicted 열은 성공시 사실이며, 토토 캔가 유효하지 않은 경우, 고정되어 있기 때문에 퇴거 할 수없는 경우, 또는 그것을 쓰려고 시도한 후에 다시 더러워진 경우 거짓. 토토 캔가 플러시 된 경우 buffer_flushed 열이 참입니다. 이것이 반드시 토토 캔가 우리에 의해 플러시되었다는 것을 의미하지는 않습니다. 다른 사람이 플러시 될 수 있습니다. 동시 활동으로 인해 토토 캔가 언제라도 다시 유효해질 수 있으므로 결과는 즉시 구제됩니다. 이 기능은 개발자 테스트 전용입니다.
pg_buffercache_evict_relation
기능#thepg_buffercache_evict_relation ()
함수는와 매우 유사합니다pg_buffercache_evict ()
함수. 차이점은pg_buffercache_evict_relation ()
토토 캔 식별자 대신 관계 식별자를 가져옵니다. 그것은 그 관계에서 모든 포크에 대한 모든 토토 캔를 퇴거 시키려고합니다. 퇴거 토토 캔의 수, 플러시 토토 캔 및 퇴거 할 수없는 토토 캔의 수를 반환합니다. 플러시 토토 캔가 반드시 우리에 의해 플러시 된 것은 아니며 다른 사람에 의해 플러시되었을 수도 있습니다. 동시 활동으로 인해 토토 캔를 즉시 읽을 수 있으므로 결과는 즉시 구제됩니다. 이 기능은 개발자 테스트 전용입니다.
pg_buffercache_evict_all
기능#thepg_buffercache_evict_all ()
함수는와 매우 유사합니다pg_buffercache_evict ()
함수. 차이점은입니다.pg_buffercache_evict_all ()
함수는 인수를받지 않습니다. 대신 토토 캔 풀의 모든 토토 캔를 퇴거 시키려고합니다. 퇴거 토토 캔의 수, 플러시 토토 캔 및 퇴거 할 수없는 토토 캔의 수를 반환합니다. 플러시 토토 캔가 반드시 우리에 의해 플러시 된 것은 아니며 다른 사람에 의해 플러시되었을 수도 있습니다. 동시 활동으로 인해 토토 캔를 즉시 읽을 수 있으므로 결과는 즉시 구제됩니다. 이 기능은 개발자 테스트 전용입니다.
회귀 =# n.nspname, c.relname, count (*)를 토토 캔로 선택하십시오 PG_BUFFERCACHE B에서 PG_CLASS C. b.relfilenode = pg_relation_filenode (c.oid) 및 B. relatabase in (0, PG_DATABASE에서 OID를 선택하십시오 여기서 datname = current_database ())) n.oid = c.relnamespace에서 pg_namespace n에 가입하십시오 n.nspname, c.relname의 그룹 3 Desc로 주문하십시오 제한 10; nspname | Relname | 토토 캔 ------------+--------------------------------------- 공개 | delete_test_table | 593 공개 | delete_test_table_pkey | 494 PG_CATALOG | PG_ATTRIBUT | 472 공개 | quad_poly_tbl | 353 공개 | Tenk2 | 349 공개 | Tenk1 | 349 공개 | gin_test_idx | 306 PG_CATALOG | pg_largeobject | 206 공개 | gin_test_tbl | 188 공개 | spgist_text_tbl | 182 (10 줄) 회귀 =# select * from pg_buffercache_summary (); buffers_used | buffers_unused | buffers_dirty | buffers_pinned | usagecount_avg ------------------------------------------------------------------------------- 248 | 2096904 | 39 | 0 | 3.141129 (1 줄) 회귀 =# 선택 *에서 pg_buffercache_usage_counts (); usage_count | 토토 캔 | 더러운 | 고정 ------------+--------+-------+-------- 0 | 14650 | 0 | 0 1 | 1436 | 671 | 0 2 | 102 | 88 | 0 3 | 23 | 21 | 0 4 | 9 | 7 | 0 5 | 164 | 106 | 0 (6 줄)
Mark Kirkwood<마늘@paradise.net.nz
디자인 제안 : Neil Conway<neilc@samurai.com
디버깅 조언 : Tom Lane<tgl@sss.pgh.pa.us