我们有一个每天运行的任务,将查询的结果转储到 CSV 文件中——作为sqlplus运行查询的标准输出。
记录数以百万计(不要问),工作需要两个多小时。
在尝试改进计时,我编写了一个 C 程序(使用 Oracle 的ofetch()调用),但性能没有改变......在客户端上增加会话数据单元 (SDU) 大小(到 1GB!不确定) ,服务器会夹住它)没有帮助。
然后我做了一些更多的研究和发现,即ofen(),如果使用在同一时间捕捉到多行,可以大大提高性能-而且改变了我的C-程序,用它代替。
一次获取 4K 行,时间缩短到 21 分钟——减少了 10 倍——引起了很多欢呼。
在我们解决在生产服务器上安装我的新可执行文件的麻烦之前,也许,sqlplus如果提供了正确的命令行选项,库存也可以执行相同的多行提取?
它可以?我们正在使用 Oracle-11,但如果此功能在客户端版本 12 中可用,我们可以升级客户端...