2011-02-10 69 views

回答

1

当我为我的最后一家公司做这件事时,我们使用存储过程和多线程编写了一个C#程序。上下调节线程有助于加载数据库。由于某些配置设置,我们无法使用Loader。关联数组也有帮助。

在我们的案例中,我们无法做一些优化,因为这些表是活动的,但关闭索引并在负载之后重新构建它们可以提高性能。我们在RAC环境中看到了每个rac服务器与索引文件争执不休的问题,对索引进行分区和调整以提高性能,但我并不是真正的Oracle专家,所以您可能想问一个更聪明的人。

我知道我们看到CLOB数据的性能很差,因此我们将其中一个字段更改为跨越多个varchar(4000)的压缩字符串,然后在程序使用时将它们重新拼接在一起。

+0

@ Dan-OConnell你是如何将数据从文件插入数据库的。 – 2011-02-11 20:06:16

3

我一般建议使用SQL * Loader或根据文件是否是外部表(或可以)放置在数据库服务器上,或者是否你的意图是从客户端加载文件机。

SQL * Loader控制文件的细节将取决于您的文件的格式,但文档中有loading CLOB data stored in a data file的示例可以帮助您入门。

+0

@ Justin-Cave谢谢Justin,我们假设使用C#(我错误地没有正确写出q)。 – 2011-02-11 20:07:22

1

尽量减少瓶颈。

  • 移动这些文件,以便它们可以直接在数据库服务器上通过一个漂亮的厚管道访问。
  • 你想为你的数据库数据文件使用RAID 10(不是RAID 5)。
  • 确保您的重做日志文件位于与数据文件不同的主轴上。你不想让他们在磁盘上战斗。你可能想要关闭重做日志文件的任何多路复用。你(可能)不希望它作为生产数据库的永久固定装置,但如果这是一次性工作,那么这是值得的。
  • 关闭archivelog模式可能是值得的,因为可能会禁用任何复制。同样,如果这是一次性的话,可能只有相关。

一旦你的硬件适应了繁重的写入负载,那么使用SQL * Loader/external tables。

我怀疑多线程/进程是否会有很大的帮助,因为我期望速度受到写入磁盘而不是CPU的能力的限制。如果可以将LOB传播到具有多个主轴上文件的表空间中,这可能会有所帮助。

相关问题