返回首页

gbase数据、南大通用产品文档:GBase8sNumeric 数据类型

更新日期:2024年09月11日

GBase 8s 数据库服务器支持以下 Numeric 数据类型:
Integer 数据类型:SMALLINT 、INTEGER 、INT8 、SERIAL 、SERIAL8
Boolean 数据类型
定点数据类型:DECIMAL 和 MONEY
浮点数据类型:SMALLFLOAT 和 FLOAT
这些主题包含如何有关使用 Numeric 数据类型的信息:
GBase 8s ESQL/C 数据类型用作 SQL 数字数据类型的主机变量
GBase 8s ESQL/C 数字数据类型的特征
格式化掩码,可用于格式化数字数据类型
GBase 8s ESQL/C 库函数,可用于操作数字数据类型

用于查找当前连接中已经turn_on 的存储过程oid。便于用户确认在调试哪些存储过程,
需要通过funcoid 和pg_proc 配合使用。
名称
类型
描述
nodename
OUT text
节点名称。
port
OUT bigint
端口号。
funcoid
OUT oid
存储过程oid。


使用带有 table 或 fragment 参数的 SQL 管理 API 函数来创建压缩字典、来估计压缩
率、
来压缩表和表分片中的数据、
来合并空闲空间
(重新打包)

来归还空闲空间到 dbspace
(收缩)、来解压缩数据,以及来删除压缩字典。
当您运行 SQL 管理 API 压缩和解压缩命令时,
您压缩或解压缩 dbspace 中的行数据和简
单大对象。您还可指定是否仅压缩或解压缩行数据,或仅压缩或解压缩 dbspace 中的简单
大对象。
语法:表数据压缩命令参数:

语法:分片数据压缩命令参数

表和分片命令参数

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 809 -


命令参数
下表描述每一参数。
表 1. 压缩和解压缩操作的参数
参数
描述
blobs
指定您仅想要压缩或解压缩 dbspace 中的简单大对象,而
不是行数据。
compress
就地压缩所有现有的行,而不移动它们(不重新打包表)。
这个选项自动地压缩 dbspace 中的行数据和简单大对象。
要仅压缩行数据或仅压缩 dbspace 中的简单大对象,还要
使用 rows 或 blobs 元素。
如果目标表或分片的压缩字典不存在,则压缩操作还创建该
字典。
create_dictionary
构建压缩字典。压缩字典是频繁地发生的模式和符号库,在
压缩的行中取代它们。
创建字典之后,如果新插入的或更新的行可以压缩,则会压
缩它们。
estimate_compression
估计新的压缩率和当前的压缩率。如果该表未压缩,则当前
压缩率为 0.0%。
parallel
并行地运行压缩、重新打包、update_ipa 或解压缩操作。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 810 -

参数
描述
为每个表的分片或分片列表启动一个线程,跨那些分片并行
地运行该操作。
purge_dictionary
在您解压缩表或分片之后,删除不活动的压缩字典。
repack
通过将数据移至分片或表的前部合并空闲空间。
在分片处于 online 时,因为重新打包操作移动行,所以访
问正在使用隔离级别低于 Repeatable Read 的分片的其他
查询可能偶尔地找到同一行两次或找不到行。要避免这种可
能性,请为并发查询使用 Repeatable Read 隔离级别;或
者,不使用 repack 参数,而使用 repack_offline 参数。
repack_offline
在表或分片上持有排他锁时,通过将数据移至表或分片的前
部,合并空闲空间。这个操作阻止所有其他对数据的访问,
直到该操作完成。
rows
指定您仅想要压缩或解压缩行数据,而不是 dbspace 中的
简单大对象。
shrink
将分片或表后部的空闲空间归还到 dbspace,从而减少该分
片或表的合计大小。
uncompress
停止对新的 INSERT 和 UPDATE 操作压缩,解压缩所有压缩
的行,并停用压缩字典。这个操作还为分片分配新的页,并
将那些在原始页上不再适合的解压缩的行移至新页。
在分片处于 online 时,因为这个操作移动行,所以正在访
问使用低于 Repeatable Read 隔离级别的分片的其他操作
可能偶尔地找到同一行两次或找不到行。为了避免这种可能
性,请为并发查询使用 Repeatable 隔离级别,或不使用
uncompress 参数,而使用 uncompress_offline 参数。
这个选项自动地解压缩 dbspace 中的行数据和简单大对
象。要仅压缩行数据或仅压缩 dbspace 中的简单大对象,
还请使用 rows 或 blobs 元素。
uncompress_offline
在持有分片上的排他锁时,停止对新的 INSERT 和 UPDATE
操作压缩,解压缩所有压缩的行,并停用压缩字典。这样阻
止对分片数据的所有其他访问,直到该操作完成。
这个操作还为分片分配新的页,并将那些在其原始页上不再
适合的解压缩的行移至新的页。
update_ipa
为指定的表或分片移除未完成的就地更改操作。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 811 -


