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

相关推荐
qq_342295828 小时前
CSS如何实现透明背景效果_通过RGBA色彩模式控制透明度
jvm·数据库·python
panzer_maus8 小时前
MySQL 索引介绍与索引优化的简单介绍
数据库·mysql
Greyson18 小时前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python
captain3768 小时前
事务___
java·数据库·mysql
justjinji8 小时前
如何批量更新SQL数据表_使用UPDATE JOIN语法提升效率
jvm·数据库·python
爱学习的小邓同学9 小时前
MySQL --- MySQL数据类型
数据库·mysql
weixin_580614009 小时前
MySQL存储过程中如何防止SQL注入_使用参数化查询规范
jvm·数据库·python
2401_837163899 小时前
PHP源码开发用台式机还是笔记本更合适_硬件选型对比【方法】
jvm·数据库·python
baidu_340998829 小时前
mysql修改列名会导致程序报错吗_Change Column语法与兼容性
jvm·数据库·python
只说证事9 小时前
会计岗位向管理会计升级,最该补哪些数据分析技能
数据库·数据挖掘·数据分析