PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 부록 F. 부가 확장 모듈들 | 다음 |
pg_buffercache 모듈을 이용하면, 공유 버퍼 캐시가 어떻게 사용되고 있는지를 실시간으로 살펴볼 수 있다.
C로 만든 pg_buffercache_pages
함수는 버퍼 캐시 정보를
레코드 단위로 리턴하고, 이를 이용해서 좀 더 보기 편한 pg_buffercache
뷰도 제공한다.
보안상 이슈가 될 여지가 있어, 이 두 기능은 소유주와 슈퍼 유저만 사용할 수 있다.
이 뷰에서 제공하는 칼럼은 표 F-16 표와 같다.
표 F-16. pg_buffercache 칼럼들
이름 | 자료형 | 관계 | 설명 |
---|---|---|---|
bufferid | integer | ID, 1..shared_buffers 범위 | |
relfilenode | oid | pg_class.relfilenode | 릴레이션 파일 노드 번호 |
reltablespace | oid | pg_tablespace.oid | 해당 릴레이션의 테이블스페이스 OID |
reldatabase | oid | pg_database.oid | 해당 릴레이션의 데이터베이스 OID |
relblocknumber | bigint | 해당 릴레이션에서의 페이지 번호 | |
relforknumber | smallint | 해당 릴레이션에서의 포크 번호; include/common/relpath.h 참조 | |
relblocknumber | bigint | 릴리이션 안의 페이지 수 | |
isdirty | boolean | 디스크에 기록해야 할 페이지인지? | |
usagecount | smallint | Clock-sweep 접근 회수 | |
pinning_backends | integer | 해당 버퍼 꽂은(?) 백엔드 수 |
하나의 로우는 공유 캐시 안에서의 하나의 버퍼 정보다. 이 버퍼가 사용되고 있지 않다면, bufferid 칼럼을 제외한 모든 칼럼 값이 null이다. 공용 시스템 카탈로그는 데이터베이스 OID가 0으로 표시된다.
이 출력 자료는 공유되고 있는 모든 캐시 정보를 보여주기 때문에, 현재 데이터베이스에 속하지 않은 정보들도 출력된다. 그래서, pg_class 테이블에 없는 릴레이션 OID 값이 출력될 수도 있다. pg_class 테이블과 join 쿼리를 사용한다면, reldatabase 값이 0인 경우도 고려해서 쿼리를 작성해야한다.
pg_buffercache 뷰를 사용하면, 먼저 버퍼 정보를 출력하기 위해 내장 버퍼 관리자에서 버퍼 사용을 잠그고, 버퍼 정보 전체를 복사한다. 이렇게 해서, 잠겨지지 않은 일반 버퍼들도 필요 이상으로 활성상태가 되지만, 그 출력 결과는 일관되게 유지할 수 있다. 그럼에도 불구하고, 이 뷰를 자주 사용한다면, 약간의 데이터베이스 성능을 저하가 발생할 수도 있다.
regression=# SELECT c.relname, count(*) AS buffers FROM pg_buffercache b INNER JOIN pg_class c ON b.relfilenode = pg_relation_filenode(c.oid) AND b.reldatabase IN (0, (SELECT oid FROM pg_database WHERE datname = current_database())) GROUP BY c.relname ORDER BY 2 DESC LIMIT 10; relname | buffers ---------------------------------+--------- tenk2 | 345 tenk1 | 141 pg_proc | 46 pg_class | 45 pg_attribute | 43 pg_class_relname_nsp_index | 30 pg_proc_proname_args_nsp_index | 28 pg_attribute_relid_attnam_index | 26 pg_depend | 22 pg_depend_reference_index | 20 (10 rows)
Mark Kirkwood <markir@paradise.net.nz>
디자인 제안: Neil Conway <neilc@samurai.com>
디버깅 도와준 이: Tom Lane <tgl@sss.pgh.pa.us>