sort_area_size
oracle不建议设置sort_area_size参数。除非实例被配置成了共享服务器模式。默认值已经足够满足大多数OLTP系统。如果是OLAP、批任务、创建大的索引,可能需要作出相应的调整。
oracle建议通过设置pga_aggregate_size后自动配置sql工作区的大小。

sort_area_size参数指定了oracle用于排序操作的最大可用内存。排序结束后,在返回数据行之前,oracle会释放所有分配给sort操作的内存,但是不会释放sort_area_retained_size设定的内存。在返回所有行之后,再释放这部分内存。

增加sort_area_siz,可以提升大排序操作的效率。

一个查询中的每个排序操作最多可以使用到sort_area_size指定的内存大小,一个查询中可能有多个排序操作。如果是并行查询,每个并行奴隶进程最多可以使用到sort_area_size指定大小的内存。

sort_area_size的内存,也可以用于插入和更新位图索引。如果设置合适,可以使得每个DML操作只更新一次位图段,即使位图段中被更新的行大于一行。

sort_area_size设置比较大的话,可以支持更多的内存中排序。如果排序内容超出排序内存,便会借助磁盘完成操作。

sort_area_retained_size
该参数默认是0,即动态分配。如果没有显式设置该参数,oracle通常使用参数sort_area_size。

oracle不建议设置sort_area_retained_size参数。除非实例被配置成了共享服务器模式。oracle建议通过设置pga_aggregate_size后自动配置sql工作区的大小。

sort_area_retained_size参数被保留下来,只是为了向后兼容。

排序操作完成后,sort_area_retained_size的值表明从UGA中获取了多少的内存用于排序。当排序区域中的数据被读取结束后,这部分内存会被释放还给UGA,但是不会还给操作系统。

oracle可能会为每个查询分配多个排序空间,但通常每次只会有一个或两个排序操作发生,即使是很复杂的查询。有时也会有例外,需要其他排序操作。不过每个排序都有自己的排序内存空间。

若使用共享服务器模式,sort_area_retained_size从SGA中分配(UGA在SGA中),直到达到sort_area_retained_size的最大值;sort_area_size-sort_area_retained_size的差值从PGA中分配。

二者的关系
当在内存中执行sort的时候,内存按chunks进行分配,能分配的最大值是sort_area_size的值。

每分配一个chunk,都会检查已分配的内存值是否小于sort_area_retained_size的值。如果小于,就分配内存,且分配的内存在用户调用期间一直存在;如果已分配的内存大于sort_area_retained_size的值,也分配内存,只是在用户调用结束后,该部分内存就变成free状态的内存。

对于sort操作,first fetch(排序真正发生)会使用所有的sort_area_size,对于多出sort_area_retained_size部分的内存在fetch结束后就被释放。之后的fetch操作会继续使用sort_area_retained_size内存,直到游标被关闭,才会释放sort_area_retained_size的内存。

sort_area_retained_size的内存来源于UGA。

sort_area_size,sort_area_retained_size的更多相关文章

  1. sort_area_retained_size之tom解释

    sort_area_retained_size 摘录一段asktom中tom的解释,对sort内存分配的方式进行了描述: it will allocate up to sort_area_retain ...

  2. 关于Oracle的性能调整(一)

    Oracle Tuning的一些总结 关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA.PGA的优化设置,二是连接Oracle的应用程序以及SQL语句的优化 ...

  3. ocp 1Z0-043 61-130题解析

    61. You are working in an online transaction processing (OLTP) environment. You realize that the sal ...

  4. ORACLE数据库学习之数据库的优化

     数据库的优化 概述 影响数据库性能的因素包括:系统.数据库.网络. 数据库的优化包括:优化数据库磁盘I/O.优化回滚段.优化Rrdo日志.优化系统全局区.优化数据库对象. 监控数据库的性能: 在 ...

  5. Oracle Tuning (Oracle 性能调整)的一些总结

    Oracle Tuning (Oracle 性能调整)的一些总结 Oracle Tuning (Oracle 性能调整)的一些总结关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库 ...

  6. UGA,PGA

    tom认为UGA不包含 sort工作区,所以下面的图都是错误的 The UGA is, in effect, your session’s state. It is memory that your ...

  7. Oracle DBA面试突击题

    一份ORACLE DBA面试题 一:SQL tuning 类 1:列举几种表连接方式 答: Oracle的多表连接算法有Nest Loop.Sort Merge和Hash Join三大类,每一类又可以 ...

  8. Oracle内存全面分析

    Oracle内存全面分析 Oracle的内存配置与oracle性能息息相关.而且关于内存的错误(如4030.4031错误)都是十分令人头疼的问题.可以说,关于内存的配置,是最影响Oracle性能的配置 ...

  9. 【Oracle】体系结构

    1. 理解实例和数据库 ☞ 实例是一组后台进程和共享内存 ☞ 数据库是磁盘上存储的数据集合 ☞ 实例“一生”只能装载并打开一个数据库 ☞ 数据库可以由一个或多个实例(RAC)装载和打开 [oracle ...

随机推荐

  1. Python引用(import)文件夹下的py文件的方法

    Python的import包含文件功能就跟PHP的include类似,但更确切的说应该更像是PHP中的require,因为Python里的import只要目标不存在就报错程序无法往下执行.要包含目录里 ...

  2. VC++导出具有命名空间的函数

    问题现象 原因分析 解决的方法 1 问题现象 导出具有命名空间的函数和类.源码例如以下: 头文件MiniMFC.h namespace MiniMFC { __declspec(dllexport) ...

  3. ActiveMQ持久化方式

    ActiveMQ持久化方式 发表于8个月前(2014-09-04 15:55)   阅读(686) | 评论(0) 17人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点击免费学习 摘要  ...

  4. 获取js连接参数js_args

    获取js连接参数,如下以链接: <script src="js/jscript.js?skin=green" type="text/javascript" ...

  5. C#中RSA加密解密和签名与验证的实现

    RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔(Adi Shamir)和伦纳德•阿德曼(Le ...

  6. did not call through to super.onCreate()

    android.util.SuperNotCalledException: Activity {com.xkyiliao.xkhospital/com.xkyiliao.xkhospital.acti ...

  7. bootstrap设计站点中加入代码高亮插件

    这款插件的名字叫做google-code-prettify 使用该插件之前的效果: 使用插件之后的效果: 接下来说步骤: (1)下载两个文件 http://codecloud.sinaapp.com/ ...

  8. 字符串问题简述与两个基本问题的Java实现——判断二叉树拓扑结构关系与变形词

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6851631.html  (解题金句:其他问题字符串化,然后调用String类封装方法解决问题: 字符串问题数组 ...

  9. stardict dict url

    http ://download.huzheng.org/zh_CN/  tar -xjvf a.tar.bz2 -C /usr/share/stardict/dic 

  10. oracle 两个网络不通的远程数据库如何将一个库中的表数据导入到另一个库中?

      1.情景展示 本地可以直接连接2个不同的远程数据库: 两个数据库由于网络不通,无法建立DBLINK完成数据传输: 将A库中C表的数据插入到B库中C表,如何快速实现? 2.解决方案 通过kettle ...