问题描述
你好,
我们有sqlldr的问题,我们有32 GB内存和24 GB交换的服务器。
在加载大表 (带有blob的40 mil记录) 时,空闲RAM会持续减少,而下一次交换也会持续减少。
在加载了一些错误之后:
SQL * Loader-556: 无法分配读取缓冲区
SQL * Loader-509: 系统错误: 空间不足
SQL * Loader-502: 无法为字段内容表VVS_MSG打开数据文件 '/LOAD_FS/UNLOAD10099/VS/vvs_msg.8_284212727.1.blob'
为什么sqlldr消耗这么多的RAM (所有RAM),如果它是简单的加载而没有排序或其他操作。
Sqlldr copmmands看起来像:
sqlldr / LOG =/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.log.8控制 =/LOAD_FS/UNLOAD10099/VS/CTL/vvs_msg.ctl.8行 = 5000 >/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.out.8 2>& 1
我们用8个同时的sqlldr进程加载数据。
我们发现,当只执行一个进程时
sqlldr / LOG =/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.log.1控制 =/LOAD_FS/UNLOAD10099/VS/CTL/vvs_msg.ctl.1行 = 100 BINDSIZE = 500000 >/INST/R10100/rvsd1/VS/UTIL/LOG/vvvs_msg.out.1 2>& 1
达到约3.5 GB RAM,并因核心转储和ORA错误而下降
32243932分割故障 (coredump)
SQL * Loader-502: 无法为字段内容表VVS_MSG打开数据文件 '/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_284218096.1.blob'
SQL * Loader-556: 无法分配读取缓冲区
SQL * Loader-509: 系统错误: 空间不足
RAM的数量各不相同,但evry约为3.5 GB
3391568
3402968
3408636
等等
所以它看起来像sqlldr达到一些限制的RAM和下降。
执行sqlldr的用户在OS中没有限制。
但是为什么它不释放RAM?
为什么RAM仍然上升?
在执行sqlldr之前,每个表都会被截断。
命令行是:
sqlldr / LOG =/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.log.1控制 =/LOAD_FS/UNLOAD10099/VS/CTL/vvs_msg.ctl.1行 = 100 BINDSIZE = 500000 >/INST/R10100/rvsd1/VS/UTIL/LOG/vvvs_msg.out.1 2>& 1
控制文件:
加载数据
文件 “/加载 _ fs/卸载10099/VS/vvs_msg.unl.1” “字符串” | \ n'”
坏文件 '/加载 _ fs/卸载10099/VS/坏/vvs_msg.bad.1'
丢弃文件 '/LOAD_FS/UNLOAD10099/VS/DSC/vvs_msg.dsc.1'
追加
进入表vvs_msg
由 “|” 终止的字段
尾随NULLCOLS
(
身份证,
内容 _ 文件名填充字符 (100),
内容LOBFILE(content_filename) 由EOF终止,
代码页面
)
卸载的前10条记录:
23453280 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_23453280.1.blob | U |
28770528 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28770528.1.blob | U |
28847952 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28847952.1.blob | U |
28945056 |/LOAD_FS/卸载10099/VS/vvs_msg.1_28945056.1.blob | U |
28952016 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28952016.1.blob | U |
39405984 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_39405984.1.blob | |
44795424 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_44795424.1.blob | U |
47572848 |/LOAD_FS/卸载10099/VS/vvs_msg.1_47572848.1.blob | U |
50474736 |/LOAD_FS/卸载10099/VS/vvs_msg.1_50474736.1.blob | |
50504208 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_50504208.1.blob | |
前10个blob文件的列表:
-rw-r-1 zaved uziv_dis 187 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_23453280.1.blob
-rw-r-1 zaved uziv_dis 358 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28770528.1.blob
-rw-r-1 zaved uziv_dis 187 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28847952.1.blob
-rw-r-1 zaved uziv_dis 427 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_28945056.1.blob
-rw-r-1 zaved uziv_dis 326 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_28952016.1.blob
-rw-r-1 zaved uziv_dis 567 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_39405984.1.blob
-rw-r-1 zaved uziv_dis 187 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_44795424.1.blob
-rw-r-1 zaved uziv_dis 127 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_47572848.1.blob
-rw-r-1 zaved uziv_dis 1760 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_50474736.1.blob
-rw-r-1 zaved uziv_dis 56002 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_50504208.1.blob
通常blob文件最多有500B,但其中一些文件有200KB。
一个卸载有6127708记录。
非常感谢您的回答。
我们有sqlldr的问题,我们有32 GB内存和24 GB交换的服务器。
在加载大表 (带有blob的40 mil记录) 时,空闲RAM会持续减少,而下一次交换也会持续减少。
在加载了一些错误之后:
SQL * Loader-556: 无法分配读取缓冲区
SQL * Loader-509: 系统错误: 空间不足
SQL * Loader-502: 无法为字段内容表VVS_MSG打开数据文件 '/LOAD_FS/UNLOAD10099/VS/vvs_msg.8_284212727.1.blob'
为什么sqlldr消耗这么多的RAM (所有RAM),如果它是简单的加载而没有排序或其他操作。
Sqlldr copmmands看起来像:
sqlldr / LOG =/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.log.8控制 =/LOAD_FS/UNLOAD10099/VS/CTL/vvs_msg.ctl.8行 = 5000 >/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.out.8 2>& 1
我们用8个同时的sqlldr进程加载数据。
我们发现,当只执行一个进程时
sqlldr / LOG =/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.log.1控制 =/LOAD_FS/UNLOAD10099/VS/CTL/vvs_msg.ctl.1行 = 100 BINDSIZE = 500000 >/INST/R10100/rvsd1/VS/UTIL/LOG/vvvs_msg.out.1 2>& 1
达到约3.5 GB RAM,并因核心转储和ORA错误而下降
32243932分割故障 (coredump)
SQL * Loader-502: 无法为字段内容表VVS_MSG打开数据文件 '/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_284218096.1.blob'
SQL * Loader-556: 无法分配读取缓冲区
SQL * Loader-509: 系统错误: 空间不足
RAM的数量各不相同,但evry约为3.5 GB
3391568
3402968
3408636
等等
所以它看起来像sqlldr达到一些限制的RAM和下降。
执行sqlldr的用户在OS中没有限制。
但是为什么它不释放RAM?
为什么RAM仍然上升?
在执行sqlldr之前,每个表都会被截断。
命令行是:
sqlldr / LOG =/INST/R10100/rvsd1/VS/UTIL/LOG/vvs_msg.log.1控制 =/LOAD_FS/UNLOAD10099/VS/CTL/vvs_msg.ctl.1行 = 100 BINDSIZE = 500000 >/INST/R10100/rvsd1/VS/UTIL/LOG/vvvs_msg.out.1 2>& 1
控制文件:
加载数据
文件 “/加载 _ fs/卸载10099/VS/vvs_msg.unl.1” “字符串” | \ n'”
坏文件 '/加载 _ fs/卸载10099/VS/坏/vvs_msg.bad.1'
丢弃文件 '/LOAD_FS/UNLOAD10099/VS/DSC/vvs_msg.dsc.1'
追加
进入表vvs_msg
由 “|” 终止的字段
尾随NULLCOLS
(
身份证,
内容 _ 文件名填充字符 (100),
内容LOBFILE(content_filename) 由EOF终止,
代码页面
)
卸载的前10条记录:
23453280 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_23453280.1.blob | U |
28770528 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28770528.1.blob | U |
28847952 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28847952.1.blob | U |
28945056 |/LOAD_FS/卸载10099/VS/vvs_msg.1_28945056.1.blob | U |
28952016 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28952016.1.blob | U |
39405984 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_39405984.1.blob | |
44795424 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_44795424.1.blob | U |
47572848 |/LOAD_FS/卸载10099/VS/vvs_msg.1_47572848.1.blob | U |
50474736 |/LOAD_FS/卸载10099/VS/vvs_msg.1_50474736.1.blob | |
50504208 |/LOAD_FS/UNLOAD10099/VS/vvs_msg.1_50504208.1.blob | |
前10个blob文件的列表:
-rw-r-1 zaved uziv_dis 187 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_23453280.1.blob
-rw-r-1 zaved uziv_dis 358 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28770528.1.blob
-rw-r-1 zaved uziv_dis 187 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_28847952.1.blob
-rw-r-1 zaved uziv_dis 427 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_28945056.1.blob
-rw-r-1 zaved uziv_dis 326 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_28952016.1.blob
-rw-r-1 zaved uziv_dis 567 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_39405984.1.blob
-rw-r-1 zaved uziv_dis 187 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_44795424.1.blob
-rw-r-1 zaved uziv_dis 127 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_47572848.1.blob
-rw-r-1 zaved uziv_dis 1760 29 m á j 17:31/加载 _fs/卸载10099/VS/vvs_msg.1_50474736.1.blob
-rw-r-1 zaved uziv_dis 56002 29 m á j 17:31 /LOAD_FS/UNLOAD10099/VS/vvs_msg.1_50504208.1.blob
通常blob文件最多有500B,但其中一些文件有200KB。
一个卸载有6127708记录。
非常感谢您的回答。
专家解答
你可能撞到那里的虫子了。
我已经复制了你的问题,我只是用这样的数据文件一遍又一遍地加载同样的几个blob:
用一张表作为
当我查看sqlldr进程时,它的内存大小不断增长
我尝试了一些变体 (直接,不同的读取/绑定大小等),但似乎都没有明显的帮助。
因此,请与支持人员联系-您可以链接到此问题作为支持证据。作为一种解决方法,请查看以较小的批处理文件,因为它似乎与加载的blob数量成比例。
我已经复制了你的问题,我只是用这样的数据文件一遍又一遍地加载同样的几个blob:
1|/tmp/blob1.jpg|U| 2|/tmp/blob2.jpg|U| 3|/tmp/blob3.jpg|U| 4|/tmp/blob4.jpg|U| 5|/tmp/blob0.jpg|U| 6|/tmp/blob1.jpg|U| 7|/tmp/blob2.jpg|U| 8|/tmp/blob3.jpg|U| 9|/tmp/blob4.jpg|U| 10|/tmp/blob0.jpg|| ...
用一张表作为
create table vvs_msg ( id int, content blob, code_page varchar2(5) ); LOAD DATA INFILE '/tmp/load.dat' BADFILE '/tmp/load.bad' DISCARDFILE '/tmp/load.dsc' TRUNCATE INTO TABLE vvs_msg FIELDS TERMINATED BY '|' TRAILING NULLCOLS ( id, content_filename FILLER CHAR(100), content LOBFILE(content_filename) TERMINATED BY EOF, code_page )
当我查看sqlldr进程时,它的内存大小不断增长
[oracle@vbgeneric ~]$ cat /proc/5310/status | grep ^Vm VmPeak: 191088 kB VmSize: 191088 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 80736 kB VmRSS: 80736 kB VmData: 77840 kB VmStk: 472 kB VmExe: 1448 kB VmLib: 70756 kB VmPTE: 332 kB VmPMD: 12 kB VmSwap: 0 kB [oracle@vbgeneric ~]$ cat /proc/5310/status | grep ^Vm VmPeak: 191352 kB VmSize: 191352 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 81000 kB VmRSS: 81000 kB VmData: 78104 kB VmStk: 472 kB VmExe: 1448 kB VmLib: 70756 kB VmPTE: 332 kB VmPMD: 12 kB VmSwap: 0 kB [oracle@vbgeneric ~]$ cat /proc/5310/status | grep ^Vm VmPeak: 191484 kB VmSize: 191484 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 81000 kB VmRSS: 81000 kB VmData: 78236 kB VmStk: 472 kB VmExe: 1448 kB VmLib: 70756 kB VmPTE: 332 kB VmPMD: 12 kB VmSwap: 0 kB [oracle@vbgeneric ~]$ cat /proc/5310/status | grep ^Vm VmPeak: 201384 kB VmSize: 201384 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 91032 kB VmRSS: 91032 kB VmData: 88136 kB VmStk: 472 kB VmExe: 1448 kB VmLib: 70756 kB VmPTE: 352 kB VmPMD: 12 kB VmSwap: 0 kB [oracle@vbgeneric ~]$ cat /proc/5310/status | grep ^Vm VmPeak: 202572 kB VmSize: 202572 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 92088 kB VmRSS: 92088 kB VmData: 89324 kB VmStk: 472 kB VmExe: 1448 kB VmLib: 70756 kB VmPTE: 352 kB VmPMD: 12 kB VmSwap: 0 kB
我尝试了一些变体 (直接,不同的读取/绑定大小等),但似乎都没有明显的帮助。
因此,请与支持人员联系-您可以链接到此问题作为支持证据。作为一种解决方法,请查看以较小的批处理文件,因为它似乎与加载的blob数量成比例。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




