No memory or reach tenant memory limit

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】导数工具
【 使用版本 】4.2.1
【问题描述】
使用导出工具单机版导数的时候报No memory or reach tenant memory limit,而且是在导表结构的时候会报错,导数命令为:./obdumper -h ‘10.10.10.112’ -P’2881’ -u’root’ -t’sys’ -p’oceanbase’ -D’apaas_business_crrc_dc’ --ddl --all -f ‘/backup_2’ --sys-password ‘oceanbase’,报错如下:


如果仅仅导表数据则不报错,使用以下语句不报错,./obdumper -h ‘10.10.10.112’ -P’2881’ -u’root’ -t’sys’ -p’oceanbase’ -D’apaas_business_crrc_dc’ --sql --all -f ‘/backup_1’ --sys-password ‘oceanbase’
返回结果有147个表,但是到/backup_1/data/TABLE目录查看只有60个文件,不知道是不是没有数据的表他不导出来。更详细的日志请查看附件。
observer.log.gz (3.9 MB)
加了主机内存和sys租户内存后现在变成这个报错
information_schema.P.PARTITION_ORDINAL_POSITION’ is not in GROUP BY
obdumper.log (190.2 KB)

可能是 租户的内存不大导致 SQL工作内存也不大。到 目标租户里将下面变量调大试试?

set global ob_sql_work_area_percentage=50;

另外从你的命令行参数( -t sys)推断 是不是在 sys 租户下创建了业务数据库。这个是很不推荐的。sys租户里不要放业务数据。
另外,导出的 --sys-user 和 --sys-password 可以换成 sys租户下一个独立的只读用户,这样就不用暴露 sys租户的 root 密码了。

是sys租户的,最开始我不懂,只是用docker安装了一个简单的实例,用的默认sys租户,现在就是要导出来到别的租户

我调成50了仍然是这样

尝试下手动设置 --thread 参数,以限制程序并发度,从而降低对服务端的查询压力。obdumper 的默认并发度是根据运行机器 nproc * 2 计算的。

1 个赞

sys 租户下做这个导出,需要资源。可以试试这样:

  • 把其他租户先删除掉,释放资源。然后把sys租户的cpu和内存资源都调整到最大(用尽 OB节点的资源)。然后分 结构 和数据两次导出。
  • 导出成功后再对 sys缩容,然后建业务租户。

我的库也没多大估计就100多M,他怎么需要那么多内存

限制线程他又 提示这个java.sql.SQLException: ‘information_schema.P.PARTITION_ORDINAL_POSITION’ is not in GROUP BY

我现在已经加了主机内存,并且加了sys租户内存,现在提示Caused by: com.oceanbase.jdbc.internal.util.exceptions.OceanBaseSqlException: ‘information_schema.P.PARTITION_ORDINAL_POSITION’ is not in GROUP BY
[127.0.0.1:2882] [2024-03-01 01:29:30.463053] [YB427F000001-00061284B92F168E-0-0]
Caused by: java.sql.SQLException: ‘information_schema.P.PARTITION_ORDINAL_POSITION’ is not in GROUP BY

换 mysqldump 看看能不能导出来。

mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Couldn’t execute ‘/*!80000 SET SESSION information_schema_stats_expiry=0 */’: Unknown system variable ‘information_schema_stats_expiry’
[127.0.0.1:2882] [2024-03-01 02:30:44.398796] [YB427F000001-00061284BF2F9BB6-0-0] (1193)

用obdiag analyze log --since 15m 分析下最近15分钟的ob日志看看有啥问题没有。

https://www.oceanbase.com/docs/obdiag-cn