当前位置: 首页 > 知识库问答 >
问题:

提高Oracle中跨DBLINK插入CLOB的性能

宦树
2023-03-14

在尝试将CLOB从一个数据库复制到另一个数据库时,我发现Oracle(11g)的性能很差。我尝试了几件事,但都没能改善这一点。

CLOB用于收集报告数据。这可能是相当大的一个记录到记录的基础上。我在远程数据库(通过WAN)上调用一个过程来构建数据,然后将结果复制回公司总部的数据库进行比较。一般格式为:

CREATE TABLE my_report(the_db VARCHAR2(30), object_id VARCHAR2(30), 
final_value CLOB, CONSTRAINT my_report_pk PRIMARY KEY (the_db, object_id));

为了提高性能,我将远程站点的结果累积到表的远程副本中。在程序运行结束时,我尝试将数据复制回来。此查询非常简单:

INSERT INTO my_report SELECT * FROM my_report@europe;

我看到的性能大约是每秒9行,平均CLOB大小为3500字节。(我使用的是CLOB,因为这个大小经常超过4k,即VARCHAR2限制。)对于70,000条记录(并不罕见),这需要大约2个小时才能传输。我尝试过使用创建表作为select方法,但这获得了相同的性能。我还花了几个多小时调整SQL*NET,但没有看到任何改进。更改Arraysize不会提高性能(尽管如果值减少,它会降低性能。

我可以使用旧的exp/imp方法(从远程导出表,将其导入)获得副本,这运行得更快,但这对于我的自动报告来说是相当手动的。我考虑过尝试编写一个流水线函数来选择此数据,使用它将CLOBS拆分为BYTE/VARCHAR2块(带有额外的块编号列),但如果有人尝试过并发现问题,我不想这样做。

谢谢你的帮助。

共有1个答案

姚信鸥
2023-03-14

当数组大小增加到1500或更高时,我能够获得更好的性能。另请参阅附加文档:http://www.fors.com/velpuri2/PERFORMANCE/SQLNET.pdf

 类似资料:
  • 我有一个数据模型,在一个实体和11个其他实体之间有一对多的关系。这12个实体一起代表一个数据包。我遇到的问题是,在这些关系的“多”端发生的插入数量。其中一些可以有多达100个单独的值,因此要在数据库中保存一个完整的数据包,最多需要500次插入。 我在InnoDB表中使用MySQL 5.5。现在,通过对数据库的测试,我发现在处理批插入时,它可以轻松地每秒执行15000次插入(对于加载数据,插入次数甚

  • 如何向CLOB类型列插入超过4000个字符? 导致错误: ORA-01704:字符串太长。 当我阅读Oracle参考时,可以最大节省4GB(千兆字节)?

  • 问题内容: 我需要将XML文件内容写入oracle数据库,其中该列是CLOB数据类型。我该怎么做? 问题答案: 过时的 请参阅下面的Lukas Eder的答案。 大约有100行代码;-) 这是一个示例 。 要点:与其他JDBC驱动程序不同,Oracle的驱动程序不支持使用和作为参数。相反,您必须先将该列然后 写入 我建议您将此代码移到辅助方法/类中。否则,它将污染其余的代码。

  • 首先为我的英语感到抱歉。 我试图插入大约15000行,问题是有一个CLOB类型的列可能有超过4000个字符,给出错误ORA-01704,我知道如何像这样一个接一个地插入:TO_CLOB(string)TO_CLOB(string)并且它工作,但是我有大约1000个这样的情况发生,我不想手动执行,你能想到什么方法来插入它们? 谢谢你。

  • 问题内容: 我有一个数据模型,该数据模型在一个实体和其他11个实体之间具有一对多关系。这12个实体一起代表一个数据包。我遇到的问题是与这些关系的“许多”方面发生的插入次数有关。其中一些可以具有多达100个单独的值,因此要将一个完整的数据包保存在数据库中,最多需要500次插入。 我正在将MySQL 5.5与InnoDB表一起使用。现在,通过测试数据库,我发现在处理批量插入时,它每秒可以轻松地每秒进行

  • 我只是想知道TABLOCK是否会提高批量插入的性能? 根据中的第一个答案https://dba.stackexchange.com/questions/165966/how-does-one-investigate-the-performance-of-a-bulk-insert-statement,看来塔洛克会的。 根据官方文件https://docs.microsoft.com/en-us/s