ホームページ データベース mysql チュートリアル select语句的结果集可能会存放在pga的UGA区域以及对DML语句中的d

select语句的结果集可能会存放在pga的UGA区域以及对DML语句中的d

Jun 07, 2016 pm 03:48 PM
select 結果 声明

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 AREAPL/SQL AREASORT 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操作为哈希连接、排序等。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Select Channels Goの非同期処理方法 golangを使った並行プログラミング Select Channels Goの非同期処理方法 golangを使った並行プログラミング Sep 28, 2023 pm 05:27 PM

golang を使用した SelectChannelsGo 同時プログラミングの非同期処理方法 はじめに: 同時プログラミングは、アプリケーションのパフォーマンスと応答性を効果的に向上させることができる、現代のソフトウェア開発における重要な領域です。 Go 言語では、Channel と Select ステートメントを使用して同時プログラミングを簡単かつ効率的に実装できます。この記事では、SelectChannelsGo 同時プログラミングの非同期処理メソッドに golang を使用する方法を紹介し、具体的な方法を提供します。

jqueryでselect要素を非表示にする方法 jqueryでselect要素を非表示にする方法 Aug 15, 2023 pm 01:56 PM

jquery で select 要素を非表示にする方法: 1. hide() メソッド。jQuery ライブラリを HTML ページに導入します。さまざまなセレクターを使用して select 要素を非表示にできます。ID セレクターは、selectId を選択した select 要素の ID に置き換えます。実際に使用する; 2. css() メソッド、ID セレクターを使用して非表示にする必要がある select 要素を選択し、css() メソッドを使用して表示属性を none に設定し、selectId を select 要素の ID に置き換えます。

jQueryで選択要素の変更イベントバインディングを実装する方法 jQueryで選択要素の変更イベントバインディングを実装する方法 Feb 23, 2024 pm 01:12 PM

jQuery は、DOM 操作、イベント処理、アニメーション効果などを簡素化するために使用できる人気のある JavaScript ライブラリです。 Web 開発では、選択した要素のイベント バインディングを変更する必要がある状況によく遭遇します。この記事では、jQuery を使用して選択要素変更イベントをバインドする方法を紹介し、具体的なコード例を示します。まず、ラベルを使用してオプションを含むドロップダウン メニューを作成する必要があります。

Linux が select を使用する理由は何ですか? Linux が select を使用する理由は何ですか? May 19, 2023 pm 03:07 PM

select を使用すると、開発者は複数のファイル バッファーを同時に待機できるため、IO 待機時間を短縮し、プロセスの IO 効率を向上させることができます。 select() 関数は、プログラムが複数のファイル記述子を監視し、監視されている 1 つ以上のファイル記述子が「準備完了」になるのを待機できるようにする IO 多重化関数です。いわゆる「準備完了」状態とは、ファイルを指します。記述子はブロックされなくなり、読み取り可能、書き込み可能、​​例外を含む特定の種類の IO 操作に使用できるようになりました。 select は、ヘッダー ファイル #include にあるコンピューター関数です。この関数は、ファイル記述子の変更 (読み取り、書き込み、または例外) を監視するために使用されます。 1. セレクト機能の概要 セレクト機能はIO多重化機能です。

mysqlのselect構文の使い方 mysqlのselect構文の使い方 Jun 01, 2023 pm 07:37 PM

1. SQL ステートメント内のキーワードは大文字と小文字を区別せず、SELECT は SELECT と同等、FROM は from と同等です。 2. users テーブルからすべての列を選択するには、記号 * を使用して列名を置き換えます。構文 -- これはコメントです -- FEOM で指定された [テーブル] から [すべての] データをクエリします * は [すべての列] を意味します SELECT*FROM -- 指定された [テーブル] から指定されたデータを FROM データからクエリします列名 (フィールド) SELECT 列名 FROM テーブル名 インスタンス -- 注: 複数の列を区切るには英語のカンマを使用してください。 selectusername、passwordfrom

選択チャネルの実装 golang による同時プログラミングのパフォーマンス最適化 選択チャネルの実装 golang による同時プログラミングのパフォーマンス最適化 Sep 27, 2023 pm 01:09 PM

golang による SelectChannels の実装 Go 同時プログラミングのパフォーマンスの最適化 Go 言語では、ゴルーチンとチャネルを使用して同時プログラミングを実装するのが非常に一般的です。複数のチャネルを扱う場合、通常は多重化に select ステートメントを使用します。ただし、大規模な同時実行の場合、select ステートメントを使用するとパフォーマンスが低下する可能性があります。この記事では、golang による select の実装をいくつか紹介します。

チャンネルを選択 Golang を使用して信頼性と堅牢性を実現する同時プログラミングを実行する チャンネルを選択 Golang を使用して信頼性と堅牢性を実現する同時プログラミングを実行する Sep 28, 2023 pm 05:37 PM

Golang を使用した信頼性と堅牢性のための SelectChannels 同時プログラミングの概要: 最新のソフトウェア開発では、同時実行性が非常に重要なトピックになっています。並行プログラミングを使用すると、プログラムの応答性が向上し、コンピューティング リソースがより効率的に利用され、大規模な並列コンピューティング タスクをより適切に処理できるようになります。 Golang は非常に強力な同時プログラミング言語であり、go コルーチンとチャネル メカニズムを通じて同時プログラミングを実装するためのシンプルかつ効果的な方法を提供します。

PHP8.0のmulti-catch文 PHP8.0のmulti-catch文 May 14, 2023 pm 01:51 PM

Web アプリケーションの開発に伴い、PHP 言語は Web 開発で広く使用されています。 PHP8.0 バージョンでは、新しい言語機能である multi-catch ステートメントが導入されました。マルチキャッチステートメントとは何ですか?以前の PHP バージョンでは、開発者は複数の例外タイプを処理するために複数の catch ステートメントを作成する必要がありました。たとえば、次のコード ブロックは 2 つの異なる例外の処理を示しています。

See all articles