【 使用环境 】测试环境
【 OB or 其他组件 】OceanBase
【 使用版本 】5.7.25-OceanBase_CE-v4.3.5.2 - Mysql租户
【问题描述】串行执行LOAD DATA语句,添加了hint: /*+ direct(true,1024) parallel(16) */但是运行时租户内存占用迅速提升到90%左右且执行结束后没有下降。查询select * from oceanbase.gv$session_longops也没有任何结果,像是没有走旁路。用JAVA并行的执行LOAD的时候如果两张表都比较大就会出现No Memory or reach tenant memory limit的报错。
【复现路径】
- 基本信息:大概90张表、100G数据,表没有任何索引自增列等,且字段均能一一对应。测试时各表均为空表。
- 大致操作:
(1) 重启数据库:后台obd cluster restart deploy_name重启,然后ocp-express查看租户内存就5%左右。
(2) 执行批量导入脚本:就是批量调用以下命令,执行也都是成功的,大概一个小时左右:
LOAD DATA /*+ direct(true,1024) parallel(16) */
from files (
location = '$MY_LOCATION',
format = (
type = 'csv',
line_delimiter = '\n',
field_delimiter = 0x01,
parse_header = false,
skip_blank_lines = true,
EMPTY_FIELD_AS_NULL = true
),
pattern = \"$MY_FILENAME\"
)
INTO TABLE $TABLECODE"
(3) 观察后台ocp-express情况发现内存迅速飙升至90%左右且运行结束后不下降。
(4) 执行过程中查询select * from oceanbase.gv$session_longops结果为空。这个操作我是看社区里有相关问答,不知道当前版本是否适用或者有其它判断是否旁路的办法。
按照我的理解旁路导入应该不会对内存有这么大影响,不知道我的判断对不对?我的执行语句有什么需要修改的嘛?




