CREATE TABLE 语句的 Statistics 选项

使用 CREATE TABLE 语句的 Statistics 选项子句设置已分片表或未分片表的 STATCHANGE 属性的值,和已分片表的 STATLEVEL 属性。

语法

这些表属性控制自动重新计算(STATCHANGE)的阈值和数据分布统计信息的粒度(STATLEVEL)。

元素 描述 限制 语法
change_ threshold 定义过时分布统计信息的已更改数据的百分比 必须是 0 - 100 之间的整数 文字的数值

用法

Statistics 选项子句可定义在 SQL 语句以 LOW 、MEDIUM 或 HIGH 方式运行下,允许用户控制 UPDATE STATISTICS 行动的表统计信息属性。

Statistics 选项子句可以设置的两个表属性为 STATCHANGE 和 STATLEVEL :

STATCHANGE 表属性指定需要考虑统计信息过时的变更(来自自上次重新计算分布统计信息表中或分片中对行的 UPDATE \DELETE \MERGE 和 INSERT 操作)的最小百分比。可以指定 0 - 100 范围内的整数或者使用 AUTO 关键字将 ONCONFIG 文件中或会话环境中当前的 STATCHANGE 配置参数作为缺省更改的阈值。

选择性更新表和分片统计信息的自动方式可通过以下任意方法启用:
  • 将 AUTO_STAT_MODE 配置参数设置成 1 (或者不设置)。系统缺省启用自动方式。
  • 将 AUTO_STAT_MODE 会话环境变量设置成 "ON"。在当前会话期间启用自动方式。
  • UPDATE STATISTICS 语句包含 AUTO 关键字。当当前数据库运行时启用自动方式。

当启用自动方式时,UPDATE STATISTICS 语句使用显式或缺省的 STATCHANGE 值来标识统计信息丢失或过时的表、索引或分布,以及只是统计信息丢失或过时的更改。有关 UPDATE STATISTICS 操作的自动方式的更多信息,请参阅 GBase 8s 管理员参考中关于 AUTO_STAT_MODE 配置参数的描述。另见 AUTO_STAT_MODE 环境选项使用 FORCE 和 AUTO 关键字.

分片表的 STATLEVEL 属性可以决定它的数据分布和索引统计信息的粒度级别。如果在创建时没有指定任何值,则它可以是以下三个值的其中之一(AUTO 是缺省的):
  • TABLE 指定为表创建的所有的分布都是表级别的。
  • FRAGMENT 指示按每一个分片创建和维护分布。
  • AUTO 指定数据库服务器在运行时应用标准以确定分片级分布是否必要。这些标准要求以下所有的条件都为真:
    • SYSSBSPACENAME 配置参数设置指定了现有 sbspace 。
    • 该表按 EXPRESSION 、INTERVAL 或 LIST 策略分片。
    • 该表拥有超过百万条的行。
    如果任何这些标准都不满足,则数据库服务器创建表级别分布,而非分片级分布。

这些属性总是应用。如果 STATLEVEL 设置是 AUTO ,则该设置重写缺省值。

注: SYSSBSPACENAME 配置参数(在数据库例程初始化时必须设置)指定数据库服务器存储分片级数据分布统计信息的 sbspace 。这些统计信息作为 BLOB 对象存储在 syfragsdist 系统目录表的 encdist 列中。对于支持分片级统计信息的数据库服务器,SYSSBSPACENAME 配置参数设置指定现有 sbspace 。

如果您使用 Statistics 选项子句将 STATLEVEL 属性设置为 FRAGMENT,则当以下任一条件为真时,数据库服务器返回错误:

  • 没有设置 SYSSBSPACENAME 配置参数。
  • SYSSBSPACENAME 指定的 sbspace 没有合适地按 onspaces -c -S 命令分配。