会话启动时是否发生全局临时表空间分配?

我在Donald Burleson =>
中找到了此信息 请注意,所有全局临时表行在溢出到TEMP表空间之前都直接进入PGA工作区,并且如果可以在内存中执行操作,Oracle不会创建临时段。但是,如果PGA RAM分配用尽,则数据库会自动在磁盘上分配一个临时段。
这是否意味着在使用第一个PGA的会话开始中不会发生空间分配?
需要专家的意见。

mmaiyy02 回答:会话启动时是否发生全局临时表空间分配?

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

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

每个会话都有自己的表“实例化”,并且它们的数据仅进入该会话的存储区。因此,在上面,会话1将为它们的2行占用一些PGA字节,而会话2为其空表将不占用任何字节。

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

希望可以帮助澄清问题。

本文链接:https://www.f2er.com/3153884.html

大家都在问