oracle 临时 表空间,Oracle临时表空间

本文详细解析Oracle在执行SQL时如何利用临时表空间,包括临时表索引操作、内存排序与磁盘排序,以及临时LOB对象的存储。通过实例展示sort_area_size设置变化对排序策略的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当 Oracle 在执行一些 SQL 时,会需要一些临时空间来存储执行时产生的中间数据。这些临时空间由 Orac le

从指定的临时表空间中分配给进程。主要有三种情况会占用临时空间:临时表/索引操作、排序和临时 LO B

对象操作。

A.临时表/索引:

在会话中,当第一次对临时表进行 INSERT(包括 CTAS)时 ,Orac le 会从临时表空间中为临时表

及其索引分配临时空间一存储数据。

B.排序:

任何会使用到排序的操作,包括 JOIN、创建(重建)INDEX、ORDER  BY、聚合计算(GROUP

BY)以及统计数据收集,都可能使用到临时表空间。排序操作首先会选择在内存中的 Sort  Area

进行(Sort  In  Memory),一旦 Sort Area 不足,则会使用临时空间进行排序操作(Sort In  Disk)。

看下面的例子:

SQL> alter session set sort_area_size = 10000000;

Session altered.

SQL> select owner, object_name from t_test1 order by objec t_id;

47582 rows selected.

Exec ution Plan

Plan hash value : 1312425564

Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 47582 | 1486K| 155 (4)| 00:00:02 |

| 1 | SORT ORDER  BY | | 47582 | 1486K| 155 (4)| 00:00:02 |

| 2 | TABLE ACCESS FULL| T_TEST1 | 47582 | 1486K| 150 (1)| 00:00:02 |

Statistics

1 recursive calls

0 db block gets

658 c onsistent gets

0 physic al reads

0 redo size

1566184 bytes sent via SQL*Net to c lient

35277 bytes received via SQL*Net from client

3174 SQL*Net roundtrips to/from c lient

1 sorts (memory)

0 sorts (disk)

47582 rows processed

SQL> alter session set sort_area_size = 10000;

Session altered.

SQL> select owner, object_name from t_test1 order by objec t_id;

47582 rows selected.

Exec ution Plan

Plan hash value : 1312425564

| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time|

| 0 | SELECT STATEMENT | | 47582 | 1486K| | 1251 (1)| 00:00:16 |

| 1 | SORT ORDER  BY | | 47582 | 1486K| 4136K| 1251 (1)| 00:00:16 |

| 2 | TABLE ACCESS FULL| T_TEST1 | 47582 | 1486K| | 150 (1)| 00:00:02 |

Statistics

6 recursive calls

20 db bloc k gets

658 c onsistent gets

629 physical reads

0 redo size

1566184 bytes sent via SQL*Net to c lient

35277 bytes received via SQL*Net from client

3174 SQL*Net roundtrips to/from c lient

0 sorts (memory)

1 sorts (disk)

47582 rows processed

C.临时 LOB 对象:

LOB 对象包括 BLOB、CLO B、NCLOB、和 BFILE。在 PLSQL 程序块中,如果定义了 LOB 变量,

则这些 LOB 变量就是临时 LOB 对象。临时 LOB 对象被创建在临时表空间上,直到 LOB 数据被

释放,或者会话结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值