甲骨文。对象实例的内存使用情况

时间:2015-08-26 12:39:23

标签: oracle oracle11g

例如我有以下代码:

CREATE TYPE t_object IS OBJECT (field1 NUMBER
                               ,field2 VARCHAR2(10));
/
DECLARE
  v_object t_object;
BEGIN
  FOR i IN 1 .. 3000000 LOOP
    v_object := NEW t_object(i, to_char(i));
  END LOOP;
END;

如果我理解正确,在每次迭代时,oracle都会创建新的对象实例。但oracle如何为每个创建的实例分配内存? oracle存储这些实例的地方(PGA?)?当它清理记忆?

1 个答案:

答案 0 :(得分:1)

PL / SQL变量在PGA中分配,因为每个执行的实例都有自己的一组值。 PL / SQL中的对象具有明确定义的范围,因此它们在保留范围时被销毁,离开函数/过程时被破坏,当会话终止时被全局变量破坏。您可以监控流程' PL / SQL内存使用

SELECT
    PROGRAM,
    SPID,
    ROUND(ALLOCATED / 1048576, 1) ALLOCATED,
    ROUND(USED / 1048576, 1) USED,
    ROUND(MAX_ALLOCATED / 1048576, 1) MAX_ALLOCATED
FROM
    V$PROCESS P,
    V$PROCESS_MEMORY PM
WHERE
    P.PID = PM.PID
    AND BACKGROUND IS NULL
    AND CATEGORY = 'PL/SQL'
    AND ADDR = (SELECT PADDR FROM V$SESSION WHERE SID = :SID)