AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[autovacuum](dba)

Martin Hope
Sajith P Shetty
Asked: 2022-02-01 05:14:10 +0800 CST

postgres autovaccum 的分析是否会重建整个表?

  • 0

我在 postgres 文档中找不到答案,尽管一些 DBA 在他们的博客中声称手动分析会构建整个表的统计信息,而 autovacuum 只会更新增量统计信息,但有些 DBA 却说相反。

我知道 autovacuum 是真空的预定版本,并根据我们知道的其他参数进行分析。现在我的问题是 autovacuum 的分析是重建整个表的统计信息还是只更新现有的统计信息(增量)?与同一主题相关的另一个问题是,“默认统计”值是否也适用于 autovacuum 分析?

谢谢,

萨吉斯·P·谢蒂

postgresql autovacuum
  • 2 个回答
  • 43 Views
Martin Hope
Emre Sevinç
Asked: 2021-06-11 23:46:58 +0800 CST

PostgreSQL中autovacuum_count、last_autovacuum和autoanalyze_count的NULL和0的可能含义是什么?

  • 2

我在 Debian GNU/Linux 服务器上运行的 PostgreSQL 12.7 数据库中有一个大表(我们称之为big_table)。这台机器有8 GB的 RAM 和4 个 CPU 核心,并且主要专用于这个 PostgreSQL 服务器。

目前这big_table有大约1.03 亿行保存时间序列数据(例如,数据不更新,只插入或删除)。几乎每个月,我都会从这个表中删除大约25到3000 万行。那些被删除的行对应于一个连续的时间范围(例如“DELETE ... between 1-Mar and 30-Mar”)。这些DELETE操作需要 10 分钟到 30 分钟才能完成。这种使用模式的有效期为6个多月。

表大小约为46 GB,该表的索引加起来约为61 GB。

有一个应用程序每隔几秒就向 this 插入 10 行big_table,另一个面向用户的 Web 应用程序从这个表中读取数据以绘制一些最近的值。

每次我运行DELETE删除 25 到 30 百万行的操作时(在月底),我都会看到AUTOVACUUM启动并开始工作。

我想检查一些关于这些 AUTOVACUUM 如何在该数据库中运行以下 SQL 查询的统计信息:

SELECT relname, last_vacuum, vacuum_count, autovacuum_count, last_autovacuum, autoanalyze_count, last_autoanalyze
FROM pg_stat_user_tables 
WHERE relname = 'big_table' ;

令我惊讶的是,它给出了以下结果:

|relname     |last_vacuum|vacuum_count|autovacuum_count|last_autovacuum|autoanalyze_count|last_autoanalyze|
|------------|-----------|------------|----------------|---------------|-----------------|----------------|
|big_Table   |           |0           |0               |               |0                |                |

我试图了解以下内容:

  • 为什么都是autovacuum_count和auto_analyzecount 零?
  • 为什么是last_autovacuum和last_autoanalyze NULL?

不幸的是, https: //www.postgresql.org/docs/12/monitoring-stats.html 上的官方文档对我没有太大帮助。

  • 会不会是AUTOVACUUM启动但无法完成的情况?ANALYZE 也类似?
  • 如果是这样,根本原因可能是什么?
  • 我应该检查什么来验证常规吸尘是否能达到预期的效果?
postgresql autovacuum
  • 1 个回答
  • 267 Views
Martin Hope
David S
Asked: 2020-07-15 10:04:01 +0800 CST

PostgreSQL last_vacuum 对于某些表为空

  • 1

我有一个问题,我的数据库中的一些大表似乎没有被 autovacuum 守护进程清空。这是我所看到的:

SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum
FROM pg_stat_all_tables
ORDER BY n_dead_tup DESC LIMIT 5;
+------------+-----------------------------+------------+------------+-------------------------------+
| schemaname |          relname            | n_live_tup | n_dead_tup |        last_autovacuum        |
+------------+-----------------------------+------------+------------+-------------------------------+
| md         | calculation_log_item        |   35989527 |    3559253 | 2020-07-13 03:41:37.49764-04  |
| audit      | transaction_statement       |     700356 |     557278 | NULL                          |
| audit      | record_history              |     701635 |     438849 | NULL                          |
| md         | program_requirement_state   |     193500 |      29204 | 2020-07-14 03:06:02.339032-04 |
| md         | calculation_log             |     157942 |      11792 | NULL                          |
+------------+-----------------------------+------------+------------+-------------------------------+
(5 rows)

因此,很明显守护程序正在运行,因为昨晚有值(注意:我在 2020-07-14 发布此消息)。但是,我无法弄清楚为什么 transaction_statement 和 record_history 不是。与活的相比,它们有很多 dead_tuples。

我正在使用 PostgreSQL v11。以下是完整版本信息:

