返回首页

gbase数据、南大通用产品文档:GBase8a初始化hashmap 并进行数据重分布

更新日期:2024年09月11日

操作步骤
步骤1:初始化hashmap:
$ gccli -uroot
GBase client 9.5.3.17.117651. Copyright (c) 2004-2020, GBase.
All Rights
Reserved.
gbase> use vc vc1;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> initnodedatamap;
Query OK, 0 rows affected, 5 warnings (Elapsed: 00:00:01.45)
步骤2:执行数据重分布:
gbase> show variables like '%rebalanc%';
+-------------------------------------------------------+-----------+
| Variable_name
| Value
|
+-------------------------------------------------------+-----------+
| _t_gcluster_rebalance_mirror_node
| 0
|
| gcluster_load_rebalance_seed
| 5
|
| gcluster_rebalancing_concurrent_count
| 5
|
| gcluster_rebalancing_ignore_mirror
| OFF
|
| gcluster_rebalancing_immediate_recover_internal_table | OFF
|
| gcluster_rebalancing_parallel_degree
| 4
|
| gcluster_rebalancing_random_table_quick_mode
| 1
|
| gcluster_rebalancing_step
| 100000000 |
| gcluster_rebalancing_update_status_on_drop_table
| ON
|
+-------------------------------------------------------+-----------+
9 rows in set (Elapsed: 00:00:00.24)
gbase> rebalance instance;
Query OK, 2 rows affected (Elapsed: 00:00:01.45)
查看rebalance 状态:
gbase> select index_name, status, percentage
from
gclusterdb.rebalancing_status;
+------------+-----------+------------+
| index_name | status
| percentage |
+------------+-----------+------------+
| demo.t
| COMPLETED |
100 |
| demo.tt
| COMPLETED |
100 |
+------------+-----------+------------+
2 rows in set (Elapsed: 00:00:00.04)
gbase> quit
Bye

执行initnodedatamap 命令初始化hashmap,然后将数据通过rebalance instance 命令
重分布到最新的distribution(Distribution ID:3)上。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
340
说明

按distribution 分布规则,此次rebalance 操作不会实际进行数据搬移,所
以会很快完成;

本次rebalance 操作后不要删掉旧版nodedatamap 和distribution。
操作步骤
步骤1 :
步骤1:初始化hashmap:
$ gccli -uroot
GBase client 9.5.3.17.117651. Copyright (c) 2004-2020, GBase.
All Rights
Reserved.
gbase> use vc vc2;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> initnodedatamap;
Query OK, 0 rows affected, 5 warnings (Elapsed: 00:00:01.45)
步骤2:执行数据重分布:
gbase> rebalance instance;
Query OK, 3 rows affected (Elapsed: 00:00:05.60)
查看rebalance 状态:
gbase>
select
index_name,status,percentage,priority,host,distribution_id
from
gclusterdb.rebalancing_status;
+------------+-----------+------------+----------+---------------+-----------------+
| index_name | status
| percentage | priority | host
| distribution_id |
+------------+-----------+------------+----------+---------------+-----------------+
| demo.tt
| COMPLETED |
100 |
5 | 172.168.83.14 |
3 |
| demo.t
| COMPLETED |
100 |
5 | 172.168.83.14 |
3 |
| demo.ttt
| COMPLETED |
100 |
5 | 172.168.83.14 |
3 |
+------------+-----------+------------+----------+---------------+-----------------+
3 rows in set (Elapsed: 00:00:00.17)
gbase> quit
Bye

本节提供有关以下主题的信息:
GBase 8s 通用库是什么?
esql 命令的哪些命令行选项与 GBase 8s ESQL/C 程序链接 GBase 8s 通用库的版
本?
如何使用 GBase 8s ESQL/C 程序链接可用于 UNIX™ 和 Windows™ 操作系统的静
态 GBase 8s 通用库?
如何使用 GBase 8s ESQL/C 程序链接共享 GBase 8s 通用库?

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

