Postgresql缓存(内存)性能如何预热缓存
发布时间:2020-12-13 16:33:32 所属栏目:百科 来源:网络整理
导读:我有一个包含25M行的数据库表,每个约3K(即?75GB),与我使用的多个索引(另外15-20GB)一起不会完全适合内存(机器上为64GB).典型的查询通过索引定位300行,可以使用其他索引将其过滤到?50-300行,最后获取匹配的行.响应时间在温暖的DB上20ms之间变化,在冷DB上变化
我有一个包含25M行的数据库表,每个约3K(即?75GB),与我使用的多个索引(另外15-20GB)一起不会完全适合内存(机器上为64GB).典型的查询通过索引定位300行,可以使用其他索引将其过滤到?50-300行,最后获取匹配的行.响应时间在温暖的DB上20ms之间变化,在冷DB上变化到20秒.我有两个相关问题:
>在任何给定的时间如何检查特定的表和索引的什么部分(%)缓存在内存中? 谢谢,请随时通过电子邮件回复(info@shauldar.com)) – Shaul
关于您的第一点,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加载到缓存中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读