返回首页

gbase数据、南大通用产品文档:GBase8cPG_EXT_STATS

更新日期:2024年09月11日

PG_EXT_STATS 视图提供对存储在PG_STATISTIC_EXT 表里面的扩展统计信息的访问。
扩展统计信息目前包括多列统计信息。
名称
类型
引用
描述

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
870
名称
类型
引用
描述
schemaname
name
PG_NAMESPA
CE.nspname
包含表的模式名。
tablename
name
PG_CLASS.reln
ame
表名。
attname
int2vector
PG_STATISTIC
_EXT.stakey
统计信息扩展的多列信息。
inherited
Boolean
-
如果为真,则包含继承的子列,否则只
是指定表的字段。
null_frac
real
-
记录中字段组合为空的百分比。
avg_width
integer
-
字段组合记录以字节记的平均宽度。
n_distinct
real
-
如果大于零,表示字段组合中独立数值
的估计数目。
如果小于零,表示独立数值的数目被行
数除的负数。
用负数形式是因为ANALYZE 认为独立
数值的数目是随着表增长而增长;
正数的形式用于在字段看上去好像有固
定的可能值数目的情况下。比如,-1 表
示一个字段组合中独立数值的个数和行
数相同。
如果等于零,
表示独立数值的数目未知。
n_dndistinct
real
-
标识dn1 上字段组合中非NULL 数据的
唯一值的数目。
如果大于零,
表示独立数值的实际数目。
如果小于零,表示独立数值的数目被行
数除的负数。(比如,一个字段组合的
数值平均出现概率为两次,则可以表示
为n_dndistinct=-0.5)。
如果等于零,
表示独立数值的数目未知。
most_commo
n_vals
anyarray
-
一个字段组合里最常用数值的列表。如
果该字段组合不存在最常用数值,则为
NULL。
本列保存的多列常用数值均不为
NULL。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
871
名称
类型
引用
描述
most_commo
n_freqs
real[]
-
一个最常用数值组合的频率的列表,也
就是说,每个出现的次数除以行数。如
果most_common_vals 是NULL,
则为N
ULL。
most_commo
n_vals_null
anyarray
-
一个字段组合里最常用数值的列表。如
果该字段组合不存在最常用数值,则为
NULL。
本列保存的多列常用数值中至少
有一个值为NULL。
most_commo
n_freqs_null
real[]
-
一个最常用数值组合的频率的列表,也
就是说,每个出现的次数除以行数。如
果most_common_vals_null 是NULL,

为NULL。
histogram_bo
unds
anyarray
-
直方图的边界值列表。

使用 SAVEPOINT 语句来声明在当前的 SQL 事务之内新的保存点的名称,并设
置在该事务之内 SQL 语句的词典顺序之内的新保存点的位置。SAVEPOINT 语
句符合 SQL 的 ANSI/ISO 标准。
语法

元素
描述
限制
语法
savepoint 在此为新的保存
点声明的名称
不可为在相同的保存点级别中现
有的唯一保存点的名称
标识符
用法
您可在 SQL 事务中使用 SAVEPOINT 语句以 DB-Access 和 SPL、C 和 Java™
例程来支持错误处理。您可定义保存点来将单个复杂的事务分隔成它的组件 SQL
语句的较小的逻辑子集。在那个事务之内,可更有效地回滚跟在每一保存点之后
的语句的子集,比起如果您在多个事务中已使用了多个 COMMIT WORK 和
ROLLBACK WORK 语句的话。
SAVEPOINT 语句在当前的事务之内按照语句的词典顺序在当前的位置设置指定
的保存点。在 SAVEPOINT 语句执行成功之后,引用此保存点的后续的
ROLLBACK TO SAVEPOINT 语句可取消对数据库任何未提交的更改,这些更改
是跟在新的保存点之后但在 ROLLBACK TO SAVEPOINT 语句之前的。
如果在同一事务内的现有的保存点与 SAVEPOINT 语句指定的名称相同,则销毁现
有的保存点,除非下列条件之一为真:

在不同的保存点级别设置了现有的保存点。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 847

