ALTER TABLE 语句的 Statistics 选项
使用 ALTER TABLE 语句的 Statistics Options 子句更改分片表或未分片表的 STATCHANGE 属
性的值,和分片表的 STATLEVEL 属性的值。这些表属性控制重新计算的阈值和数据分布统计信息
的粒度。
语法
用法
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 指定数据库服务器在运行时决定分片级别分布是否重要的标准。这些标准需要需要
以下条件为真:
o SYSSBSPACENAME 配置参数设置指定了一个现有的 sbspace
o 该表按 EXPRESSION 、INTERVAL 、Rolling Window 、或 LIST 策略分片
o 该表有超过 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 。
表的限制
跟随在 ALTER TABLE 关键字之后的表名或同义词的表必须是当前数据库中的常驻表。它具有以下
限制:
⚫
不能是临时表。
⚫
不能是不是当前数据库中的表。
⚫
不能是 CREATE EXTERNAL TABLE 语句定义的表对象。
⚫
不能是违例表或诊断表。
此外,您不能用 ALTER TABLE 语句进行以下操作:
⚫
添加、删除或修改与违规表或诊断表关联的表中列。
⚫
在 RAW 表上定义引用约束或唯一约束。
⚫
在列或列的集合上定义 将列作为索引键的限制 冲突的索引。
如果已设置了 USETABLENAME 环境变量,那么您就不能在 ALTER TABLE 语句中指定表的
synonym 。
要使用 ALTER TABLE ,您的存取权限必须至少满足以下条件之一:
⚫
必须在包含该表的数据库上拥有 DBA 权限。
⚫
必须拥有该表。
⚫
必须拥有指定表上的 Alter 权限并在表驻留的数据库上拥有 Resource 权限。
⚫
要添加引用约束,必须在引用列或引用表上拥有 DBA 权限或 References 权限。
• 要删除约束,必须拥有 DBA 权限或是约束的所有者。如果是约束的所有者但不是表的所有
者,必须在指定的表上拥有 Alter 权限。您不需要 References 权限就能删除约束。