select version();
+---------------------------------------------------------------------------------------------------------------------------------+
|                                                             version                                                             |
+---------------------------------------------------------------------------------------------------------------------------------+
| PostgreSQL 11.8 (Ubuntu 11.8-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit |
+---------------------------------------------------------------------------------------------------------------------------------+
(1 row)

这可能是什么原因造成的?如果您认为我的问题含糊不清或需要其他信息来回答(例如 postgresql.conf 设置等),请添加评论。

postgresql autovacuum
  • 1 个回答
  • 946 Views
Martin Hope
Mr. Snrub
Asked: 2020-06-11 11:46:29 +0800 CST

自上次 Autovacuum 以来的 Postgres 更新/删除数

  • 2

有没有一种好方法可以监控自上次自动清空以来对表的更新/删除次数?我试图找到更新不够频繁的表,以避免autovacuum (to prevent wraparound).

我正在考虑使用n_dead_tupfrom pg_stat_all_tables,但这是一个好主意/有更好的方法吗?

我正在使用 Postgres 9.6。

谢谢

postgresql autovacuum
  • 1 个回答
  • 87 Views
Martin Hope
Mr. Snrub
Asked: 2020-06-10 23:31:06 +0800 CST

Postgres Autovacuum 进度监控

  • 0

我的autovacuum (to prevent wraparound)一张桌子上发生了将近 4 天的事情。我想知道是否有任何方法可以告诉我它是否跟不上正在发生的更新/删除的数量。

作为参考,我在 Google CloudSQL 上使用 Postgres 9.6。他们有一个已知的问题,即一切都pg_stat_progress_vacuum返回null。

我也一直在检查pg_stat_all_tables并注意到n_dead_tup我的桌子正在上升而不是下降,但我不确定这个数字是否会意识到正在进行的自动吸尘。

postgresql autovacuum
  • 1 个回答
  • 888 Views
Martin Hope
maciej
Asked: 2020-01-31 13:31:38 +0800 CST

自动清理失败并显示“错误:XX000:类型 0 的缓存查找失败”

  • 0

我注意到在我的服务器日志中每 15 秒就会弹出一次类似的内容:

2020-01-30 21:10:30 UTC::@:[24969]:ERROR: XX000: cache lookup failed for type 0
2020-01-30 21:10:30 UTC::@:[24969]:CONTEXT: automatic vacuum of table "myschema.mytable"
2020-01-30 21:10:30 UTC::@:[24969]:LOCATION: get_typlenbyval, lsyscache.c:2036

当我手动运行时,VACUUM ANALYZE myschema.mytable;它运行时没有任何错误,并且我的日志中的错误消失了。但是,不可避免地,它会在某个时候再次返回。

有问题的表定义如下:

tfs_dev=> \d myschema.mytable;
                                                   Table "myschema.mytable"
   Column    |   Type    | Collation | Nullable |                                  Default
-------------+-----------+-----------+----------+---------------------------------------------------------------------------
 level       | text      |           | not null |
 id          | integer   |           | not null | nextval('myschema.mytable_id_seq'::regclass)
 text_id     | text      |           |          |
 name        | text      |           |          |
 geom        | geometry  |           |          |
 valid_dates | tstzrange |           |          | tstzrange(NULL::timestamp with time zone, NULL::timestamp with time zone)
 adjacent    | integer[] |           |          |
 valence     | integer   |           |          |
 color       | smallint  |           |          | 0
Indexes:
    "mytable_pkey" PRIMARY KEY, btree (level, id)
    "mytable_text_id_key" UNIQUE CONSTRAINT, btree (text_id)
    "mytable_gix" gist (level, geom, id, text_id, name)
    "mytable_spgix" spgist (geom)
    "mytable_text_id_ix" btree (text_id, level, id, name)
Referenced by:
    TABLE "otherschema.othertable" CONSTRAINT "othertable_mytable_fk" FOREIGN KEY (level, level_id) REFERENCES myschema.mytable(level, id)
    TABLE "otherschema.othertable2" CONSTRAINT "othertable2_mytable_fk" FOREIGN KEY (level, level_id) REFERENCES myschema.mytable(level, id)

许多其他具有类似错误的帖子似乎是关于一个外部数据包装器,它存在于这个数据库中,但没有这个表/模式。

postgresql autovacuum
  • 1 个回答
  • 966 Views
Martin Hope
jberryman
Asked: 2018-05-17 17:28:00 +0800 CST

pg_stat_all_tables.last_autovacuum 究竟什么时候更新?

  • 5

我正在调查我们的 autovacuum 设置的问题,并last_autoanalyze试图last_autovacuum从pg_stat_all_tables.

我理解 autovacuum 以增量方式工作,批量压缩和清理死元组,然后休眠片刻,等等。那是什么last_autovacuum意思?autovacuum 是否可能大部分时间都在工作,但时间戳可能永远不会更新(例如,因为无法删除元组)?

我为我们的表看到的许多时间戳都是旧的,即使我相当确定我在某些表上观察到一个正在运行的 autovacuum 线程。

编辑:如果我不清楚,我的问题是:确实last_autovacuum意味着......

  • 增量 autovacuum 进程上次完成此表上的大量工作并休眠的时间
  • autovacuum 进程运行到表格最后的时间
  • 以上,但前提是没有无法删除的元组
  • 别的东西
postgresql autovacuum
  • 2 个回答
  • 3965 Views
Martin Hope
user144368
Asked: 2018-03-15 08:08:44 +0800 CST

autovaccum 会在奴隶中醒来吗?

  • 0

我找不到问题的答案来质疑我在标题中写的内容。Postgres 通过 autovacuum 自动唤醒 vacuum,但是当它是 slave 时,slave 会唤醒 autovacuum 进程吗?

postgresql autovacuum
  • 1 个回答
  • 109 Views
Martin Hope
Gabriele D'Onufrio
Asked: 2017-11-18 01:40:14 +0800 CST

Postgresql 数据库中的自动清理

  • 1

我正在尝试在我的 postgresql 9.5 数据库中设置 autovacuum,但表统计信息没有显示这方面的证据。

在 postgresql.conf 中,autovacuum 已经启用:

autovacuum = on

在设置中,另外,我有 ( select * from pg_settings where category like 'Autovacuum')

autovacuum  on
autovacuum_analyze_scale_factor 0.1
autovacuum_analyze_threshold    50
autovacuum_freeze_max_age   200000000
autovacuum_max_workers  3
autovacuum_multixact_freeze_max_age 400000000
autovacuum_naptime  60
autovacuum_vacuum_cost_delay    20
autovacuum_vacuum_cost_limit    -1
autovacuum_vacuum_scale_factor  0.2
autovacuum_vacuum_threshold 50

如果我执行这个查询:

SELECT schemaname, relname, 
last_vacuum       , 
last_autovacuum   , 
last_analyze      ,
last_autoanalyze  
FROM pg_stat_all_tables
where schemaname = 'cdi'

我得到这个结果:

relname last_vacuum last_autovacuum last_analyze last_autoanalyze
aa 11/11/2017 05:56 04/11/2017 03:24 13/11/2017 23:25
bb 09/10/2017 15:01 04/11/2017 03:55 09/10/2017 15:01
抄送 13/09/2017 13:23 04/11/2017 03:55 11/11/2017 04:12
dd 14/09/2017 10:27 04/11/2017 03:55 12/11/2017 17:09
ee 14/09/2017 10:32 04/11/2017 03:00
ff 11/10/2017 09:20 04/11/2017 03:48 13/11/2017 22:19 gg 04/11/2017 03:55
hh 04/11/2017 03:55
二 04/11/2017 03:16 11/11/2017 06:51 ll 04/11/2017 03:16
mm 04/11/2017 03:55
nn 04/11/2017 03:55
oo 04/11/2017 03:55
pp 04/11/2017 03:00

在我看来没有有效的自动真空

有人可以告诉我一种使 autovacuum 发生的方法吗?

这是我的桌子:

顺序扫描 156
顺序元组读取 5448762930
索引扫描 802121339750
获取的索引元组 800736733206
插入的元组 21907385
元组更新 6190434
删除的元组 190337
元组热更新 3958397
活元组 59641911
死元组 703334
堆块读取 13685226418
堆块命中 786803454925
索引块读取 5104418623
索引块命中 3208275818736
Toast 块读取 0
吐司块命中 0
Toast 索引块读取 0
Toast 索引块命中 0
上次真空 2017-10-11 09:20:22.358935+02
最后一次自动清理
最后分析 2017-11-04 03:48:49.753917+01
最后自动分析 2017-11-13 22:19:08.47618+01
真空计数器1
自动真空计数器 0
分析计数器 10
自动分析计数器 3
表大小 6778 MB
Toast 表大小 8192 字节
索引大小 3969 MB

postgresql autovacuum
  • 1 个回答
  • 422 Views
Martin Hope
mgalgs
Asked: 2017-01-20 11:13:26 +0800 CST

不同“类型”的 autovacuum 是否具有不同的性能特征?

  • 3

在监视我的数据库上的 autovacuum 活动时,我注意到带有标记的 autovacuum(to prevent wraparound)似乎比“常规”autovacuum 花费的时间更长。这让我开始尝试了解各种“种类”或 autovacuum 的性能/行为差异。

从文档VACUUM中,我确定了 autovacuum 可能是一个表的几个不同原因:

  1. 表中有需要冻结的旧事务 ( relfrozenxid > min(autovacuum_freeze_max_age, table.autovacuum_freeze_max_age)。这是“ (to prevent wraparound)”自动清理。

  2. 自上次VACUUM超过“真空阈值”以来表中废弃的元组数

还有其他我想念的吗?

似乎为手册暴露的“攻击性”旋钮VACUUM是FREEZE和DISABLE_PAGE_SKIPPING。这些不同类型的 autovacuum 是否使用过这些选项,如果使用过,什么时候使用过?

postgresql autovacuum
  • 1 个回答
  • 703 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve