返回首页

gbase数据、南大通用产品文档:GBase8c操作系统参数调优

更新日期:2024年09月11日

在性能调优过程中,可以根据实际业务情况修改关键操作系统(OS)配置参数,以提
升GBase 8c 数据库的性能。
前提条件
需要用户使用gs_check 检查操作系统参数结果是否和建议值保持一致,如果不一致,
用户可根据实际业务情况去手动修改。
内存相关参数设置
配置“sysctl.conf”文件,修改内存相关参数vm.extfrag_threshold 为1000(参考值),
如果文件中没有内存相关参数,可以手动添加。
vim /etc/sysctl.conf
修改完成后,请执行如下命令,使参数生效。
sysctl -p
网络相关参数设置
配置“sysctl.conf”文件,修改网络相关参数,如果文件中没有网络相关参数,可以手
动添加。详细说明请参见表15-1。
vim /etc/sysctl.conf
在修改完成后,请执行如下命令,使参数生效。
sysctl -p
表14- 2 网络相关参数
参数名
参考值
说明
net.ipv4.tcp_timestamps
1
表示开启TCP 连接中TIME-WAIT sockets
的快速回收,默认为0,表示关闭,1 表示
打开。
net.ipv4.tcp_mem
94500000
915000000
927000000
第一个数字表示,当tcp 使用的page 少于
94500000 时,kernel 不对其进行任何的干
预。
第二个数字表示,当tcp 使用的page 超过
915000000
时,kernel 会进入“memory

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
523
pressure”压力模式。
第三个数字表示,当tcp 使用的pages 超过
927000000 时,就会报:Out of socket
memory。
net.ipv4.tcp_max_orphans
3276800
最大孤儿套接字(orphan sockets)数。
net.ipv4.tcp_fin_timeout
60
表示系統默认的TIMEOUT 时间。
net.ipv4.ip_local_port_range
26000 65535
TCP 和UDP 能够使用的port 段。
设置10GE 网卡最大传输单元(MTU),使用ifconfig 命令设置。10GE 网卡推荐设置
为8192,可提升网络带宽利用率。
示例:
#ifconfig ethx mtu 8192
#ifconfig ethx
ethx
Link encap:Ethernet
HWaddr XX:XX:XX:XX:XX:XX
inet addr:xxx.xxx.xxx.xxx
Bcast:xxx.xxx.xxx.xxx
Mask:xxx.xxx.xxx.0
inet6 addr: fxxx::9xxx:bxxx:xxxa:1d18/64 Scope:Link
UP BROADCAST RUNNING MULTICAST
**MTU:8192**
Metric:1
RX packets:179849803 errors:0 dropped:0 overruns:0 frame:0
TX packets:40492292 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17952090386 (17120.4 Mb)
TX bytes:171359670290 (163421.3 Mb)

ethx 为10GE 数据库内部使用的业务网卡。

第一条命令设置MTU,
第二条命令验证是否设置成功,
粗体部分为MTU
的值。

需使用root 用户设置。
设置10GE 网卡接收(rx)、发送队列(tx)长度,使用ethtool 工具设置。10GE 网卡
推荐设置为4096,可提升网络带宽利用率。
示例:
# ethtool -G ethx rx 4096 tx 4096
# ethtool -g ethx
Ring parameters for ethx:
Pre-set maximums:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
524
RX:
4096
RX Mini:
0
RX Jumbo:
0
TX:
4096
Current hardware settings:
RX:
4096
RX Mini:
0
RX Jumbo:
0
TX:
4096

ethx 为10GE 数据库内部使用的业务网卡。

第一条命令设置网卡接收、
发送队列长度,
第二条命令验证是否设置成功,
示例的输出表示设置成功。

需使用root 用户设置。
I/O 相关参数设置
设置hugepage 属性。通过如下命令,关闭透明大页。
echo never >
/sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
修改完成后,请执行如下命令,使参数生效。
reboot

数据库服务器支持整数值的以下数据类型:
SQL 整数数据类型
字节数
值的范围
SMALLINT
2
-32767 到 32767
INTEGER 、INT 、
SERIAL
4
-2,147,483,647 到 2,147,483,647
INT8 、BIGINT 、
SERIAL8 、BIGSERIAL
8
-9,223,372,036,854,775,807 到
9,223,372,036,854,775,807

C 语言支持整数值的 short int 和 long int 数据类型。

C short int 数据类型的存储大小取决于您使用的计算机的硬件和操作系统。

在 ESQL/C 中,无论平台和硬件如何,C 的 long int 数据类型总是被视为为 4 字
节。这使得 long int 对于存储 GBase 8s 的 SMALLINT 、INTEGER 、INT 和 SERIAL
数据类型十分有用。

重要:
但是,不要尝试使用 long int 数据类型存储 8 字节 GBase 8s 整数数据类型
INT8 、BIGINT 、SERIAL8 或 BIGSERIAL。例如:当您的查询尝试在 -2,147,483,647 到
+ 2,147,483,647 之间的 8 字节 BIGSERIAL 值中选择数据类型为 long int 的整数 C 变

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 105 -

量时,数据库服务器会发出此错误:

-1215 Value too large to fit in an INTEGER.

当声明整数主机变量时,必须确保该主机变量足够大,以便与该变量关联的 SQL 整
数数据类型的所有值相匹配。对于 8 字节整数,使用 C 数据类型 bigint 或 int8 的主机
变量。有关如何在系统上实现整数数据类型的更多信息,请咨询您的系统管理员或参阅 C
文档。
整数主机变量类型
提供以下数据类型用于指定特定长度的整数主机变量。

