obdumper和obloader迁移OceanBase业务库(二):报错与调优
- 性能调优
- 常见报错处理
-
- [导出超时maximum query timeout](#导出超时maximum query timeout)
- [导入报错Incorrect value for column at row 1](#导入报错Incorrect value for column at row 1)
- 向量列导入报错列数不一致
- 表或视图不存在
性能调优
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