例如我有以下代码:
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?)?当它清理记忆?
答案 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)