返回首页

gbase数据、南大通用产品文档:GBase8s动态日志分配

更新日期:2024年09月11日


GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 284 -
动态日志分配可防止在长事务回滚期间日志文件填满并挂起系统。仅当下一个日志文件包
含打开的事务时,该功能才处于活动状态。(如果事务在到达长事务高水位标志时未落实
或回滚,那么为长事务。)
数据库服务器在下一个日志文件包含打开的事务时,在当前日志文件后自动(动态)分配
日志文件。可以将动态记录分配用于以下操作:

当系统活动时添加日志文件

在当前日志文件后插入日志文件

立即访问新日志文件(即使根数据库空间未备份)
测试动态日志分配的最好方法是产生跨所有日志文件的事务,然后使用 onstat -l 检查是否
有新添加的日志文件。有关更多信息,请参阅分配日志文件。
要点: 仍然必须备份日志文件以防止其填满。如果日志文件填满,那么系统挂起,直至
您执行备份。

Resource Directive(资源指令)指定在资源计划中资源消费组与动态资源池的挂接
关系。

用户可以定义他们自己的范围类型。
这样做最常见的原因是为了使用内建范围类型中没
有提供的subtype 上的范围。例如,要创建一个subtype float8 的范围类型:
gbase=# CREATE TYPE floatrange AS RANGE ( subtype = float8,subtype_diff =
float8mi);
CREATE TYPE
gbase=# SELECT '[1.234, 5.678]'::floatrange;
[1.234,5.678]
因为float8 没有有意义的“步长”
,我们在这个例子中没有定义一个正规化函数。
定义自己的范围类型也允许你指定使用一个不同的子类型B-树操作符类或者集合,以
便更改排序顺序来决定哪些值会落入到给定的范围中。
如果subtype 被认为是具有离散值而不是连续值,CREATE TYPE 命令应当指定一个
canonical 函数。正规化函数接收一个输入的范围值,并且必须返回一个可能具有不同界限
和格式的等价的范围值。对于两个表示相同值集合的范围(例如[1, 7]和[1, 8))
,正规的输出
必须一样。
选择哪一种表达作为正规的没有关系,
只要两个具有不同格式的等价值总是能被
映射到具有相同格式的相同值就行。除了调整包含/排除界限格式外,假使期望的补偿比
subtype 能够存储的要大,一个正规化函数可能会舍入边界值。例如,一个timestamp 之上
的范围类型可能被定义为具有一个一小时的步长,这样正规化函数可能需要对不是一小时
的倍数的界限进行舍入,或者可能直接抛出一个错误。
另外,任何打算要和GiST 或SP-GiST 索引一起使用的范围类型应当定一个subtype
差异或subtype_diff 函数(没有subtype_diff 时索引仍然能工作,但是可能效率不如提供了
差异函数时高)
。subtype 差异函数采用两个subtype 输入值,并且返回表示为一个float8
值的差
(即X 减Y)

在我们上面的例子中,
可以使用常规float8 减法操作符
之下的函数。
但是对于任何其他subtype,可能需要某种类型转换。还可能需要一些关于如何把差异表达
为数字的创新型想法。为了最大的可扩展性,subtype_diff 函数应该同意选中的操作符类和

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
92
排序规则所蕴含的排序顺序,
也就是说,
只要它的第一个参数根据排序顺序大于第二个参数,
它的结果就应该是正值。
示例
gbase=# CREATE FUNCTION time_subtype_diff(x time, y time) RETURNS float8 AS
'SELECT EXTRACT(EPOCH FROM (x - y))' LANGUAGE sql STRICT IMMUTABLE;
CREATE FUNCTION
gbase=# CREATE TYPE timerange AS RANGE ( subtype = time,subtype_diff =
time_subtype_diff);
CREATE FUNCTION
gbase=# SELECT '[11:10, 23:00]'::timerange;
[11:10:00,23:00:00]
更多关于创建范围类型的信息,参考14.94 CREATE TYPE。