PostgreSQL 18 preview - vacuumdb支持跳过已有统计信息对象, 提升pg_upgrade体验
PostgreSQL 18 preview - vacuumdb支持跳过已有统计信息对象, 提升pg_upgrade体验
此前已有patch支持了统计信息的导出和导入, 并且在后来的pg_upgrade大版本升级工具中支持了该功能, 使得pg_upgrade大版本升级后, 无需执行vacuum analyze来重新收集统计信息.
《PostgreSQL 18 preview - 支持统计信息导出导入, 将来用pg_upgrade大版本升级后不需要analyze了》 《PostgreSQL 18 preview - 支持pg_upgrade升级大版本时迁移统计信息》
当然, 毕竟是大版本升级, 某些情况下可能统计信息不能被所有对象完全复用(例如可能一些统计信息的功能发生了变化, 需要重新生成时.). 在这个背景下, 下面的patch 让 vacuumdb 支持添加仅分析缺少统计信息的表的关系的选项.
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=9c03c8d187210f112371aab881b379bd4800562c
vacuumdb: Teach vacuum_one_database() to reuse query results.
author Nathan Bossart <[email protected]>
Tue, 18 Mar 2025 21:32:55 +0000 (16:32 -0500)
committer Nathan Bossart <[email protected]>
Tue, 18 Mar 2025 21:32:55 +0000 (16:32 -0500)
commit 9c03c8d187210f112371aab881b379bd4800562c
tree c9501e41de3ceb3fe5e877baced1dba4d70668bf tree
parent a6524105d20b190fb4f5b2116e044e29be88f215 commit | diff
vacuumdb: Teach vacuum_one_database() to reuse query results. Presently, each call to vacuum_one_database() queries the catalogs
to retrieve the list of tables to process. A follow-up commit will
add a "missing stats only" feature to --analyze-in-stages, which
requires saving the catalog query results (since tables without
statistics will have them after the first stage). This commit adds
a new parameter to vacuum_one_database() that specifies either a
previously-retrieved list or a place to return the catalog query
results. Note that nothing uses this new parameter yet.
Author: Corey Huinker <[email protected]>
Co-authored-by: Nathan Bossart <[email protected]>
Reviewed-by: John Naylor <[email protected]>
Discussion: https://postgr.es/m/Z5O1bpcwDrMgyrYy%40nathan
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=edba754f052ea0c02287080004aa6051eaa4f597
vacuumdb: Add option for analyzing only relations missing stats.
author Nathan Bossart <[email protected]>
Tue, 18 Mar 2025 21:32:56 +0000 (16:32 -0500)
committer Nathan Bossart <[email protected]>
Tue, 18 Mar 2025 21:32:56 +0000 (16:32 -0500)
commit edba754f052ea0c02287080004aa6051eaa4f597
tree 9a2e1bf62504689bccaa4acf3cbbc74edb8dbbe5 tree
parent 9c03c8d187210f112371aab881b379bd4800562c commit | diff
vacuumdb: Add option for analyzing only relations missing stats. This commit adds a new --missing-stats-only option that can be used
with --analyze-only or --analyze-in-stages. When this option is
specified, vacuumdb will analyze a relation if it lacks any
statistics for a column, expression index, or extended statistics
object. This new option is primarily intended for use after
pg_upgrade (since it can now retain most optimizer statistics), but
it might be useful in other situations, too.
Author: Corey Huinker <[email protected]>
Co-authored-by: Nathan Bossart <[email protected]>
Reviewed-by: John Naylor <[email protected]>
Discussion: https://postgr.es/m/Z5O1bpcwDrMgyrYy%40nathan
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c9d502eb68094d817fe94c2e954f6fdbb62f4d48
Update guidance for running vacuumdb after pg_upgrade.
author Nathan Bossart <[email protected]>
Tue, 18 Mar 2025 21:32:56 +0000 (16:32 -0500)
committer Nathan Bossart <[email protected]>
Tue, 18 Mar 2025 21:32:56 +0000 (16:32 -0500)
commit c9d502eb68094d817fe94c2e954f6fdbb62f4d48
tree 8677ddfbef8a90a709c1d7a0140800b21cca6db8 tree
parent edba754f052ea0c02287080004aa6051eaa4f597 commit | diff
Update guidance for running vacuumdb after pg_upgrade.
Now that pg_upgrade can carry over most optimizer statistics, we
should recommend using vacuumdb's new --missing-stats-only option
to only analyze relations that are missing statistics.
Reviewed-by: John Naylor <[email protected]>
Discussion: https://postgr.es/m/Z5O1bpcwDrMgyrYy%40nathan
AI 解读
这三个补丁共同改进了 vacuumdb 工具,特别是在 pg_upgrade 之后使用时的体验。
补丁 1:vacuumdb: Teach vacuum_one_database() to reuse query results. (vacuumdb: 教会 vacuum_one_database() 重用查询结果)
核心功能: 修改了 vacuum_one_database()函数,使其能够重用之前查询的结果。作用: 添加了一个新的参数到 vacuum_one_database()函数,该参数可以指定一个之前检索到的表列表,或者一个用于返回目录查询结果的位置。目的: 为后续的补丁做准备,该补丁将为 --analyze-in-stages添加 "missing stats only" 功能。 该功能需要保存目录查询结果,因为在第一阶段之后,没有统计信息的表将拥有统计信息。注意: 目前还没有任何代码使用这个新的参数。
补丁 2:vacuumdb: Add option for analyzing only relations missing stats. (vacuumdb: 添加仅分析缺少统计信息的表的关系的选项)
核心功能: 引入了一个新的命令行选项 --missing-stats-only,用于vacuumdb工具。作用: 当与 --analyze-only或--analyze-in-stages选项一起使用时,vacuumdb只会分析那些缺少列、表达式索引或扩展统计对象统计信息的表。主要用途: 在 pg_upgrade之后使用,因为pg_upgrade现在可以保留大部分优化器统计信息。 这样可以避免不必要的分析,从而加快升级后的数据库准备过程。 当然,这个选项在其他情况下也可能有用。
补丁 3:Update guidance for running vacuumdb after pg_upgrade. (更新在 pg_upgrade 之后运行 vacuumdb 的指南)
核心功能: 更新了在 pg_upgrade之后运行vacuumdb的建议。作用: 建议使用 vacuumdb的新--missing-stats-only选项,只分析那些缺少统计信息的表,因为pg_upgrade现在可以迁移大部分优化器统计信息。
总结:
这三个补丁共同改进了 vacuumdb 工具,使其在 pg_upgrade 之后更加高效和易用。
第一个补丁引入了 --missing-stats-only选项,允许只分析缺少统计信息的表,从而减少了不必要的分析。第二个补丁修改了 vacuum_one_database()函数,使其能够重用查询结果,为后续的改进做准备。第三个补丁更新了文档,建议在 pg_upgrade之后使用--missing-stats-only选项。
这些改进使得在 pg_upgrade 之后准备数据库更加快速和高效。
关键术语解释:
vacuumdb: PostgreSQL 的一个命令行工具,用于清理和分析数据库。pg_upgrade: PostgreSQL 的一个工具,用于将数据库升级到新版本。--analyze-only:vacuumdb的一个选项,只分析数据库,而不进行清理。--analyze-in-stages:vacuumdb的一个选项,分阶段分析数据库。--missing-stats-only:vacuumdb的一个新选项,只分析缺少统计信息的表。优化器统计信息 (Optimizer Statistics): 关于表数据的统计信息,用于优化查询执行计划。 目录 (Catalog): PostgreSQL 的系统表,存储关于数据库对象的信息。 vacuum_one_database():vacuumdb工具内部的一个函数,用于处理单个数据库。
总而言之,这些补丁通过引入新的选项和改进内部函数,使得 vacuumdb 在 pg_upgrade 之后更加高效和易用,减少了不必要的分析,从而加快了升级后的数据库准备过程。