返回首页

gbase数据、南大通用产品文档:GBase8a资源管理功能概述

更新日期:2024年09月11日


GBase 8a MPP Cluster 资源管理功能可以对SELECT 和DML 等受控SQL 在运
行过程中使用的CPU、内存、I/O 和磁盘空间等资源进行合理管控,以达到资
源合理利用,系统稳定性运行的要求。其中:
1.
CPU:
实现对受控SQL 使用CPU 优先级和百分比控制,
以及SQL 并发数
及并行度的管理。
2.
内存:实现对受控SQL 使用的算子buffer(large heap)内存使用上限的控
制。
3.
I/O:实现对受控SQL 使用的direct I/O 磁盘读写速率上限的控制。
4.
磁盘空间:实现对表数据文件占用磁盘空间大小的管控。
注意
磁盘空间管控仅对数据文件占用磁盘空间大小进行管控,
索引文件不在管控
范围内。

每个VC 之间的资源管理功能相互独立,VC 内部的资源池定义、消费组规划、
资源计划状态(启动/关闭)以及消费组与资源池之间的关联关系都各不相同,
需要不同VC 的使用者根据自身需要来进行配置。

可使用命名管道(也称为先进先出,FIFO)数据文件,来从非标准设备(如磁带机)装入
和卸载到非标准设备。
与普通的操作系统文件不同,命名管道没有 2 GB 大小限制。操作系统打开并检查命名管
道的文件末尾,其方法与普通文件不同。
使用命名管道装入数据
可使用命名管道从外部表装入数据。
要使用命名管道从外部表装入数据,请执行以下步骤:
1. 在 SQL 中 CREATE EXTERNAL TABLE 语句的 DATAFILES 子句内,
指定命名
管道。
2. 创建在 DATAFILES 子句中指定的命名管道。
使用操作系统命令创建命名管道。
使用带 -p 选项的 mknod UNIX™ 命令创建命名管道。要避免在 UNIX 上出现妨
碍管道打开的问题,请为管道读程序和管道写程序启动单独的 UNIX 进程,或使
用 O_NDELAY 标志集来打开管道。
3. 使用读取命名管道的程序打开命名管道。
4. 执行 SQL 中的 INSERT 语句。
INSERT INTO employee SELECT * FROM emp_ext;
重要: 如果在执行 INSERT 语句之前不创建和打开命名管道,INSERT 将成功执行,但是不
装入任何行。

FIFO 虚拟处理器
数据库服务器使用 FIFO 虚拟处理器 (VP) 来读写命名管道上的外部表。
缺省 FIFO 虚拟处理器数为 1。
数据库服务器为您在 CREATE EXTERNAL TABLE 语句的 DATAFILES 子句中指定的
每个命名管道使用一个 FIFO VP。例如,假设您使用以下 SQL 语句定义外部表:
CREATE EXTERNAL TABLE ext_items
SAMEAS items
USING (
DATAFILES("PIPE:/tmp/pipe1",
"PIPE:/tmp/pipe2",
"PIPE:/tmp/pipe3"
));
如果对 FIFO VP 使用缺省值 1,数据库在读取完 pipe1 中的所有数据之前不会从 pipe2
读取,在读取完 pipe2 中的所有数据之前不会从 pipe3 读取。


GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 264 -
使用命名管道卸载数据
可使用命名管道将数据从数据库卸载到外部表。
要使用命名管道将数据卸载到外部表,请执行以下步骤:
1. 在 SQL 的 CREATE EXTERNAL TABLE 语句或 SELECT INTO EXTERNAL 语
句的 DATAFILES 子句中,指定命名管道。
DATAFILES ("PIPE:/usr/local/TAPE")
2. 创建在 DATAFILES 子句中指定的命名管道。使用操作系统命令创建命名管道。
3. 使用写入命名管道的程序打开命名管道。
4. 将数据卸载到命名管道。
CREATE EXTERNAL TABLE emp_ext
( name CHAR(18) EXTERNAL CHAR(20),
hiredate DATE EXTERNAL CHAR(10),
address VARCHAR(40) EXTERNAL CHAR(40),
empno INTEGER EXTERNAL CHAR(6) )
USING (
FORMAT 'FIXED',
DATAFILES
("PIPE:/usr/local/TAPE")
);

INSERT INTO emp_ext SELECT * FROM employee;
重要: 如果在执行 SELECT 或 INSERT 语句之前不创建和打开命名管道,卸载将失败,并生
成 ENXIO 错误消息(没有这样的设备或地址)。

使用 PIPE 选项将数据从一个实例复制到另一个
可使用命名管道将数据从一个 GBase 8s 实例复制到另一个,而无需将数据写入中间文件。

可使用命名管道将数据从一个 GBase 8s 实例卸载,然后装入另一个实例,而无需将数据
写入中间文件。也可使用命名管道将数据从一个表复制到同一个 GBase 8s 实例上的另一
个表。 在以下示例中,数据将从一个实例上的源表复制到第二个实例上的目标表。
必须首先根据所用硬件平台使用以下命令之一创建命名管道。在本示例中,命名管道称为
pipe1。
% mkfifo /work/pipe1
% mknod /work/pipe1
执行以下步骤,将数据从源实例上的表复制到同一台计算机上目标实例中的表。
1.
在源实例上创建源表。在本示例中,源表称为 source_data_table:
CREATE TABLE source_data_table
(
empid CHAR(5),
empname VARCHAR(40),

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 265 -
empaddr VARCHAR(100)
);
2.
在源实例上创建外部表。在本示例中,外部表称为 ext_table:
CREATE EXTERNAL TABLE ext_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
)
USING
(DATAFILES
(
'PIPE:/work/pipe1'
)
);
3.
在目标实例上创建目标表。在本示例中,目标表称为 destin_data_table:
CREATE TABLE destin_data_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
);
4.
在目标实例上创建外部表。在本示例中,外部表称为 ext_table:
CREATE EXTERNAL TABLE ext_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
)
USING
(DATAFILES
(
'PIPE:/work/pipe1_1'
)
);
5.
从 UNIX™ shell 运行以下命令。该命令将数据从 /work/pipe1 重定向到
/work/pipe1_1
cat /work/pipe1 > /work/pipe1_1
6.
在目标实例上运行以下命令,以将数据从命名管道定向到目标表:
INSERT INTO destin_data_table SELECT * FROM ext_table;

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 266 -
7.
在源实例上运行以下命令,以将数据假脱机到命名管道:
INSERT INTO ext_table SELECT * FROM source_data_table;
可使用多个管道,方法是在 DATAFILES 子句中插入多个 PIPE 语句,并为每个语句
创建一个命名管道。

bigintcvifx_int8() 函数将 int8 类型数值转换为 BIGINT 类型数值。
语法
mint bigintcvifx_int8(int8p, bigintp)
const ifx_int8_t *int8p
bigint *bigintp
int8p
要转换为 bigint 值的 int8 值。
bigintp
指向包含转换的结果的 bigint 变量的指针。

返回代码
0
转换成功。
<0
转换失败。