作者:玉璁,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