首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动清空高写入、高更新和大部分读表类型。

自动清空高写入、高更新和大部分读表类型。
EN

Database Administration用户
提问于 2020-10-21 03:53:41
回答 2查看 1.3K关注 0票数 5

什么是良好的自动真空设置(建议)表,如:

  • 高写入表插入加载范围在30-10,000插入在一天.该表可以在没有负载的情况下空闲数周,但每周至少可以得到三次插入。
  • 它使用分区表数据的高更新表,是单次插入时表大小的3-8倍。
  • 高写表--一行只更新一次,但一天内会出现唯一的键更新,需要更新--它可能是30-10,000个键更新。
  • 大多数表都是高读表,设置为填充我的数据仓库的因子80,这是由高更新表计算而来的表

我的删除是按月和批量进行的。与密钥相关的所有内容都会作为备份被删除或移动。

目前,对于高更新表,我的填充系数设置为10-20。

使用TDS db.t3.large,但在低流量时切换到db.t3.microt。

另外,设置填充因子真的很低慢速选择吗?

EN

回答 2

Database Administration用户

发布于 2020-10-21 06:50:14

这个问题太宽泛了,但是这里有一些关于配置自动真空的提示:

  • 对于接收批量插入的表,之后运行显式VACUUM或使用PostgreSQL v13。
  • 对于具有许多更新的表,如果没有索引更新的列,则70到90的fillfactor (取决于行大小)是一件好事。10或20只是对空间的疯狂浪费。
  • 对于只读的表,没有必要关心自动真空。
  • 有了大量的删除,你就无能为力了。如果您可以使用分区,这种痛苦可能会完全消失。

当然,低fillfactor会对查询性能产生负面影响;这就是您为更有效的数据修改所付出的代价:

  • 对于连续扫描,影响是显而易见的:您也必须读取所有的空空间。
  • 对于只读取一行的索引扫描,将不会对性能产生影响。
  • 读取数行的索引扫描位于中间位置,因为如果fillfactor较低,则必须读取更多的块,因为行将分布在更多的块上。
  • 不要忘记对缓存效率的影响:如果您的块主要由air组成,用于缓存的RAM也将主要包含死空间。
票数 5
EN

Database Administration用户

发布于 2020-10-23 06:13:32

在因特网上有一个讨论PostgreSQL中AUTOVACUUM的文档,标题是:理解中用于PostgreSQL环境的自动真空

特别是..。

自动真空是一个自动执行真空和分析(收集统计数据)命令的守护进程。自动检查数据库中臃肿的表,并回收空间以供重用。

基本上,我建议运行缺省值,因为AUTOVACUUM将负责清理表和更新统计信息。

但是,您必须进行监视,以查看您的PostgreSQL RDS实例在保持内务方面是否做得很好。您可以使用我提到的文章中的脚本:

代码语言:javascript
复制
SELECT
relname AS TableName
,n_live_tup AS LiveTuples
,n_dead_tup AS DeadTuples
,last_autovacuum AS Autovacuum
,last_autoanalyze AS Autoanalyze
FROM pg_stat_user_tables;

这会产生这样的东西:

代码语言:javascript
复制
        tablename         | livetuples | deadtuples |          autovacuum           |          autoanalyze
--------------------------+------------+------------+-------------------------------+-------------------------------
 cfgdateval               |       1666 |          0 | 2020-02-26 12:32:13.851917+00 | 2020-02-26 12:32:13.87854+00
 atcontval                |       2940 |          0 | 2018-06-07 09:53:30.664645+00 | 2019-11-28 15:10:15.256083+00
 cfgintval                |        206 |          0 | 2020-02-26 12:32:13.815353+00 | 2020-02-26 12:32:13.815787+00
 cfgaggval                |         26 |          0 |                               | 2017-07-26 18:56:23.161035+00
 cfgobjval                |       3366 |          0 | 2020-02-26 12:32:13.933712+00 | 2020-02-26 12:32:13.959892+00
 atintval                 |     169080 |          0 |                               | 2018-06-07 09:53:33.821121+00
 atobjval                 |     259728 |          0 |                               | 2018-06-07 09:53:32.557788+00
 cfgstrval                |       1616 |          0 | 2020-02-26 12:32:13.752583+00 | 2020-02-26 12:32:13.803132+00
 ataggval                 |     182790 |          0 |                               | 2018-06-07 09:53:30.566021+00
 coolinking               |      59375 |          0 | 2017-05-05 08:47:09.865774+00 | 2017-05-05 09:36:07.292082+00
 cooobject                |      31791 |         13 |                               | 2017-05-05 09:01:06.672438+00

如果表中包含大量死元组,且未运行AUTOVACUUM,则可能需要考虑调优自动真空设置:

代码语言:javascript
复制
select category, name,setting,unit,source,min_val,max_val from pg_settings where category = 'autovacuum' ;

输出:

代码语言:javascript
复制
  category |                name                 | setting   | unit |       source       | min_val |  max_val   | boot_val 
------------+-------------------------------------+-----------+------+--------------------+---------+------------+-----------
Autovacuum | autovacuum                          | on        |      | default            |         |            | on
Autovacuum | autovacuum_analyze_scale_factor     | 0.05      |      | configuration file | 0       | 100        | 0.1
Autovacuum | autovacuum_analyze_threshold        | 50        |      | default            | 0       | 2147483647 | 50
Autovacuum | autovacuum_freeze_max_age           | 200000000 |      | default            | 100000  | 2000000000 | 200000000
Autovacuum | autovacuum_max_workers              | 3         |      | default            | 1       | 262143     | 3
Autovacuum | autovacuum_multixact_freeze_max_age | 400000000 |      | default            | 10000   | 2000000000 | 400000000
Autovacuum | autovacuum_naptime                  | 30        | s    | configuration file | 1       | 2147483    | 60
Autovacuum | autovacuum_vacuum_cost_delay        | 20        | ms   | default            | -1      | 100        | 20
Autovacuum | autovacuum_vacuum_cost_limit        | -1        |      | default            | -1      | 10000      | -1
Autovacuum | autovacuum_vacuum_scale_factor      | 0.1       |      | configuration file | 0       | 100        | 0.2
Autovacuum | autovacuum_vacuum_threshold         | 50        |      | default            | 0       | 2147483647 | 50

有关何时以及是否应该修改AUTOVACUUM设置的详细信息,请参阅应用于PostgreSQL的亚马逊中自动真空调谐的实例研究

通常情况下,PostgreSQL做的很好,与内务管理。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/278407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档