`

关于排序、sort_area_size、临时表空间

 
阅读更多

简单陈述一下:

针对每个session,排序首先会使用sort_area_size ,如果不足则会使用临时表空间。但这里面又到底是怎么一个过程呢?下面阐述一下,也许对大家有用处(如果有什么不清楚或者不恰当的地方欢迎大家探讨)

假设sort_area_size = 100k,正好能盛下100条记录进行排序

当排序记录小于等于100条,ok,所有排序在内存中进行,很快
但若超过100条,则会使用临时表空间(利用磁盘进行)
我们选取一个临界值来说明,假设需要排序的记录有10010条

这个时候我们进行的排序会分为101组进行
每读100条进行一次小组排序,然后写入磁盘,第101组只有10条,排序后也写入磁盘

这是进行第二次排序,这次排序将在前100小组里面各抽取一条进行排序。《按照我个人的猜测,应该是排好后每写入一条入磁盘则将该记录所在小组重新抽取一条出来进行排序(这时是有序记录组里面所以很快)》。当这个过程完成后,这时所需要的磁盘空间大约为  实际记录存储空间的2倍(这也是多数书上提到的排序空间大约是记录空间的2倍的原因)

由于还剩下10条记录,于是这10条记录需要跟前面排序的10000条记录进行排序合并,这个代价也是相当大的!

所以,我们通常推荐,假如你需要排序的记录最大为100万条,则sort_area_size最小要能装下1000条,否则如上面的例子,那多余的10条,仅仅10条将会带来巨大的代价!

如果,设置的极度不合理的情况下,排序记录达到了 sort_area_size所能容纳的三次方以上,比如上面例子中排序需要100万记录
那么同样的,重复这个过程,当每一万条记录如上排序后,再如上从这100小组(每组10000条记录)各抽一条进行排序……

在这个过程中,磁盘的消耗和时间的代价大家都应该有个感性认识了
所以,我们建议:  sprt_area_size 所能容纳记录数至少大于排序记录数的 平方根

分享到:
评论

相关推荐

    不要让临时表空间影响数据库性能

    然而,当排序区的空间不足时,Oracle会将超出内存容量的临时数据存储到临时表空间中。 临时表空间在数据库操作中扮演着关键角色,尤其是在处理复杂查询和大型数据集时。虽然看似只是临时存储,但实际上它对数据库...

    解决临时表(undo)空间过大问题

    在Oracle数据库环境中,临时表空间是用来存储临时段的,这些临时段主要是在执行排序、连接、GROUP BY等操作时产生的。当临时表空间过大时,可能会导致数据库性能下降,甚至出现空间耗尽的问题。以下是一些解决临时表...

    如何解决Oracle8i数据库临时表空间满的问题.pdf

    - 设置合理的排序区域大小:通过调整初始化参数“SORT_AREA_SIZE”和“SORT_AREA_RETAINED_SIZE”,可以有效控制每个会话使用临时表空间的大小,防止临时表空间的过度占用。 - 监控临时表空间的使用:通过数据库的...

    浅谈Oracle优化排序的操作

    如果排序所需的空间超过了`sort_area_size`的大小,那么排序操作将会转移到临时表空间中进行。在专用服务器模式下,排序所需的内存空间位于程序全局区(PGA);而在共享服务器模式下,排序空间则位于用户全局区(UGA...

    Oracle外排序研究

    当排序操作所需的内存空间超过`SORT_AREA_SIZE`参数所设定的值时,Oracle数据库将不得不在临时表空间中进行磁盘排序,即所谓的“外排序”。这种情况下,数据库性能会显著下降,原因如下: 1. **磁盘排序速度远低于...

    Oracle外排序研究.pdf

    Oracle外排序是数据库管理系统中处理大量数据排序的一种方法,尤其在数据量超出内存容量时,Oracle会利用硬盘上的临时表空间进行数据的排序操作,即所谓的"外排序"。外排序相比内存排序效率低,因为它涉及到更多的...

    Oracle对排序操作的优化措施

    - **非理想情况:** 如果排序数据超过了排序区的大小限制,则Oracle不得不将这部分数据转移到磁盘上的临时表空间进行排序,这将大大降低性能。 **2.3 调整排序区大小的方法** - **初始化参数SORT_AREA_SIZE:** ...

    oracle temp表空间不足解决方法

    - 调整 sort_area_size 和 sort_area_retained_size 参数,控制排序操作在内存中完成,减少对Temp表空间的依赖。 8. **规划与容量管理**: - 定期评估:定期评估数据库的业务增长和性能需求,预测Temp表空间的...

    Best Practice--排序段的使用

    此外,每次磁盘排序完成后,占用的临时表空间并不会立即释放,而是保留以便下次排序使用,这可能导致临时表空间的可用空间逐渐减少,当空间耗尽时,Oracle会自动扩展(extent),进一步浪费资源。 在EDR4.0.2测试中...

    阿里巴巴公司DBA笔试题.doc

    10. **排序内存调整与临时表空间**:在Oracle 8i中,排序内存由`sort_area_size`和`sort_area_retained_size`控制,溢出到临时表空间。在9i中,如果`workarea_size_policy`为`auto`,排序在PGA内存中进行,而`manual...

    ORACLE-排序优化[归纳].pdf

    内存排序是在PGA(Program Global Area)中的sort area进行,当数据量超出内存限制时,Oracle会将数据写入临时表空间进行磁盘排序。内存排序速度快但受内存大小限制,而磁盘排序虽然慢,但能处理大数据量。 排序...

    关于SQL执行计划错误导致临时表空间不足的问题

    5. **数据库参数调整**:检查并调整数据库参数,比如`SORT_AREA_SIZE`,以适应查询的需求。 6. **分析与统计信息**:确保数据库已进行了充分的分析,以便优化器能够做出准确的执行计划。 7. **分区策略**:如果表...

    阿里巴巴DBA笔试题

    12. 临时表空间的作用:临时表空间主要用于完成系统中的disk sort操作。 十三、SQL编写 12. 取第21-30条记录的SQL语句:可以使用ROWNUM和SUBQUERY来实现,例如:CREATE TABLE t(a NUMBER, ...); SELECT * FROM ...

    Performance Tuning --oracle 9i 性能调整与优化

    如果排序区溢出到临时表空间,可能需要增大`SORT_AREA_SIZE`或调整临时表空间设置。 在进行这些调整时,需要密切关注系统的性能指标,如CPU利用率、I/O延迟、内存使用情况等。此外,还可以使用Oracle的自动工作负载...

    数据库参数设置技术手册.doc

    13. **SORT_AREA_SIZE**:排序操作的内存分配大小,如果超出会溢出到临时表空间。 14. **JAVA_POOL_SIZE**、**LARGE_POOL_SIZE** 和 **HASH_POOL_SIZE**:分别用于Java对象、大对象I/O和哈希连接操作的内存池。 15...

    oracle在线创建索引和重组索引

    在重组索引前,需要确认重组以后的索引所在的表空间是否有足够的空间,以及是否有足够的临时表空间用于排序。 重组索引的 SQL 语句为: ```sql alter index index_name rebuild [tablespace tbs_index2] online ...

    计算机等考三级数据库基础:哪些初始化参数最影响Oracle系统性能.docx

    增加`sort_area_size`可以减少排序操作溢出到临时表空间的几率,提高排序效率。 `processes`参数限制了同时连接到数据库的进程数。适当调整此值可以平衡并发用户数与系统资源之间的关系,防止过多进程导致系统资源...

    ORACLE 10学习资料5

    例如,如果`SORT_AREA_SIZE`设为512KB,`SORT_AREA_RETAINED_SIZE`设为256KB,那么服务器进程最初处理查询时会用512KB的内存对数据进行排序,排序完成后,该区域会缩小到256KB,超出的部分会被写入临时表空间。...

    Oracle复习总结

    11. **排序内存调整与临时表空间**:在Oracle 8i中,sort_area_size和sort_area_retained_size控制排序内存,若超出,则使用临时表空间进行磁盘排序。9i引入了workarea_size_policy,当设置为auto时,排序在PGA内存...

Global site tag (gtag.js) - Google Analytics