全局临时 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。
我在 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。