关于查询排序的空间使用问题

原创 2004年06月30日 12:53:00

在9i之前的版本

    针对每个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 所能容纳记录数至少大于排序记录数的 平方根。

    从 9i开始oracle用  PGA_AGGREGATE_TARGET  来取代了 关于 session 级别的一些设置,也就是说,当 workarea_size_policy  = AUTO 的时候,所有 *_area_size 都不在session级别设置了(仅仅针对dedicated模式的session而不针对 shared 模式),这些 session 共享数据库instance级别共同设置的  PGA_AGGREGATE_TARGET 

show parameters area

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
bitmap_merge_area_size               integer     1048576
create_bitmap_area_size              integer     8388608
hash_area_size                       integer     248576
sort_area_retained_size              integer     0
sort_area_size                       integer     124288
workarea_size_policy                 string      AUTO

并且各 session 使用 PGA_AGGREGATE_TARGET 遵循一个规则,那就是每个 session 使用空间不能超过 PGA_AGGREGATE_TARGET * 5%  ,若超过则使用 临时表空间

 

 

 

 

 

空间排序

                      空间排序(SPATIAL SORTING)    第四章讨论了渲染一个层次化结构的场景,场景中的物体绘制的顺序是由深度优先遍历所决定的,几乎所有的情况下,渲...
  • jaopen
  • jaopen
  • 2005年04月19日 08:59
  • 4430

排序问题——内部排序

1、排序的基本概念:假设含有n个记录的序列为{r1,r2,.....,rn},其相应的关键字分别为{k1,k2,..,..kn},需确定1,2,….,n的一种排列p1,p2,....,pn,使其相应的...
  • Din_Lei
  • Din_Lei
  • 2018年01月16日 18:48
  • 14

一个简单的排序面试题

* 一个小面试题: * There is an array 2,10,11,4,21,5,7,6,19,15,please sort them with below order * The m...
  • z507263441
  • z507263441
  • 2015年08月26日 11:29
  • 553

我遇到的一些问题的解决答案,有关于操作系统中的

:什么是中断? A:中断嘛,举个容易理解的例子吧。 比如莲莲和唐唐在下象棋,眼看莲莲就快招架不住了,正当此紧要关头,唐 唐的女友来了,非要唐唐陪她上街买衣服不可(唐唐晕倒:-) ),...
  • HyNeverGiveUp
  • HyNeverGiveUp
  • 2016年11月29日 22:26
  • 479

排序算法所用的辅助空间

题目:就排序算法所用的辅助空间而言,堆排序、快速排序和归并排序的关系是() A.堆排序 B.堆排序 C.堆排序>归并排序>快速排序 D.堆排序>快速排序>归并排序 答案:A ...
  • NumberOneOrNothing
  • NumberOneOrNothing
  • 2017年05月06日 21:20
  • 598

elasticsearch-查询平分排序

排序与相关性 默认情况下,返回的结果是按照 相关性 进行排序的——最相关的文档排在最前。 在本章的后面部分,我们会解释 相关性 意味着什么以及它是如何计算的, 不过让我们首先看看 sort ...
  • chuan442616909
  • chuan442616909
  • 2017年02月15日 10:25
  • 2126

Postgresql 地理位置操作

(longitude:经度 latitude:纬度 radius:范围/m) insert/update 地理位置: st_geomfromtext('point(longitude latit...
  • hzh254052917
  • hzh254052917
  • 2017年12月12日 22:35
  • 90

Hive优化----排序

hive 中的排序优化 在hive中进行字段排序统计过程中,使用ORDER BY是全局排序,hive只能通过一个reduce进行排序.效率很低,采用hive提供的distribute by +s...
  • csliuruidongdn
  • csliuruidongdn
  • 2014年01月08日 16:10
  • 1152

sql语句 不让结果排序,按照in语句的顺序返回结果

问题引入,假如有一张数据表结构如下: 现在的需求是:查找id为7,10,2,1,5的记录,并让结果按in的顺序输出来,也就是说,结果集转换成二维数组后,二维数组里面的一维数组里的id分别是7,10...
  • zls986992484
  • zls986992484
  • 2017年04月04日 22:28
  • 842

ASM 剩余空间查询

方法一: oracle用户登录节点1数据库服务器执行命令: -> export ORACLE_SID=+ASM1 -> asmcmd ASMCMD> lsdg State    Type    Reb...
  • hkyw000
  • hkyw000
  • 2013年08月27日 11:48
  • 1326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于查询排序的空间使用问题
举报原因:
原因补充:

(最多只允许输入30个字)