【问题标题】:Improving performance of CLOB insert across a DBLINK in Oracle提高 Oracle 中跨 DBLINK 的 CLOB 插入性能
【发布时间】:2012-10-27 04:38:05
【问题描述】:

在尝试将 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 小时。我曾尝试使用create table as select 方法,但这获得了相同的性能。我还花了几个多小时调整 SQL*NET,但没有看到任何改进。更改 Arraysize 并不会提高性能(尽管如果减小值会降低性能。

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

感谢您的帮助。

【问题讨论】:

    标签: oracle clob dblink


    【解决方案1】:

    将数组大小增加到 1500 或更高时,我能够获得更好的性能。另见附件:http://www.fors.com/velpuri2/PERFORMANCE/SQLNET.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-31
      • 2011-10-14
      • 2019-10-17
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多