命令元素
下表显示您可在命令中使用的元素。
表 2. 表压缩和存储优化命令元素
元素
描述
关键考虑
database_name 包含指定的表的数据库
名。
可选的。
如果您未指定 database,
则 GBase
8s 使用当
前数据库。
如果您输入数据库名,则必须使用与系统目录
表中相同的大写或小写字母。
owner
包含指定的表的数据库所
有者的授权标识符。
可选的。
如果您未指定 owner,则 GBase 8s 使用当前
的所有者。
如果您输入所有者名,则必须使用与系统目录
表中相同的大写或小写字母。
table_name
包含数据的表名。
您必须使用与系统目录表中相同的大写或小写
字母。

表 3. 分片压缩和存储优化命令元素
元素
描述
关键考虑
partition_number
属于同一表的用空格分隔的分区号列表。


用法
GBase 8s 使用压缩字典来压缩数据。
您在表或分片上运行 compress 命令之后,
GBase 8s 自动地压缩您添加到表或分片的任何
新行。当您运行 compress 时,如果表或分片包含的行数多于 2000,则构建压缩字典且压
缩所有行。当您运行压缩命令时,如果表或分片包含的行数少于 2000,则启用该表或分片
的自动压缩。插入 2000 行之后,创建压缩字典并压缩初始 2000 行之后的所有行。要压
缩初始的 2000 行,请再次运行 compress 命令。
如果您显著地更改数据,则压缩字典可能无效。在这种情况下,请解压缩然后再压缩。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 812 -

您可取消带有 compress 或 uncompress 参数的命令,例如,在 DB-Access 中键入
CTRL-C。
在前一个中断的命令之后,
您可重新发出带有 repack、
repack_offline、
uncompress
和 uncompress_offline 参数的命令。
在表或分片上已发生了 compress、repack、repack_offline、shrink、uncompress 或
uncompress_offline 操作的任何一个时,您不可在表或分片上执行这些操作。
当您在单个命令中指定多个操作时,服务器按如下顺序执行这些操作:
l create_dictionary
l compress
l repack
l shrink
compress、repack、repack_offline、uncompress 和 uncompress_offline 操作可消耗大量日志
文件。如果包括但不限于这些压缩操作,您预期运行的任何工作负载消耗日志文件快于每
30 秒一个,则请将日志配置大些。
日志记录 compress、repack 和 uncompress 操作,但运行在小部分中。
在执行压缩操作之后,如果您更改分片策略,则表失去其压缩状态,并将需要重新压缩。
在您完成repack_offline 或 uncompress_offline 操作之前删除或禁用索引,可减少数据库完
成该操作所花费的时间量。随后,您可重新创建或重新启用这些索引,最好利用 PDQ。删
除或禁用索引,然后再创建或启用它们,与不这么做比起来,可更快地完成 repack_offline
或 uncompress_offline 操作。
如果 dbspace 曾包含压缩的表,请别删除正在使用“更改数据捕获”(CDC)的 dbspace,
因为这可能删除 CDC 仍需要的压缩字典。
重新打包
压缩操作通常在个别数据和剩余页上创建一些空闲空间,但该空间不合并在表或分片的后
部。相反,该空间可用于保持新插入的行,表不再增大直到这个空间填满。
仅发生在 online 的压缩操作就地压缩表的行。重新打包操作移动这些行。您可 online 或
offline 执行重新打包操作。
online 操作允许在表上发生并发活动。
然而,
这可导致 phantom
rows。(幻象行是在后来回滚的事务期间初始地更改或插入的那些行。)
要避免幻象行,当您可经得起使得其他用户不能访问表或分片时,您可能想要重新打包
offline。例如,您可以在日间执行带有并发活动的压缩操作,然后当预计表上没有并发活动
时,在晚间执行 repack_offline 操作。
您不可执行带有 online 操作的 offline 操作。例如,在您可执行压缩与重新打包相结合的
操作时,您不可执行压缩与 repack_offline 相结合的操作。如果您想要重新打包 offline,
则必须分两步做到:
1. 执行压缩操作。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 813 -

