原作者:盖国强
目录
- 适用范围
- 问题概述
- 问题原因
- 解决方案
- 参考文档
适用范围
MogDB 5.0.3
问题概述
当通过 copy 命令,向 5.0.3 版本导入数据时遇到 invalid memory alloc request 的错误。
源数据来自 MogDB 3.0版本的导出,导出如下:
解释omm@876c51460fa2:~$ gsql -U eygle -W Eyg1e@db -d mogdb
gsql ((MogDB 3.0.1 build 1a363ea9) compiled at 2022-08-05 18:01:26 commit 0 last mr )
NOTICE : The password has been expired, please change the password.
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=>copy (select * from allpeople where excel_name like '巴林%') to '/home/omm/balin.data';
COPY 29921
在 5.0.3 版本导入时出错:
解释omm@bf13726f618b:~$ sh log.sh
gsql ((MogDB 5.0.3 build 86d963ad) compiled at 2023-10-13 09:17:49 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=>copy allpeople from '/var/lib/mogdb/2.data';
ERROR: invalid memory alloc request size 11407785544 in knl_uheap.cpp:3378.
问题原因
最初的分析是 3378 行数据格式有问题,当剔除这一行报错数据后,下一次 copy 错误仍然出现在 3378 行位置上。因此判断不是数据问题。
将原始文件 split 为 3000 行为单位的多个文件,再进行 copy 导入,可以正常执行:
解释mm@bf13726f618b:/var/lib/mogdb$ ls -l
total 32936
-rwxrwxrwx 1 omm omm 33725959 Dec 21 08:41 balin.data
drwx------ 44 omm omm 1408 Dec 21 08:48 data
omm@bf13726f618b:/var/lib/mogdb$ split -l 3000 -d balin.data
omm@bf13726f618b:/var/lib/mogdb$ ls
balin.data data x00 x01 x02 x03 x04 x05 x06 x07 x08 x09
omm@bf13726f618b:/var/lib/mogdb$ gsql -U eygle -W eyg1e@mdb -d mogdb
gsql ((MogDB 5.0.3 build 86d963ad) compiled at 2023-10-13 09:17:49 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=>copy allpeople from '/var/lib/mogdb/x00';
COPY 3000
MogDB=>select count(*) from allpeople;
count
-------
3000
(1 row)
MogDB=>copy allpeople from '/var/lib/mogdb/x01';
COPY 3000
MogDB=>select count(*) from allpeople;
count
-------
6000
(1 row)
进一步的,如果多次尝试正常执行整个文件的 copy,则会陷入死循环,表无限膨胀,直到磁盘空间耗尽:


解决方案
通过将大文件裁剪为小文件,分批导入。具体 Bug 需要研发定位。
参考文档
无。
mogdb
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