您需要考虑哪些因素来确定要使用哪种类型的 GBase 8s 通用库?
GBase 8s 通用库
以下是GBase 8s ESQL/C 在 UNIX™ 操作系统上的 GBase 8s 通用库列表。
libgen
包含一般任务的函数。
libos
包含操作系统需要的任务的函数。
libsql
包含在客户端应用程序和数据库服务器之间发送 SQL 语句的函数。
libgls
包含为 GBase 8s 产品通过全球语言支持(GLS)的函数。
libasf
包含处理客户端应用程序和数据库服务器之间通信协议的函数。
GBase 8s 通用库位于 UNIX 操作系统的 $GBASEDBTDIR/lib/esql 和
$GBASEDBTDIR/lib 目录 中。
GBase 8s ESQL/C For Windows™ 的 GBase 8s 通用库只是一个名为的 isqlt09a.dll的
DLL。该文件在 %GBASEDBTDIR%\lib 目录中。
GBase 8s ESQL/C For Windows 的静态库名为 isqlt09s.lib。该文件在
$GBASEDBTDIR/lib 目录中。
在许多平台上有一个名为 libgen.a 的系统库。要避免编译错误,建议您不要使用
libgen.a GBase 8s 库。而是使用 libifgen.a GBase 8s 库,它包含一个到 libgen.a 的符号链
接。
esql 命令
要确定您 GBase 8s ESQL/C 应用程序的要链接的 GBase 8s 通用库的类型,
esql 命令
支持下表的命令行选项。
表 1. GBase 8s 通用库的 esql 命令行选项
要链接的 GBase
8s 库版本
esql 命令行选

请参阅
共享库
没有选项
(缺省)

链接共享 GBase 8s 通用库
静态库
-static
链接静态 GBase 8s 通用库.

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

线程安全共享库
-thread
UNIX 系统上将线程安全 GBase 8s 通用库链接
到 ESQL/C 模块和将线程安全的 GBase 8s 通用库链
接到 Windows 环境中的 ESQL/C 模块
线程安全静态库
-thread -static
在 UNIX 操作系统上创建动态线程库
链接静态 GBase 8s 通用库
从 GBase 8s Client Software Development Kit 版本 3.0 开始,Windows™ 和 UNIX™
操作系统上提供了静态版本的 GBase 8s 通用库。
静态 GBase 8s 通用库保留其 Version 7.2 的名称,静态库名称具有以下格式:
非程序安全的静态 GBase 8s 通用库的名称 libxxx.a。
线程安全的静态 GBase 8s 通用库的名称为 libthxxx.a。
在这些静态库名称中,
xxx 标识了特定的静态 GBase 8s 通用库。
对于 Version 7.2 和
更高版本,静态和线程安全的静态 GBase 8s 通用库将使用此格式的名称作为其实际名称。
以下示例输出显示 libos 静态(libos.a)和线程安全静态(libthos.a)库:
% cd $GBASEDBTDIR/lib/esql
% ls -l lib*os.a
-rw-r--r-- 1 gbasedbt 145424 Nov 8 01:40 libos.a
-rw-r--r-- 1 gbasedbt 168422 Nov 8 01:40 libthos.a
esql 命令将与静态 GBase 8s 通用库的实际名称相关联的代码链接到 GBase 8s
ESQL/C 应用程序。运行时,您的 GBase 8s ESQL/C 程序可以直接从它的可执行文件访问
这些 GBase 8s 通用库函数。
将静态 GBase 8s 通用库链接到 ESQL/C 模块中
要使用 GBase 8s ESQL/C 模块链接 GBase 8s 通用库,
请使用 -static 命令行选项编
译您的程序。
以下命令使用 file.exe 可执行文件链接非线程安全 GBase 8s 库:
esql -static file.ec -o file.exe
esql 命令还可以将线程安全的 GBase 8s 通用库的代码与 GBase 8s ESQL/C 应用程
序链接。
提示: Version 7.2 之前的 GBase 8s ESQL/C esql 命令链接了 GBase 8s 通用库的静
态版本。因为 esql 命令缺省链接这些库的共享版本。您必须指定 -static 选项将静态版本
与 GBase 8s ESQL/C 应用程序链接。
链接共享 GBase 8s 通用库
GBase 8s ESQL/C 可以自动链接共享库,它将此库放置到共享内存中。当共享库在共
享内存中时,其它 GBase 8s ESQL/C 应用程序也会使用它。共享库在多用户环境中最为有
用,其中所有应用程序只需要一个库副本。
重要: 要在 GBase 8s ESQL/C 应用程序中使用共享库,您的操作系统必须支持共享

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

