全局临时 Table space 分配是否发生在会话开始时?

Is Global Temporary Table space allocation occurs in session start?

我在 Donald Burleson=>
中找到了此信息 请注意,所有全局临时 table 行在溢出到 TEMP tablespace 之前直接进入 PGA 工作区,如果可以执行操作,Oracle 不会创建临时段在记忆中。但是,如果 PGA RAM 分配用完,那么数据库会自动在磁盘上分配一个临时段。
这是否意味着 space 分配不会发生在使用第一个 PGA 的会话启动时?
需要专家意见。

(在典型配置中)连接到数据库的每个会话都获得其 自己的 PGA 内存。因此,每个会话都可以拥有自己的全局临时数据 table(即使 table 只定义了一次)。

Session 1

SQL> create global temporary table GTT
  2   ( x int, y int )
  3  on commit preserve rows;

Table created.

SQL> insert into gtt values (1,2);

1 row created.

Session 2

SQL> select * from gtt;

no rows selected

每个会话都有自己的 "instantiation" 个 table,并且它们的数据单独进入该会话的内存区域。所以在上面,会话 1 将为其 2 行消耗一些字节的 PGA,而会话 2 将不为其空 table.

消耗任何字节

在任何一种情况下,数据都会进入内存,直到数据库确定该会话 消耗了太多 PGA 。然后会话 数据将开始占用磁盘上的一个临时段。假设限制是“1 行”(显然更多),那么在上面的示例中,会话 1 将开始转储到磁盘而会话 2 不会。

希望能帮助澄清事情。

根据我的理解,问题是询问会话何时开始全局临时表发生了什么,它没有说开始会话和事务。 当您登录到您的帐户时,Oracle 会生成新会话 (SID),并且全局临时表在注销或 commit/rollback 后将为空,因此我认为它不会仅在登录后分配 space。