繁体   English   中英

Postgres性能改进和清单

[英]Postgres performance improvement and checklist

我正在研究与我的用Java编写的应用程序的 性能有关的一系列问题,该问题每天大约有100,000次命中,并且每次访问基数为2的2个主体数据库表(均分)的平均读取次数为5至10次读/写对于1到300万条记录 (我通过休眠访问数据库)。

我的两个主表存储用户信息(大约60列varchar,integer和timestamptz类型),另一个链接到要显示的数据(此处大约30列主要是varchar,integer,timestamptz)。

我遇到的主要问题可能是我的网站性能下降了 (让我们谈谈5秒钟以上的时间负载,这显然不仅仅取决于数据库性能 ),是使用FillFactor ,当前默认值为100 (在数据不变的情况下始终使用它。)。

显然填充因子在索引上是相同的(每2个btree类型的表有10个)

目前在我的主要桌子上

  • 40%的选择操作
  • 30%的更新操作
  • 插入20%的作业
  • 10%的删除操作。

我的数据库还由其他40个次要的表组成(只有其他3个用户的基数相同)。

我的问题是:

  • 您如何找到要设置的填充因子的正确值
  • 哪些任务清单可以检查以提高此类数据库的性能

数据库位于服务器专用(16GB Ram,8核)上,存储在SSD磁盘上(数据全天备份并移动到另一个存储上)

您可能已经碰到了内存使用的“拐弯处”,在该处,经常使用的表的整个索引不再适合共享内存,因此磁盘I / O降低了它的速度。 通过检查磁盘I / O是否高于正常水平来进行确认。 如果是这样,请尝试增加共享内存(shared_buffers),或者如果已经达到最大值,请调整系统共享内存大小或添加更多系统内存,以便将其增大。 您可能还必须开始调整临时缓冲区,工作内存和维护内存以及WAL参数(如checkpoint_segments等)。

PostgreSQL.org上有一些性能调整提示,而Google是您的朋友。

编辑:(以解决第一个评论)内存不足的第一个症状是性能大幅下降,其他所有条件都相同。 如果您在内存使用上大打折扣,则更改表填充因子不会有任何不同,如果有的话,它将使wrt加载时间更糟(我认为这意味着“数据库读取”),因为行信息将扩展到更多页面上在每页上都有空白的磁盘上,因此表扫描需要更多的磁盘I / O。 但是填充因子小于100%可以帮助进行UPDATE操作,但是我发现在使用索引时,调整WAL参数可以补偿大多数时间(除非您已经优化了这些参数)。 最重要的是,您需要使用EXPLAIN来分析所有繁琐的查询,以了解会有帮助。 但是乍看之下,即使数据库位于SSD上,我也可以肯定这是一个内存问题。 我们谈论的是很多随机读取和随机写入,并且经过大量随机小写入之后,许多SSD实际上比HDD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM