sort_area_size,sort_area_retained_size

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。

时间: 2024-11-06 20:24:08

sort_area_size,sort_area_retained_size的相关文章

排序,分组和集合操作

排序操作 排序是计算机承担的最基本操作之一,尤其是在数据库处理领域,oracle也不例外.可能需要oracle排序数据的操作包括以下几种: (1)创建一个索引 (2)通过group by,unique或distinct关键字对数据进行分组或聚合 (3)因为使用order by子句使得数据按照排好的顺序返回 (4)使用排序合并方法联结表或结果集 (5)使用集合操作union,intersect或minus (6)执行特定的子查询 查询可能需要可观的资源,具体说明如下: CPU总是要消耗的.需要CP

千年不曾看懂《道德经》,直至有了《道德图》!--作者:南山空同

第一章:知道识易 本义: 道,可道,非常道.名,可名,非恒名.无名,天地之始:有名,万物之母. 故常无欲,以观其妙:常有欲,以观其徼.此两者同出而异名,同谓之玄,玄之又玄,众妙之门. 通述: 世间的一切规律,都是能够被掌握的,但这些规律,却是不断的发生变化的.我们可以通过一些表面现象,来认知这些规律,我们为了方便识别事物,会给他们命名,来加以区分,但这些名词所包括的内容,也并非一成不变的. 世间事物,本来是不需要通过命名来加以区分的,当我们给一些事物命名,是我们开始认识世间万物的起始.如果我们心

较复杂情况下小型数据库的数据迁移

虽然在操作之前作过一些测试,但主要考虑脚本的正确与否以及对数据库对象的影响.并没有完全在实际系统上运行.这也成为后来出现的一个问题没有预计到的根源.毕竟比较早的版本我没有用过:).那就是8.0.6的exp工具并支持到处数据到多个文件,file=file1,file2不能使用,而且也不清楚老的hp-unix是32位的时候支持大于2g的文件,而且8.0.6是否可以导出一个大于2G文件.后来出现问题之后经过查证系统支持,此避免使用磁带机或者文件压缩的方式(具体方法网络上有相关资料).   由于考虑到加

Oracle DBA面试突击题

一份ORACLE DBA面试题 一:SQL tuning 类 1:列举几种表连接方式 答:Oracle的多表连接算法有Nest Loop.Sort Merge和Hash Join三大类,每一类又可以分为三小类. 以Nest Loop为例: 传统的Nest Loop连接: 针对In.Exists优化的Semi Nest Loop: 专门针对Not In.Not Exists优化的Anti Nest Loop. Semi/Anti *** Join这几种也叫半连接. (可以补充一下这三个连接的不同之

oracle系统调优

在Oracle数据库系统中,起到调节作用的参数叫初始化参数,在Oracle 8i及以前的版本中,这些初始化参数记录在INITsid.ora文件中:而Oracle 9i/10g/11g中将这些参数记录在SPFILEsid.ora二进制文件中 基本参数:一组可调整的参数,如control_files,db_block_size,process 高级参数:一组精细调整的参数,如shared_servers 主要系统条优参数 参数 说明 buffer_pool_keep 保留池大小(从db_block_

ocp 1Z0-043 61-130题解析

61. You are working in an online transaction processing (OLTP) environment. You realize that the salary for an employee, John, has been accidentally modified in the EMPLOYEES table. Two days ago, the data was in the correct state. Flashback logs gene

关于Oracle的性能调整(一)

Oracle Tuning的一些总结 关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA.PGA的优化设置,二是连接Oracle的应用程序以及SQL语句的优化.做好这两个方面的优化,就可以使一套完整的Oracle应用系统处于良好的运行状态. 本文主要是把一些Oracle Tuning的文章作了一个简单的总结,力求以实际可操作为目的,配合讲解部分理论知识,使大部分具有一般Oracle知识的使用者能够对Oracle Tuning有所了解,并且能够根据实际情况

如何查询Oracle性能监控

1.监控等待事件select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*)from v$session_wait group by event order by 4; Lock wait occur when a session attempts to acquire a lock that is already held by another session. A sess

如何读懂 STATSPACK 报告 (转)

详细解读 STATSPACK 报告 1.报表头信息 2.实例负载档信息 ** (部分重要参数) 3.实例有效性信息 *** (全部) 4.TOP 5及其他等待事件信息 *** 5.SQL统计信息 *** (只确认部分语句, 我们自己写的) 对于一个特定的应用程序或者系统来讲,要调整优化其性能,最好的方法是检查程序的代码和用户使用的SQL语句.如果使用了 level5级别的snapshot, 那么statspack生成的报告就会显示系统中高负荷SQL语句(High Load SQL)的信息, 缺省