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

Oracle 使用包全局变量

askTom 2017-04-06
561

问题描述

我们正在尝试在11g中进行大型表 (100 mil行) 的一些转换。这是一个基于供应商的架构,因此从现有结构到新结构,需要进行一些计算。我们的开发人员希望使用包全局变量。我听说它是资源密集型的,尤其是内存。有没有关于如何确定将使用多少内存的指导方针?包全局变量是如何工作的?

谢谢。

专家解答

包全局变量是会话持续存在的变量。他们使用内存就像任何其他plsql变量,但当然,该内存持续不只是一个调用。

如果您暗示可能将10000万行存储在plsql变量 (全局或其他) 中,那么您需要关注您的PGA使用情况。对于一次性运动,可能很好…… 但显然不适合数百次都做同样的事情。

SQL> set serverout on
SQL> declare
  2    type biglist is table of dba_objects%rowtype
  3      index by pls_integer;
  4    b biglist;
  5
  6  begin
  7    select * bulk collect into b
  8    from dba_objects;
  9
 10    dbms_output.put_line('rows = '||b.count);
 11
 12    for i in (
 13      select  st.value
 14      from v$statname s, v$mystat st
 15      where st.statistic# = s.statistic#
 16      and s.name = 'session pga memory'
 17    ) loop
 18       dbms_output.put_line('pga = '||i.value);
 19    end loop;
 20  end;
 21  /
rows = 77926
pga = 121082920

PL/SQL procedure successfully completed.

SQL>
SQL> set serverout on
SQL> declare
  2    type biglist is table of dba_objects%rowtype
  3      index by pls_integer;
  4    b biglist;
  5
  6  begin
  7    select d.* bulk collect into b
  8    from dba_objects d, ( select 1 from dual connect by level <= 6 );
  9
 10    dbms_output.put_line('rows = '||b.count);
 11
 12    for i in (
 13      select  st.value
 14      from v$statname s, v$mystat st
 15      where st.statistic# = s.statistic#
 16      and s.name = 'session pga memory'
 17    ) loop
 18       dbms_output.put_line('pga = '||i.value);
 19    end loop;
 20  end;
 21  /
rows = 467556
pga = 710251560

PL/SQL procedure successfully completed.
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论