ALTER TABLE 语句的 Statistics 选项

使用 ALTER TABLE 语句的 Statistics Options 子句更改分片表或未分片表的 STATCHANGE 属性的值,和分片表的 STATLEVEL 属性的值。这些表属性控制重新计算的阈值和数据分布统计信息的粒度。

语法

该子句支持与 CREATE TABLE 语句的 Statistics 选项相同的语法。
元素 描述 限制 语法
change_ threshold 定义过时的分布统计信息的已更改数据的百分比 必须是在 0 - 100 内的整数 文字的数值

用法

Statistics 选项子句可修改表的统计属性以允许用户控制 UPDATE STATISTICS 操作(当此 SQL 语句在一个分片表上以 LOW 、MEDIUM 或 HIGH 的方式运行时)。 ALTER TABLE 语句可以修改这些属性的指定的或缺省值(这些值在表创建时设置或者它们是由之前的 ALTER TABLE 语句设置的)。

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

STATCHANGE 表指定需要考虑统计过时的更改的最小百分比(从该表中行的 UPDATE 、DELETE 和 INSERT 操作或从上次计算分布统计信息的分片)。您可以指定 0 - 100 内的整数作为更改的百分比,或使用 AUTO 关键字应用在 ONCOFIG 文件或会话环境中的当前的 STATCHANGE 配置参数作为缺省的更改的阈值。

UPDATE STATISTICS 语句的 AUTO 关键字也能启用比较用 STATCHANGE 已更改的设置值确定系统目录中的`统计信息是否过时的行的比例。包含 AUTO 关键字的UPDATE STATISTICS 语句只在当前的 UPDATE STATISTICS 操作期间启动旧的统计的检查(并只选择性地更新过时或丢失统计信息的表或分片)。

当 AUTO_STAT_MODE 配置参数或 AUTO_STAT_MODE 会话环境变量启用了自动方式,UPDATE STATISTICS 语句使用显式或缺省的 STATCHANGE 值辨别表、索引或统计信息丢失或过时的分片存储策略,并只更改丢失的或过时的统计信息。有关 UPDATE STATISTICS 操作的自动方式的信息,请参阅 GBase 8s 管理员参考 中有关 AUTO_STAT_MODE 的信息。

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

会经常应用这些属性。如果该 STATLEVEL 设置为 AUTO ,则此设置会重写缺省值。

注: 当初始化数据库服务器时,必须设置 SYSSBSPACENAME 配置参数,指定数据库服务器存储分片级别数据分布统计信息的 sbspace 。它们作为存储在 syfragsdist 系统目录表的 encdist 列中 BLOB 对象。为了使数据库服务器支持分配级别统计信息,SYSSBSPACENAME 配置参数设置必须指定一个现有的 sbspace 。
如果您使用 Statistics 选项子句将 STATLEVEL 属性设置为 FRAGMENT ,且以下条件之一为真时,数据库服务器返回错误 -9814("Invalid default sbspace name"):
  • 未设置 SYSSBSPACENAME 配置参数
  • onspaces -c -S 命令分配给 SYSSBSPACENAME 指定的 sbspace 不合适

更改 STATLEVEL 的示例

假设表 tabFrag 使用分片分布存储策略而不是 ROUND ROBIN ,且它包含一个名为 smartblob 的 BLOB 或 CLOB 列。决定保持该存储分布策略,但是使用 TABLE 而不是 FRAGMENT 作为 STATLEVEL 粒度。以下 SQL 语句引用了 tabFrag 表并拥有下列成功的作用:
  • 将 STATLEVEL 更改为 TABLE ,通过使用 ALTER TABLE 的 Statistics 选项子句。
  • 通过使用 UPDATE STATISTICS LOW 丢弃在 sysfragdist 系统目录表中 tabFrag.smartblob 的当前分片级别分布。
  • 通过使用 UPDATE STATISTICS HIGH 为 sysdistrib 系统目标表中的 tabFrag 创建新的表级别统计信息。
ALTER TABLE tabFrag STATLEVEL TABLE;
                
                UPDATE STATISTICS LOW 
                FOR TABLE tabFrag (smartblob) DROP DISTRIBUTIONS
                
                UPDATE STATISTICS HIGH 
                FOR TABLE tabFrag (smartblob);
以上最后一条语句,缺省的 0.5 HIGH 决议意味着 tabFrag.smartblob 分布统计信息基于近似 200 bins 。
1 请参阅 表的限制
2 请参阅 Logging TYPE 选项