以 UNIQUE 关键字选项声明了现有的保存点名称。在此情况下
SAVEPOINT 语句失败并报错,除非在不同的保存点级别设置了现有的
UNIQUE 保存点。
销毁一保存点来为另一保存点重用它的名称,与释放该保存点不同。重用保存点
名称仅销毁一个保存点。以 RELEASE SAVEPOINT 语句释放保存点会释放指定
的保存点以及后续已设置了的所有保存点。
UNIQUE 选项
此可选的关键字指定应用程序不要打算在另一 SAVEPOINT 语句中重用此保存点
的名称,在此保存点在当前的保存点级别之内是活动的时候。
如果保存点已存在,是在当前的保存点界别之内以相同的名称和以 UNIQUE 关
键字设置了的,则 SAVEPOINT 语句失败并报错,且不销毁现有的保存点。
保存点级别
GBase 8s 支持构造嵌套的保存点级别。单个 SQL 事务可有多个保存点级别。在
执行 SPL 例程或外部 UDR 期间,自动地创建新的保存点级别。递归地调用相
同的 SPL 例程或 UDR 还增长当前事务的保存点级别。
当在其被创建的 UDR 中完成执行时,保存点级别终止。当保存点级别终止时,
自动地释放在它之内的所有保存点。父保存点级别继承任何 DDL 或 DML 修改
(即,到在其内创建了刚刚终止的那个保存点级别),并受任何针对该父保存点
级别发出的保存点相关的语句支配。
下列规则适用于保存点级别之内的活动:

仅可在保存点被创建的那个保存点级别之内引用保存点。您不可释放、销
毁或回滚到在当前保存点级别之外创建的保存点。
保存点名称的唯一性仅在当前的保存点级别之内是强制的。在其他保存点级别中
为活动的保存点的名称可在当前的保存点级别中重用,而不影响其他保存点级别
中的那些保存点。
在分布式 SQL 事务中的保存点
如果所有参与的数据库支持事务日志记录,则保存点在支持事务的单个 GBase 8s
实例的跨数据库分布式 SQL 事务中是有效的。在跨数据库 SQL 事务中还支持

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 848
保存点,包括在高可用性集群中的操作,如果所有参与的 GBase 8s 实例支持保
存点,且在该事务中访问的所有数据库都使用日志记录的话。
然而,如果在跨数据库事务中的任何参与的数据库服务器不支持保存点,且在可
支持保存点的协调者与不支持保存点的从属服务器之间建立了连接,则在分布式
会话之内的任何 ROLLBACK TO SAVEPOINT 语句都失败并报错。
保存点的保持
保存点是 SQL 事务之内,而不是数据库对象之内的位置标记。在同一事务之内,
任何下列事件之一都销毁现有的保存点 S:

执行 COMMIT WORK 或 ROLLBACK WORK(无 TO SAVEPOINT 子
句)语句。

执行在同一保存点级别中指定 S 的 RELEASE SAVEPOINT 语句。

执行 ROLLBACK TO SAVEPOINT 或 RELEASE SAVEPOINT 语句,指
定早于在同一保存点级别中的 S 建立了的保存点。

在同一保存级别中 SAVEPOINT 语句指定相同的名称作为 S,且 S 不
是以 UNIQUE 关键字创建的。
对保存点的限制
在下列上下文中不支持保存点和保存点级别:

在不支持事务日志记录的数据库中

在触发器活动中

在 XA 全局事务中

在启用 AUTOCOMMIT 连接属性的应用程序或 UDR 中。
此外,在 DML 语句之内调用的 UDR 中,SAVEPOINT 语句(如 RELEASE
SAVEPOINT 和 ROLLBACK WORK TO SAVEPOINT 语句)是无效的,如下例
所示:
SELECT first_1 foo() FROM systables;
在此,foo( ) 例程不可设置保存点。
相关的语句
相关的语句:COMMIT WORK 语句、RELEASE SAVEPOINT 语句 和
ROLLBACK WORK 语句

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 849

当数据库服务器通过更新游标访存行时,
它在访存的行上放置可提升锁。
如果此操作成功,
则数据库服务器知道没有其他程序可改变那一行。由于可提升锁不是排他的,其他程序可
继续读取该行。
由于访存该行的程序可在它发出 UPDATE 或 DELETE 语句之前花费一些
时间,或它仅可访存下一行,因此,可提升锁可提升性能。当到了修改行时,数据库服务
器获取该行上的排他锁。如果已有可提升锁,则它将那个锁更改为排他的状态。
排他的行锁的持续时间依赖于是否在使用事务。如果未使用事务,则将修改了的行一写到
磁盘就释放该锁。当在使用事务时,保留所有这些锁,直到事务结束为止。此操作防止其
他程序使用那些可能回滚到它们的原始状态的行。
当在使用事务时,每当删除行时,就使用键锁。使用键锁防止发生下列错误:

程序 A 删除一行。

程序 B 插入有相同的键的一行。

程序 A 回滚它的事务,强制数据库服务器恢复它的删除了的行。
如何处理由程序 B 插入的行?
通过锁定索引,
数据库服务器防止第二个程序插入行,
直到第一个程序提交它的事务为止。
当前的隔离级别控制在数据库服务器读取不同的行时放置的锁,
如下一部分中讨论的那样。