库。
支持共享库的操作系统包括 Sun 和 HP 版本的 UNIX™ 和 Windows™。
您应该熟悉
创建共享库以及 C 编程器需要构建它们的编译选项。
链接共享库(UNIX)的符号名称
当 esql 命令使用 GBase 8s ESQL/C 应用程序链接共享或线程安全共享 GBase 8s 库
时,它使用这些函数的 symbolic 名称。
非线程安全共享 GBase 8s 通用库具有 libxxx.yyy. 格式的符号名称。
线程安全共享 GBase 8s 通用库具有 libthxxx.yyy 格式的符号名称。
在这些静态库名称中,xxx 标识特定的库,yyy 是一个特定于平台的文件扩展名,用
于标识共享库文件。
提示: 要引用指定的共享库文件,此版本经常使用 Sun UNIX™ 操作系统的文件扩
展名,.so 文件扩展名。对于 UNIX 操作系统使用的共享库文件扩展名,请参阅 UNIX 操
作系统文件。
当您安装 GBase 8s ESQL/C 产品时,安装脚本将实际共享成品库名称与符号名称的
文件进行符号链接。下图显示了 GBase 8s 库的共享和线程安全共享版本的实际名称格式。

图: GBase 8s 共享库名称的格式


以下示例输出显示了 libos.a 静态库和 libos.so 共享库(在 Sun 平台上)的符号以
及实际名称:
%ls -l $GBASEDBTDIR/esql/libos*
-rw-r--r-- 1 gbasedbt 145424 Nov 8 01:40 libos.a
lrwxrwxrwx 1 root 11 Nov 8 01:40 libos.so -> iosls07a.so*
esql 命令使用 GBase 8s ESQL/C 应用程序链接符号共享库名称。运行期间,当程序
需要 GBase 8s 通用库函数时,GBase 8s ESQL/C 动态链接共享 GBase 8s 通用库的代码。

将共享 GBase 8s 通用库链接到 ESQL/C 模块中
要将共享 GBase 8s 通用库链接到 ESQL/C 模块中:
在运行时设置指定库搜索路径的环境变量,以便它在 UNIX™ 操作系统上包含
$GBASEDBTDIR/lib 和 $GBASEDBTDIR/lib/esql 路径;在 Windows™ 环境中包
含 %GBASEDBTDIR%lib。
在许多 UNIX 操作系统上,
LD_LIBRARY_PATH 环境变量指定库搜索路径。
以下命
令在 C shell 中设置 LD_LIBRARY_PATH:
setenv LD_LIBRARY_PATH $GBASEDBTDIR/lib:$GBASEDBTDIR/

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

lib/esql:/usr/lib
在 Windows 环境中,使用以下命令:
set LIB = %GBASEDBTDIR%\lib\;%LIB%
使用 esql 命令编译程序。
要使用 GBase 8s ESQL/C 模块链接 GBase 8s 通用库,您不需要指定命令行选项。
GBase 8s ESQL/C 缺省链接共享库。以下命令使用共享 GBase 8s 库编译 file.ec 源文件:
esql file.ec -o file.exe
当 esql 命令使用 GBase 8s ESQL/C 应用程序链接线程安全共享 GBase 8s 通用库时,
还会使用信号名称。
在共享和静态库版本之间选择
从 GBase 8s Client Software Development Kit 版本 3.0 开始,GBase 8s 通用库的静态
版本适用于 Windows™ 和 UNIX™ 操作系统。
共享库在多用户环境中十分有用,其中所有应用程序只需要一个库副本。共享库为您
的 GBase 8s ESQL/C 应用程序带来以下好处:
共享库减少可执行文件的大小,因为这些库函数是在需要的基础上动态链接的。
运行时,共享库的单个副本会链接到多个程序,这导致更少的内存使用。
GBase 8s ESQL/C 可执行文件中共享库的效果对用户来说是透明的。
尽管共享库保存磁盘和内存空间,但是当 GBase 8s ESQL/C 应用程序使用它们时,
它必须执行以下所有任务:
首次将共享库动态加载到内存中
执行链接编辑操作
执行库位置无关代码
这些开销任务可能会导致运行时迟缓,并且在使用静态库时不是必需的。但是,一旦
操作系统语句加载并映射了 GBase 8s 共享库,输入/输出(I/O)访问时间就可以抵消这些
成本。
重要: 当第一次执行应用程序加载共享库时,可能会对应用程序的客户端的性能造
成一次性负面影响。有关更多信息,请参阅操作系统文档。
由于操作系统需要加载程序及其库的真实 I/O 时间,
通常不会超过保存的 I/O 时间,
所以使用共享库的查询的性能明显与使用静态库的程序一样好或更好。但是,如果应用程
序不进行共享,或者如何您的处理器在应用程序调用共享库例程时饱和,则可能无法实现
这些节省。
还可以使用 GBase 8s ESQL/C 应用程序链接静态和共享 GBase 8s 通用库的线程安
全版本。