数据类型
长度
int1
1 个字节的整数
int2
2 个字节的整数
int4
4 个字节的整数
mint
机器本机的整数数据类型
mlong
机器本机的 long 整数数据类型,其大小等于机器指针的大小。mlong d数据类型
映射到 Windows(TM) 32 位和 UNIX(TM) 和 Linux(TM) 32 位和 64 位平台上的 long 数据
类型。它被映射到 Windows(TM) 64 位的 __int64 数据类型。
MSHORT
机器本机的 short 整数数据类型
MCHAR
机器本机的 char 数据类型
限制:前面的整数数据类型保留。您的程序不能使用 typedef 或 $typedef 语句定义
这些数据类型。

在 ifxtypes.h 文件中定义整数主机变量数据类型,当您使用 esql 脚本编译它时,它

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 106 -

会字段包含在您的程序中。

重要: 许多 GBase 8s ESQL/C 库函数已经更改为声明 GBase 8s 整数数据类型,
而不是特定于机器的类型,
如 int 、
short 和 long。
当您调用 GBase 8s ESQL/C 库函数时,
建议您使用 GBase 8s 整数类型。
INT8 和 SERIAL8 SQL 数据类型
GBase 8s ESQL/C 支持具有 int8 数据类型的 SQL INT8 和 SERIAL8 数据类型。
int8
数据类型是一个独立于机器的方法,表示数字范围 -(263 -1) 到 263-1。

本节描述了如何操作 GBase 8s ESQL/C 数据类型 int8。
int8 数据类型
使用 GBase 8s ESQL/Cint8 数据类型为 INT8 和 SERIAL8 类型的数据库值声明主
机变量。

下表显示结构 ifx_int8_t 的字段,表示 INT8 或 SERIAL8 值。

表 1. ifx_int8_t 结构的字段
字段名称
字段类型
意义
data
无符号 4 字节
整数[INT8tIZE]
构成 8 字节整数值的整数值数组。当 INT8tIZE 常
量定义为 2,
此数组包含两个无符号的 4 字节整数。
无符
号 4 字节整数的实际数据类型可以是机器特定的。
sign
short integer
一个短整数,用于保存 8 字节整数的符号(无 、负
或正)。2 字节整数的实际数据类型可以是机器特定的。

int8.h 头文件包含 ifx_int8 结构和名为 ifx_int8_t 的 typedef。将此文件包含在使用
任何 int8 主机变量的所有 C 源文件中,如下所示:
EXEC SQL include int8;

可以使用以其中之一的方法声明 int8 主机变量:
EXEC SQL BEGIN DECLARE SECTION;
int8 int8_var1;
ifx_int8_t int8_var2;
EXEC SQL BEGIN DECLARE SECTION;
int8 库函数

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 107 -

您必须通过用于 int8 数据类型的 GBase 8s ESQL/C 库函数对 int8 类型数字执行所
有操作。任何其它操作,修改或分析都可能产生不可预知的结果。GBase 8s ESQL/C 库函
数允许您操作 int8 数并将 int8 类型数字转换为其它数据类型的函数。下表说明了这些函
数。

表 2. 操纵函数
函数名称
描述
请参阅
ifx_getserial8()
返回插入的 SERIAL8 值
ifx_int8add() 函

ifx_int8add()
添加两个 int8 数字
ifx_int8cmp() 函

ifx_int8cmp()
比较两个 int8 数字
ifx_int8copy()
函数
ifx_int8copy()
复制一个 int8 数字
ifx_int8cvasc()
函数
ifx_int8div()
除以两个 int8 数字
ifx_int8div() 函

ifx_int8mul()
乘以两个 int8 数字
ifx_int8mul() 函

ifx_int8tub()
减去两个 int8 数字
ifx_int8tub() 函



表 3. 类型转换函数
函数名称
描述
请参阅
ifx_int8cvasc()
将 C char 类型值转换为 int8 类型值
ifx_int8cvdbl()
函数
ifx_int8cvdbl()
将 C double 类型值转换为 int8 类型值
ifx_int8cvdbl()
函数
ifx_int8cvdec()
将 C decimal 类型值转换为 int8 类型值
ifx_int8cvdec()
函数
ifx_int8cvflt()
将 C float 类型值转换为 int8 类型值
ifx_int8cvflt()
函数
ifx_int8cvint()
将 C int 类型值转换为 int8 类型值
ifx_int8cvint()
函数
ifx_int8cvlong()
将 C 4 字节整数类型值转换为 int8 类型值
ifx_int8cvlong()
函数
ifx_int8toasc()
将 int8 类型值转换为文本字符串
ifx_int8toasc()
函数
ifx_int8todbl()
将 int8 类型值转换为 C double 类型值
ifx_int8todbl()
函数

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 108 -

函数名称
描述
请参阅
ifx_int8todec()
将 int8 类型值转换为 C decimal 类型值
ifx_int8todec()
函数
ifx_int8toflt()
将 int8 类型值转换为 C float 类型值
ifx_int8toflt()
函数
ifx_int8toint()
将 int8 类型值转换为 C int 类型值
ifx_int8toint()
函数
ifx_int8tolong()
将 int8 类型值转换为 C 4 字节整数类型值
ifx_int8tolong()
函数

NUMERIC 数据类型与DECIMAL 数据类型完全等价。