暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle LOB插入性能

ASKTOM 2020-01-24
230

问题描述

这真的是一个设计问题,在我们开始编码之前...

该应用程序主要是OLTP,偏向于数据输入。将有一个月末处理周期来处理给定月份的数据。

我们有业务要求以每小时约30,000的速度扫描文档。每次扫描将产生两个图像,在Oracle 12.2企业版中存储一个月。我们刚刚被告知图像大小在25-40k之间,因此存储在外部片段中。30,000图像给出大约17每秒的插入速率。图像不会更新,但可能会被键盘随机引用。前端应用程序是Apex/PLSQL。在某个时候,在不真正了解需求的情况下,有人决定将3节点RAC群集作为平台 (基于Solaris Sparc LDOM的平台)。我们倾向于使用标准的8k块大小。

想知道您是否可以向我指出可能有助于考虑高插入性能的任何文档的方向,以及可能提供相应RAC考虑因素的任何内容 (从概念上讲,我有点担心对缓存的影响)。还有任何你想强调的东西!我可以自己找到有关LOB和RAC的文档,但是在设计注意事项和吞吐量大小方面却有些挣扎。有一个计划,下个月开始一些概念验证类型测试,只是试图预先解决一些可能的问题。

抱歉,如果这是 “错误” 类型的问题,如果是,请随时删除。我只是想在设计阶段考虑一下,以便 [希望] 以后保存问题。

谢谢

罗伯




专家解答

良好的... 我2岁的笔记本电脑每秒可以插入大约2,000个45k jpeg

SQL> create table lob_table
  2    (id        number,
  3     file_name varchar2(45),
  4     image     blob,
  5     tstamp    date)
  6  lob ( image ) store as securefile;

Table created.

Elapsed: 00:00:00.00
SQL>
SQL> create sequence lob_table_seq cache 1000;

Sequence created.

Elapsed: 00:00:00.00
SQL>
SQL>
SQL> create or replace procedure load_tester     as
  2      l_blob       blob;
  3      l_file_name  lob_table.file_name%type  := 'xmas.jpg';   -- 45k file
  4      l_bfile      bfile := bfilename('TEMP', l_file_name);
  5  begin
  6      insert into lob_table (id, file_name, image, tstamp)
  7          values (lob_table_seq.nextval, l_file_name, empty_blob(), sysdate)
  8          returning image into l_blob;
  9     dbms_lob.open(l_bfile, dbms_lob.lob_readonly);
 10     dbms_lob.open(l_blob, dbms_lob.lob_readwrite);
 11     dbms_lob.loadfromfile(
 12           dest_lob => l_blob
 13         , src_lob  => l_bfile
 14         , amount   => dbms_lob.getlength(l_bfile));
 15     dbms_lob.close(l_blob);
 16     dbms_lob.close(l_bfile);
 17     commit;
 18  end;
 19  /

Procedure created.

Elapsed: 00:00:00.02
SQL>
SQL> set timing on
SQL> begin
  2      for i in 1 .. 20000
  3      loop
  4          load_tester;
  5      end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:10.91

复制


因此,每秒17次插入不会测试任何现代硬件。

RAC的主要好处是可扩展性和可用性。您的需求表明,即使对于最基本的硬件,可扩展性也不是问题,因此最终,您的RAC决策将取决于可用性对您的重要性 (即,生存节点丢失,最小停机时间,滚动维护能力等)。

如果RAC的可用性优势确实符合您的要求,那么LOB处理实际上与RAC下的其他任何东西都没有什么不同,即,您通常可以在不进行任何设计更改的情况下立即获得良好的性能,但是,如果您选择某些RAC特定的应用程序优化 (例如节点亲和力),则可以获得更好的性能,为此已经有很多好的内容。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论