2. 执行 repack_offline 操作。
类似地,您不可执行 repack_offline 与收缩操作。
在发生重新打包操作时,如果在表中发生轻量级追加(无缓冲区的、无日志记录的插入操
作),则重新打包操作不在表或分片的后部完成空间合并。重新打包操作未完成是因为新
的 extent 添加在重新打包操作已经发生的位置中,所以不能将空间归还到 dbspace。要完
成重新打包进程,您必须在轻量级追加活动完成后运行第二次重新打包操作。这个第二次
重新打包操作构建在第一次重新打包操作的成果之上。
收缩
通常在重新打包操作之后执行收缩操作。
不损害表的分配策略妥协,您可稳妥地收缩整个表。例如,如果您有一分片的表,一周的
每天一个分片,并为未来使用而预先分配了许多分片,则您可收缩该表,而不损害这个分
配策略。如果该表为空,则 GBase 8s 将表收缩到当该表创建时指定的初始 extent 大小。
当您初始化收缩操作时, GBase 8s 缩短 extent,如下:
l 除第一个 extent 之外,将所有 extent 缩短到尽可能小的大小。
l 如果该表完全在第一个 extent 之中(例如,因为该表是空表),则 GBase 8s 不
将第一个 extent 收缩到比 extent 大小更小的大小。当以 CREATE TABLE 语句
创建该表时指定了这个 extent 大小。
您可使用 ALTER TABLE 语句的 MODIFY EXTENT SIZE 子句来减小当前 extent 大小。
您这么做之后,可重新运行收缩操作来将第一个 extent 收缩到新的 extent 大小。
解压缩
对任何未压缩的表或表的分片,解压缩操作无效。
解压缩表或分片之后,您可执行 purge_dictionary 操作来删除那个表或分片的字典。
清除
对表和分片执行 purge_dictionary 操作之前,您必须:
l 解压缩表和分片。
当您解压缩表或分片时, GBase 8s 将该表或分片的字典标记为不活动的。
l 请确保 Enterprise Replication 函数不需要较早日志的压缩字典。
l 请归档包含带有压缩字典的表或分片的任何 dbspace,即使您已经解压缩了表或分
片中的数据且字典不在是活动的。
您还可删除所有压缩字典或在指定日期之前以及那天创建的所有压缩字典。要了解相关信
息,请参阅清除压缩字典参数:移除压缩字典(SQL 管理 API)。
示例
下列命令压缩、
重新打包和收缩 insurance 数据库中名为 auto 的表中 dbspace 中的行数据
和简单大对象。该数据库所有者为 tjones。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 814 -

EXECUTE FUNCTION task("table compress repack shrink","auto",
"insurance","tjones");
下列命令仅并行地压缩名为 dental 的表中的行数据。
EXECUTE FUNCTION task("table compress rows parallel","dental");
下列命令解压缩分区号为 14680071 的分片。
EXECUTE FUNCTION task("fragment uncompress","14680071");
下列命令仅并行地解压缩分区号为 14680071 的分片中的行数据。
EXECUTE FUNCTION task("fragment uncompress rows parallel","14680071");
下列命令估计 insurance 数据库中名为 home 的 表的压缩收益,该数据库的所有者为
fgomez。
EXECUTE FUNCTION task("table estimate_compression","home",
"insurance","fgomez");
下列命令并行地移除名为 auto 的表上挂起的就地更改操作。
EXECUTE FUNCTION task("table update_ipa parallel","auto");
在您运行该命令之后,数据库服务器显示您可取得的压缩率,以及当前取得的压缩率( 如
果存在的话)。要了解关于该命令输出的信息,请参阅估计压缩操作的输出(SQL 管理
API)。