确定要分析的最重要的表

Determining the most important tables to ANALYZE

基于这个 () 对关于膨胀表的自动 VACUUM FULL 问题的回答,一位 DBA(不再在这里工作)开发了一个脚本来确定哪些表 分析.

Note: this is v8.4 (yes, I know it's ancient, but there's zero I can do about it) and has a minimal maintenance window, so VACUUM FULL seems to not be a solution.

这是确定哪些表需要预防性分析的有效方法吗?我有疑问,因为相同的表日复一日地出现在查询中。

谢谢

假设您的意思是该脚本与您引用的“检查是否存在膨胀”脚本相同,那么不会 - "garbage"查询计划不考虑元组,这意味着您可以重新-随便分析,对你没有好处。

ANALYZE 处理估计各种 SQL 运算符将从给定的 table 产生的记录数量,以及这些记录将在 RAM 中占用多少 space .然后,该信息用于比较解决相同逻辑查询的各种查询计划之间的成本(时间和内存)。

table 中存在垃圾元组这一事实不会影响查询返回的元组数量,也不会影响正在使用的元组的大小。因此,重新分析 table 是因为它们充满了垃圾是没有意义的。

有关 ANALYZE 的详细信息来自此处:https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT