原文地址:Delete column statistics in PostgreSQL or Yugabyte
原文作者:Franck Pachot
我所做的任何事情,尤其是当它可以更改执行计划时,都应该有对应的恢复。在 PostgreSQL 中,我们有一个 ANALYZE 来收集查询计划器使用的统计信息,但没有任何东西可以删除它们。这个想法可能是基于自动统计收集会将它们放回去。
在 YugabyteDB 中,我们使用 PostgreSQL 查询计划器,但添加了集群感知功能,因为它是一个分布式 SQL 数据库。这仍在开发中。在当前版本 (2.11) 中,ANALYZE 仍然是一个 beta 功能:
yugabyte=# select version();
version
-------------------------------------------------------------------------------------------------------------
PostgreSQL 11.2-YB-2.11.2.0-b0 on x86_64-pc-linux-gnu, compiled by gcc (Homebrew gcc 5.5.0_4) 5.5.0, 64-bit
(1 row)
yugabyte=# analyze my_table;
WARNING: 'analyze' is a beta feature!
HINT: Set 'ysql_beta_features' yb-tserver gflag to true to suppress the warning for all beta features.
ANALYZE
我可以轻松地从pg_stats. 例如,这是我检查直方图中具有大量值的列的方法:
select cardinality(most_common_vals),*
from pg_stats
where tablename='my_table'
order by cardinality(most_common_vals) desc nulls last;
可以更改 100 max 的默认值,set default_statistics_target=100;但这不是重点。pg_stats是一种看法。它后面的桌子是pg_statistic。然后删除收集的列统计信息,这是一个示例:
delete from pg_statistic
where starelid in (
select c.oid from pg_class c
join pg_namespace n on n.oid = c.relnamespace
and relname in ('my_table' )
);
请注意,在 YugabyteDB 上,修改目录是受保护的,您将获得:
ERROR: Illegal state: Transaction for catalog table write operation 'pg_statistic' not found
您需要通过以下方式明确允许它:
set yb_non_ddl_txn_for_sys_tables_allowed=on;
并且由于统计信息被缓存在会话中(以避免主服务器共享的目录上的单一争用),您需要重新连接以验证更改。
这篇文章是关于列统计的。表统计信息在 中pg_class,以同样的方式在这里很容易更新。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




