obdumper和obloader迁移OceanBase业务库(二):报错与调优

obdumper和obloader迁移OceanBase业务库(二):报错与调优

性能调优

OBdumper导出调优

  • --thread:导出线程的并发数,根据数据库系统资源的利用情况进行调整。默认为CPU * 2,上限为32
  • --page-size:指定任务分页的大小,根据数据库系统资源的利用情况进行调整。默认为**1000000``88。
  • --mem:OBDUMPER V4.3.2及之后版本支持该参数,用于标识JVM的内存大小配置。支持的单位包括 K、M、G 或 T,默认值为4G

OBloader导入调优

  • 宽表或者列值较长,将--batch选项的参数值调小;反之则调大。--batch用于标识批量写入的事务大小。建议该选项的值与表的宽度成反比的关系,但不可设置过大导致数据库内存溢出。默认值为200 。OBLOADER V4.2.0及之后的版本支持根据JAVA虚拟机的内存自适应--batch的默认值。
  • 索引会影响数据导入的性能。除主键和唯一键外,普通索引延迟到数据导入结束后再创建
  • 机器的负载和网络都较低时,视情况可调整--thread选项的参数值。
  • OBLOADER V4.3.2 及之后版本支持--mem参数,用于标识JVM的内存大小配置。支持的单位包括 K、M、G 或 T,默认值为4G

常见报错处理

导出超时maximum query timeout

导出超时报错:

bash 复制代码
[ERROR] Dump failed. Reason: Timeout, query has reached the maximum query timeout: 300000000(us)

🐘 解决办法 :修改OBdumper配置文件中的超时时间(注意不是数据库内部的超时时间):

bash 复制代码
[amdin@oceanbase ~]$ cat /home/admin/ob-loader-dumper-4.3.4-RELEASE/conf/session.config.json | grep ob_query_timeout
      "set session ob_query_timeout=36000000000",
      "set session ob_query_timeout=36000000000",

导入报错Incorrect value for column at row 1

导入报错SQLException: Incorrect integer value for column 'xxx' at row 1**。

bash 复制代码
[INFO] Deserialization of ".MANIFEST.bin" failed. It may affect the the parser's functionality, if so, you may add valid csv format options that correspond to the data file.
-	Note: ".MANIFEST.bin" is a binary file that specifies the current CSV format, in most cases, it's not necessary and okay to be ignored. It will be deprecated soon.
...
[ERROR] Error: Load data into "knowledgedb"."mydb_vector_fost_reportv2" failed! SQLException: Incorrect integer value for column 'page_num' at row 1

使用OBDUMPER导出CSV格式文件时,会生成MANIFEST.bin以记录CSV具体的格式信息;使用OBLOADER导入数据时,程序会解析MANIFEST.bin文件并提取格式信息,从而覆盖导入时与格式相关的命令行选项。未生成MANIFEST.bin文件时,导出时默认会生成CSV Header,但导入时却默认从第一条数据开始读取,这会导致程序将Header当成数据处理,从而出错。

🐘 解决办法 :在obloader导入时手动添加--skip-header选项。

向量列导入报错列数不一致

包含有向量列的表在导入时报错解析出来的列数与表定义不一致。

bash 复制代码
[ERROR] Error: Failed to load 322 records from "/obdata/backup/knowledgedb/csv_data/data/knowledgedb/TABLE/mydb_vector_fost_reportv2.csv" into table `knowledgedb`.`mydb_vector_fost_reportv2`. Check "ob-loader-dumper.bad" and "ob-loader-dumper.discard" for details
...
Cause: The number of columns parsed does not match the number of columns in the table

这个问题一般是由于obdumper导出向量列时没有给向量数据加上单引号导致的。CSV文件以逗号为分隔符,导入时向量字段的每个维度都被识别为了一个独立的表字段,导致导入的字段数与DDL中定义的字段数不一致。旧版本的导数工具中没有适配向量类型,会出现这个问题。

🐘 解决办法 :使用v4.3.4或者更高版本的导数工具来导出包含向量列的表数据。

表或视图不存在

导出时报错表或视图不存在。

sql 复制代码
[ERROR] SQL: SELECT * FROM
        (
            SELECT
                TYPE AS OBJ_TYPE,
                NAME AS OBJ_NAME,
                REFERENCED_TYPE AS REF_TYPE,
                REFERENCED_OWNER AS REF_OWNER,
                REFERENCED_NAME AS REF_NAME,
                REFERENCED_LINK_NAME AS REF_LINK_NAME,
                DEPENDENCY_TYPE AS DEP_TYPE
            FROM DBA_DEPENDENCIES D
            WHERE OWNER=? AND OWNER=REFERENCED_OWNER AND REFERENCED_TYPE NOT IN ('NON-EXISTENT')
            AND NOT EXISTS (SELECT 1 FROM USER_RECYCLEBIN WHERE D.NAME=ORIGINAL_NAME)
        )
        UNION ALL
        (
            SELECT
                ('TABLE') AS OBJ_TYPE,
                C1.TABLE_NAME AS OBJ_NAME,
                ('TABLE') AS REF_TYPE,
                C1.R_OWNER AS REF_OWNER,
                C2.TABLE_NAME AS REF_NAME,
                (null) AS REF_LINK_NAME,
                (null) AS DEP_TYPE
            FROM DBA_CONSTRAINTS C1, DBA_CONSTRAINTS C2
            WHERE C1.OWNER=C2.OWNER AND C1.R_CONSTRAINT_NAME=C2.CONSTRAINT_NAME AND C1.TABLE_NAME!=C2.TABLE_NAME AND C1.OWNER=? AND C1.CONSTRAINT_TYPE IN ('F', 'R')
        )
java.sql.SQLSyntaxErrorException: (conn=3221541671) ORA-00942: table or view does not exist

这种一般是导出用户的权限不足导致的。

🐘 解决办法:建议使用租户管理员进行导出导入(MySQL为root/Oracle为sys)。

References

【1】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003378663

【2】https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002401643

【3】https://www.oceanbase.com/docs/enterprise-oceanbase-dumper-loader-cn-10000000001142213

【4】https://www.oceanbase.com/docs/enterprise-oceanbase-dumper-loader-cn-10000000001142216

【5】https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000091365

【6】https://ask.oceanbase.com/t/topic/35620174

【7】https://www.cnblogs.com/bsmn/p/16496455.html

【8】https://open.oceanbase.com/blog/16018455643

【9】https://open.oceanbase.com/blog/20224546128

【10】https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002401653

相关推荐
Pure03195 小时前
Spring 循环依赖问题
java·数据库·spring
budingxiaomoli5 小时前
MYSQL表的增删改查
数据库·sql·mysql
skywalk81635 小时前
mayfly-go:web 版 linux、数据库等管理平台
linux·运维·数据库
独行soc5 小时前
2025年渗透测试面试题总结-42(题目+回答)
android·数据库·安全·adb·面试·渗透测试·sqlite
聪明努力的积极向上6 小时前
【MYSQL】GET_LOCK使用方法简单解析
数据库·mysql
百胜软件@百胜软件6 小时前
百胜软件×OceanBase深度合作,赋能品牌零售数字化实践降本增效
oceanbase·零售
艾伦~耶格尔6 小时前
【MySQL体系结构详解:一条SQL查询的旅程】
数据库·学习·mysql
Lu Yao_6 小时前
golang -- viper
服务器·数据库·golang
DemonAvenger8 小时前
MySQL性能监控与分析工具使用指南:从入门到实战优化
数据库·sql·性能优化