学会使用导数工具了吗?

2024年 5月 7日 66.5k 0

作者:玉璁,OceanBase 生态产品技术专家。
孙夕恩,花名玉璁,工作十余年,一直在基础架构与中间件领域从事研发工作。现任职于 OceanBase 生态产品团队,负责离线导数产品工具的研发工作,致力于为 OceanBase 建设一套完善的生态工具体系。玉璁在Java、分布式、基础架构、中间件、等领域有着较为丰富的研发实战经验。

本文将从入门到性能调优的顺序指导大家学会使用 OceanBase 导数工具—— OBLOADER 和 OBDUMPER。

基础功能入门

连接方式

OBLOADER 和 OBDUMPER 支持两种连接方式,第一种是连接至 ODP 代理服务,这要求连接命令中必需指定 -c 集群名 选项,第二种是直接连接到 OBServer 节点,此时命令中无需指定 -c 集群名 选项。通常,我们强烈建议您在使用 OBLOADER 或者 OBDUMPER 工具时,通过连接到 ODP 代理服务来访问 OceanBase 数据库。

示例语句如下所示:

# 连接 OBServer 节点
./obloader -h'IP' -u'user' -t'tenant' -p'password' -P'Port' -D'Schema'

# 连接 ODP 代理服务(推荐)
./obloader -h'IP' -u'user' -t'tenant' -c'cluster' -p'password' -P'Port' -D'Schema'

数据格式

OBLOADER 和 OBDUMPER 支持三种数据格式,分别是 CSV 格式、Insert SQL 格式 和 Delimited Text 格式。如何辨识这三种数据格式,请浏览另外一篇文档《准备好您的数据了吗?》。

下述以 OBLOADER 为例,展示了导入这三种格式数据的示例语句。

# CSV 格式
./obloader ....(省略连接选项) --csv --column-separator '分隔符' --column-delimiter '定界符' --table '逗号分隔多个表名(或者 * 通配所有的表)' -f '数据文件(或者 目录)'

# Insert SQL 格式
./obloader ....(省略连接选项) --sql --table '逗号分隔多个表名(或者 * 通配所有的表)' -f '数据文件(或者 目录)'

# Delimited Text 格式
./obloader ....(省略连接选项) --cut --column-splitter '分隔串' --table '逗号分隔多个表名(或者 * 通配所有的表)' -f '数据文件(或者 目录)'

说明

--column-delimiter 选项在 CSV 格式中指定的是值定界符,即引号所包含的值域范围。--column-separator 选项在 CSV 格式中代表的是值分隔符。

--column-separator 选项仅用于 CSV 格式,分隔符只能使用单个字符。--column-splitter 选项仅用于 Delimited Text 格式,分隔符可以使用单个字符,也可以使用字符串。

下载并解压 OceanBase 导数工具后,只要输入上述必需的选项和参数,您就已经可以初步地使用导入导出工具。然而,当您处理大规模的数据库或者数据文件时,仅指定上述的基础选项参数显然是不够的。您还需要掌握一些性能调优的技巧,以便于更高效地完成数据导入导出操作。

导数性能优化

无论您正在使用的是 OBDUMPER 数据导出功能还是 OBLOADER 数据导入功能,我们都需要进行性能优化工作(主要就是调参)。这里涉及到两个环节的参数调整,第一个环节是调整 OceanBase 导数工具自身的参数,第二个环节是调整 OBServer 集群的参数。

OceanBase 导数工具是由 Java 编写的工具,所以在运行 Bash 脚本之前,我们需要在 Bash 文件中修改 JVM 内存参数大小。通常,我们只需要修改 -Xms -Xmx 参数(默认值为 4 G),推荐将其修改为宿主机 60% 可用物理内存大小即可。其它与 OceanBase 导数工具自身相关的参数选项和设置建议如下。

工具相关的选项

--batch       该选项的参数值不宜设置太大,默认200。
--thread      建议该选项的参数值等于2倍的逻辑核心数,默认2*CPU。
--rw          解析线程与写入线程的比例。解析线程的数量等于 --thread * 0.2,默认0.2。
--page-size   该选项仅用于导出数据时单次查询的记录条数。结合JVM内存大小指定分页大小,默认10000。

集群相关的参数

-- 必设的系统变量和参数
set global max_allowed_packet=1073741824; -- 设置为 1GB
set global ob_sql_work_area_percentage=30; -- 默认值:5
alter system set freeze_trigger_percentage=30; -- 默认值:70

-- 选设的系统变量和参数
alter system set enable_syslog_recycle='True'; -- 默认值:false
alter system set max_syslog_file_count=100; -- 默认值:0
alter system set minor_freeze_times=500; -- 默认值:5
alter system set minor_compact_trigger=5; -- 默认值:5
alter system set merge_thread_count=45; -- 默认值:0
alter system set minor_merge_concurrency=20; -- 默认值:0
alter system set writting_throttling_trigger_percentage=85; -- 默认值:10
alter system set flush_log_at_trx_commit=0;  -- 默认值:1
alter system set syslog_io_bandwidth_limit=100;  -- 默认值:30MB

说明

无论是工具选项参数还是集群租户相关的参数,目前并没有绝对可用的经验值。我们也是根据实际的业务进行调参优化,以便于找到适合当前业务的最佳参数值。性能优化是一个逐步探索的过程。我们需要更多的耐心进行观察试验。

在数据导入或者导出后,以上系统变量和参数务必要重新修改为默认值。

巧妙地运用高级权限

这一节我们专门讲 OceanBase 导数工具内部所依赖的数据库的用户权限。

OceanBase 导数工具区别于其他数据库厂商导数据工具的关键地方,在于它充分利用了 OceanBase 数据库内部的一些分布式的特性并进行了专门的性能优化。使用时,您必须提供 root@sys 用户的密码或者配置供应商提供的安全秘钥文件,这样 OceanBase 导数工具在运行的过程中才能查询到数据库内部的系统信息。所以在您输入命令行参数时,除了需要输入业务用户的密码以外,还需要输入 root@sys 用户的密码,例如 -p '业务用户的密码' --sys-password 'root@sys的密码'

更多功能介绍

关于OceanBase 导数工具更多的功能介绍和常见问题回答可以查看我们的官方文档,文档地址如下:

1.OBLOADER 2.1.13 版本(最新版本): https://www.oceanbase.com/docs/obloader-obdumper/obloader-obdumper/V2.1.13/product-introduction

2.OBDUMPER 2.1.13 版本(最新版本): https://www.oceanbase.com/docs/obloader-obdumper/obloader-obdumper/V2.1.13/product-introduction-1

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论