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

相关推荐
数据技术说15 分钟前
数据库缓存架构深度解析:命中率、一致性、多层缓存管理
数据库·架构
CJi0NG1 小时前
【自用】MySQL-多表查询
数据库·mysql
雨落在了我的手上1 小时前
MySQL数据库基础(12):事务
数据库·mysql
D姐聊门店1 小时前
门店收银系统断网兜底怎么设计:本地账本、离线续传与日终对账的工程实现
数据库·saas
用户8662978480082 小时前
抓包看 KingbaseES 内部协议?官方给了个现成工具
数据库
wefg12 小时前
【Redis】安装与启动
数据库·redis·缓存
大圣编蚕2 小时前
常见的 Redis 面试题(高频整理)
数据库·redis·缓存
派小心.3 小时前
网站统计采样数据的误差核对
大数据·服务器·前端·数据库·人工智能·小程序·数据分析
OceanBase数据库官方博客3 小时前
OceanBase 亮相亚马逊云科技峰会分享全球化实践(技术解析与实践)
科技·oceanbase
龙腾AI白云3 小时前
数字孪生、具身智能、世界模型三者交叉
数据库·人工智能·机器学习·flask·pygame