📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。立即体验 →

REFRESH STATS




REFRESH STATS 用于将 TiDB 系统表中持久化的优化器统计信息重新加载到内存中。该语句主要适用于以下场景:统计信息已通过外部方式恢复(例如通过 BR 恢复),或者需要在不重新执行 ANALYZE 的情况下同步内存中的统计信息。

当你执行 REFRESH STATS 时,TiDB 会复用启动时自动触发的统计信息初始化流程。你可以重新加载单个表、指定数据库中的所有表,或者整个集群的统计信息,并可以选择执行轻量级(LITE)初始化或完整(FULL)初始化。

语法图

RefreshStatsStmt
REFRESHSTATSRefreshTargetListRefreshModeClusterOption
RefreshTargetList
RefreshTarget,
RefreshTarget
TableNameSchemaWildcardGlobalWildcard
TableName
Identifier.Identifier
SchemaWildcard
Identifier.*
GlobalWildcard
*.*
RefreshMode
FULLLITE
ClusterOption
CLUSTER

选项

  • 刷新目标(RefreshTargetList
    • table_name:刷新当前数据库中的指定表。
    • db_name.table_name:刷新指定数据库中的指定表。
    • db_name.*:刷新指定数据库中的所有表。
    • *.*:刷新集群中的所有表。
  • FULL:将完整的统计信息(例如直方图、TopN 和 Count-Min Sketch)加载到内存中,等同于针对本次操作将 lite-init-stats 设置为 false。当你需要立即获得完整统计信息时,可使用该选项。
  • LITE:执行轻量级初始化,等同于设置 lite-init-stats = true。该模式会跳过直方图等较重数据结构的加载,直到真正需要时才加载。
  • CLUSTER:将刷新请求发送到所有 TiDB 服务器。如果不指定该选项,则只有接收到该语句的 TiDB 节点会重新加载其内存中的统计信息。
  • 默认模式:如果既未指定 FULL,也未指定 LITE,TiDB 会使用 lite-init-stats 的当前值。

示例

  • 刷新当前连接的 TiDB 节点上单个表的统计信息:

    REFRESH STATS orders;
  • 以轻量级初始化方式刷新 sales 中的所有表:

    REFRESH STATS sales.* LITE;
  • 强制所有 TiDB 节点加载整个集群的完整统计信息:

    REFRESH STATS *.* FULL CLUSTER;

权限

要执行 REFRESH STATS,你必须拥有 RESTORE_ADMIN 权限,或者拥有每个目标表上的 SELECT 权限。如果你的权限不足,TiDB 会返回错误并中止该语句的执行。

MySQL 兼容性

REFRESH STATS 语句是 TiDB 对 MySQL 语法的扩展。

另请参阅

文档内容是否有帮助?