select语句的结果集可能会存放在pga的UGA区域以及对DML语句中的d
select语句的结果集可能会存放在pga的UGA区域 问: oracle执行select操作,返回的结果集存放在什么位置?结果集中保存的是rowid集合还是真实的数据?返回的结果集是放在PGA区域么?如果返回的是真实的数据,那么如果数据量过大会不会造成内存溢出?请各位高
select语句的结果集可能会存放在pga的UGA区域
问:oracle执行select操作,返回的结果集存放在什么位置?结果集中保存的是rowid集合还是真实的数据?返回的结果集是放在PGA区域么?如果返回的是真实的数据,那么如果数据量过大会不会造成内存溢出?请各位高手解答
答:
If it's a simple select * from table, the data goes straight to the client. If the SQL has some intermediate steps for data processing,such as select count(*) from table,
UGA will be used. In dedicated config, UGA is part of PGA.
Of course the data blocks will be scanned into SGA (buffer cache specifically), unless it's a direct path read. Your original question is whether the data will be in PGA. I already answered that. But no matter whether it's select *... or select count(*)
..., the table data must go to the buffer cache first (except for parallel read, and a few other special cases of direct path read).
Yong Huang
即对于直接获取的数据,没有必要额外存放,数据已经在那里(buffer cache, logical read/disk,phisical read logical read)
对于中间结果,例如Huang版说的,或者,排序结果、数组之类的,应该在PGA或磁盘中
参考:
http://www.itpub.net/thread-1505871-1-1.html
谷歌 select语句结果集 pga
==================================================================================================================================
对DML语句中的db block gets direct理解
问:
从v$sysstat中可以看到db block gets由db block gets from cache和db block gets direct构成.
前者很好理解,后者的含义是:"Number of times a CURRENT block was requested bypassing the buffer cache"
那么为什么要bypassing the buffer cache呢?
是因为在buffer cache中找不到吗?如果是因为在buffer cache中找不到,所以才bypassing buffer cache而到磁盘上找,那么db block gets direct的数量 + consistent gets direct的数量,就应该等于physical reads的数量,但实际确非如此,为什么呢?谢谢
答:
buffer cache的目的是什么呢?
如果你需要读取的block不适合,设buffer cache的目的甚至违背了其初衷。
那是不是应该bypassing buffer cache呢?
也就是说,一般情况下,要读一个block,都是“应该先到buffer cache中去找,找不到再从磁盘上找到,并先放到buffer cache中,以备下次需要时能直接从buffer cache中找到”的。
但是,有时候数据会被读到PGA中的,即如果大量数据要被读入,而且不会复用,那么读到buffer cache中就不合适了。
问:
这个bypassing buffer cache,是说的直接bypassing buffer cache,直接到磁盘上找; 还是说先到buffer cache中找不到而被迫到磁盘上找,然后找出来的block不放到buffer cache中去呢?
答:bypassing buffer cache直接到磁盘上找。
疑问:
关于db block gets direct
db block gets (from cache)是buffer cache中的current mode gets,
那么db block gets direct应该是pga中的current mode gets吧?
(执行DML语句时发生db block gets direct,则数据文件上的数据块直接存放到pga上的,所以应该是如此吧)
没有找到正式的说法
参考:
http://www.itpub.net/forum.php?mod=viewthread&tid=963118&highlight=
百度 db block gets direct
http://blog.itpub.net/7608831/viewspace-693190/ =
http://oracle.zwcoom.com/Oracle/Oracleguanli/20100312/143435.html
附加
1.3 CGA(调用全局区)的相关概念
CGA也是一块内存区域,但它是动态的,即随着调用(call)的开始而创建,在调用过程中一直存在,直到调用结束时被释放。它存放的是在调用过程中所需要的数据。
我们知道,调用主要包括解析(parse)调用、执行(executive)调用、获取(fetch)调用以及递归SQL调用和PL/SQL调用。从调用的种类可以看出,实际上在调用过程中所需要的数据,比如SQL AREA,PL/SQL AREA和SORT AREA基本都是放在UGA中的,因为这些数据在各个调用之间必须一直存在并可用。而在CGA中只存放了在调用过程中临时需要的数据,比如直接I/O缓存(Direct I/O Buffer)以及堆栈空间等数据结构。因此,没有CGA中的数据结构,调用是无法完成的。
注意,CGA不象UGA可以位于SGA中(以共享服务器模式连接),CGA一定是位于PGA中的。如果当前进程正在运行,则每个PGA中只有一个CGA。如果当前进程没有运行,则该进程的PGA中就没有CGA。
上述说明,sql语句并行化查询时,产生的direct path read,是将数据文件上的数据读取到的pga上的cga这个区域的。
SQL操作指的不是一条SQL语句,而是其中的一个操作。如,需要sql工作区的SQL操作为哈希连接、排序等。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

