数据库 – 如何检查我的数据库是否需要更多RAM?

你如何检查你的 postgresql数据库实例是否需要更多的RAM内存来处理他们当前的工作数据?

解决方法

如果您使用的是 Linux,那么您的总物理RAM应该大于磁盘上的数据库大小,以便最大限度地减少I / O.最终,整个数据库将位于OS读取缓存中,I / O将限于将更改提交到磁盘.我更喜欢通过运行“du -shc $PGDATA / base”找到数据库大小 – 该方法将所有数据库聚合为一个数字.只要你比那个大,它应该没问题.

此外,您可以查看堆和索引块提取的缓存命中率.这些测量了Postgresql共享缓冲区的命中率.这些数字可能有点误导 – 即使它可能是共享缓冲区缓存中的错过,它仍然可能是操作系统读取缓存中的命中.尽管如此,共享缓冲区中的命中数仍然比操作系统读取缓存中的命中数要便宜(反过来,它们比不必返回磁盘要便宜几个数量级).

为了查看共享缓冲区命中率,我使用此查询

SELECT relname,heap_blks_read,heap_blks_hit,round(heap_blks_hit::numeric/(heap_blks_hit + heap_blks_read),3)
FROM pg_statio_user_tables
WHERE heap_blks_read > 0
ORDER BY 4
LIMIT 25;

这将为您提供前25个最差的违规者,其中所有表都必须从“磁盘”(同样可以是OS读取缓存或实际磁盘I / O)获取缓冲区缓存.您可以增加WHERE子句中的值,或者为heap_blks_hit添加一个条件以过滤掉很少使用的表.

通过将字符串“heap”全部替换为“idx”,可以使用相同的基本查询来检查每表的总索引命中率.查看pg_statio_user_indexes以获得每个索引的细分.

关于共享缓冲区的快速说明:Linux中的一个好的经验法则是将配置参数shared_buffers设置为RAM的1/4,但不超过8GB.这不是一个严格的规则,而是调整服务器的良好起点.如果您的数据库只有4GB而且您有32GB的服务器,那么8GB的共享缓冲区实际上是过度的,您应该可以将其设置为5或6 GB,并且仍有未来增长的空间.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...