database - 什么时候需要手动重新分析 PostgreSQL 中的表?

标签 database postgresql

最近我将主键从整数迁移到 bigint 并发现了一个 article其中作者更新PK数据类型后手动更新表统计信息:

-- reanalyze the table in 3 steps
SET default_statistics_target TO 1;
ANALYZE [table];
SET default_statistics_target TO 10;
ANALYZE [table];
SET default_statistics_target TO DEFAULT;
ANALYZE [table];

据我了解,分析器会自动在后台运行以保持统计数据最新。在 Postgres docs (注释部分)我发现分析器可以在一些重大更改后手动运行。

所以问题是:

  • 如果启用了 autovacuum,手动运行分析器是否有意义?如果是,在什么情况下?
  • 它的最佳实践是什么(例如上面的 default_statistics_target 切换)?

最佳答案

自动分析由数据修改触发:它通常在表的 10% 发生更改时运行(使用 INSERTUPDATEDELETE) .如果您重写表或创建表达式索引,则不会触发自动分析。在这些情况下,运行手动 ANALYZE 是个好主意。

不要为围绕 default_statistics_target 的舞蹈而烦恼。一个简单的单个 ANALYZE 选项卡; 就可以解决问题。

关于database - 什么时候需要手动重新分析 PostgreSQL 中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73545924/

相关文章:

java - 将 W3C TimeZone 转换为设备 TimeZone android

database - 多数据库的通用信息模式

python - 如何计算 Django 中的 Frechet 距离?

sql - 如何获取postgresql文本中的最后一个元素?

python - sqlalchemy 使用 ORM 创建 VIEW

database - 如何将数据库连接传递给我的 http 处理程序?

java - 如何从 servlet 连接到数据库。我试过下面的代码,但控制每次都异常

php - mysql_real_escape_string 不适合我

postgresql - 从 Postgres 数据库中删除所有函数

postgresql - Dokku + Postgres : How to refresh a materialized view?