使用golang进行SelectChannelsGo并发式编程的异步处理方法引言:并发式编程是现代软件开发中的一个重要领域,它可以有效地提高应用程序的性能和响应能力。在Go语言中,使用Channels和Select语句可以简单而高效地实现并发编程。本文将介绍如何使用golang进行SelectChannelsGo并发式编程的异步处理方法,并提供具体的

jquery隐藏select元素的方法:1、hide()方法,在HTML页面中引入jQuery库,可以使用不同选择器来隐藏select元素,ID选择器将selectId替换为你实际使用的select元素的ID;2、css()方法,使用ID选择器选择需要隐藏的select元素,使用css()方法将display属性设置为none,并将selectId替换为select元素的ID。

jQuery是一个流行的JavaScript库,可以用来简化DOM操作、事件处理、动画效果等。在web开发中,经常会遇到需要对select元素进行改变事件绑定的情况。本文将介绍如何使用jQuery实现对select元素改变事件的绑定,并提供具体的代码示例。首先,我们需要使用标签来创建一个包含选项的下拉菜单:

因为select可以使开发者在同时等待多个文件缓冲区,可减少IO等待的时间,能够提高进程的IO效率。select()函数是IO多路复用的函数,允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态;所谓的”准备好“状态是指:文件描述符不再是阻塞状态,可以用于某类IO操作了,包括可读,可写,发生异常三种。select是一个计算机函数,位于头文件#include。该函数用于监视文件描述符的变化情况——读写或是异常。1.select函数介绍select函数是IO多路复用的函

1、SQL语句中的关键词对大小写不敏感,SELECT等效于SELECT,FROM等效于from。2、从users表中选择所有列的,可以用符号*代替列的名称。语法--这是注释--从FEOM指定的[表中],查询出[所有的]数据.*表示[所有列]SELECT*FROM--通过从FROM从指定的[表中],查询出指定列名称(字段)的数据SELECT列名称FROM表名称实例--注意:多个列之间,使用英文的逗号来分隔selectusername,passwordfrom

通过golang实现SelectChannelsGo并发式编程的性能优化在Go语言中,使用goroutine和channel实现并发编程是非常常见的。而在处理多个channel的情况下,我们通常会使用select语句来进行多路复用。但是,在大规模并发的情况下,使用select语句可能会导致性能下降。在本文中,我们将介绍一些通过golang实现select

使用Golang实现可靠性和鲁棒性的SelectChannelsGo并发式编程引言:在现代软件开发中,并发性已经成为了一个非常重要的主题。使用并发编程可以使得程序更具有响应性、更高效地利用计算资源,并且能够更好地处理大规模的并行计算任务。Golang是一种非常强大的并发编程语言,它通过go协程和channel机制,提供了一种简单而有效的方式来实现并发编程

随着Web应用程序的发展,PHP语言在Web开发中得到了广泛应用。而在PHP8.0版本中,一个新的语言特性被引入——multi-catch语句。什么是multi-catch语句?在先前的PHP版本中,对于多个异常类型的处理,开发人员需要写多个catch语句。例如,如下代码块展示了对两种不同异常的处理:try{//Somecodethatmay
