첫 번째 포인트에 대해서는 contrib 모듈 "pg_buffercache"를 사용하여 버퍼 캐시의 내용을 검사 할 수 있습니다. 또한
create or replace view util.buffercache_hogs as
select case
when pg_buffercache.reldatabase = 0
then '- global'
when pg_buffercache.reldatabase <> (select pg_database.oid from pg_database where pg_database.datname = current_database())
then '- database ' || quote_literal(pg_database.datname)
when pg_namespace.nspname = 'pg_catalog'
then '- system catalogues'
when pg_class.oid is null and pg_buffercache.relfilenode > 0
then '- unknown file ' || pg_buffercache.relfilenode
when pg_namespace.nspname = 'pg_toast' and pg_class.relname ~ '^pg_toast_[0-9]+$'
then (substring(pg_class.relname, 10)::oid)::regclass || ' TOAST'::text
when pg_namespace.nspname = 'pg_toast' and pg_class.relname ~ '^pg_toast_[0-9]+_index$'
then ((rtrim(substring(pg_class.relname, 10), '_index'))::oid)::regclass || ' TOAST index'
else pg_class.oid::regclass::text
end as key,
count(*) as buffers, sum(case when pg_buffercache.isdirty then 1 else 0 end) as dirty_buffers,
round(count(*)/(SELECT pg_settings.setting FROM pg_settings WHERE pg_settings.name = 'shared_buffers')::numeric, 4) as hog_factor
from pg_buffercache
left join pg_database on pg_database.oid = pg_buffercache.reldatabase
left join pg_class on pg_class.relfilenode = pg_buffercache.relfilenode
left join pg_namespace on pg_namespace.oid = pg_class.relnamespace
group by 1
order by 2 desc;
에서, "pageinspect"있는 contrib 모듈은 당신이 관계에서 특정 페이지에 액세스 할 수 있습니다, 그래서 당신이 관계의 모든 페이지를 통해 단순히 루프를 잡아 수도있을 것 같군요 :이 정의 하시겠습니까?
select count(get_raw_page('information_schema.sql_features', n))
from generate_series(0,
(select relpages-1 from pg_class where relname = 'sql_features')) n;
이렇게하면 캐시에 information_schema.sql_features
이 모두로드됩니다.
문제는 "아마존"이라고 생각하는 사용자의 쿼리를 추측 할 수 없다는 것입니다. 다음 10000 개의 쿼리는 무엇이 될까요? 그래서 특정 테이블과 인덱스를 캐시로 가져 오는 것을 실행하고 싶었을 것입니다. –
짐작하지 마십시오. 지난 5 분간의 실제 로그를 보거나 지난 10,000 개의 쿼리를 가져옵니다. 나는 "최고의 검색 엔진 제공 업체"에서 일했으며 훌륭한 결과를 얻었습니다. 또는 실행중인 서버가 있고 새 서버를 예열하려는 경우 예열 할 서버에 쿼리를 미러링 할 수 있습니다. – Thomas