rink_rewさんの投稿一覧

助け合いフォーラムの投稿
2024/05/17 コメント
「Oracle Database 12cで利用可能なメモリー管理方法の説明」について
> ⇒確かにそのような説明がありますね。 > 前提としてこの説明欄の内容は各メモリ管理方法が有効になっているという場合という理解でよろしいでしょうか。 はい、そのように考えて良いと思います。 この表の「説明」列には、その設定を有効にする方法(どのパラメータを設定するか)と、有効にした場合の挙動、が書かれています。
2024/05/15 返信
「Oracle Database 12cで利用可能なメモリー管理方法の説明」について

ご提示のURLに私はアクセスできなかったので、どの図のことはわからないのですが、もし、メモリー管理方法として4つ列挙されている表のことでしたら、「説明」の列に※PGAは自動PGAメモリー管理となると記載があるので、その部分ですかね。
うろ覚えですが、以前にどこかの書籍かマニュアル・ドキュメント類で「自動共有メモリー管理を有効にすると、自動PGAメモリー管理が暗黙的に有効になる」みたいな記載があったような気がしますが、ちょっと正確に覚えてません。※私が取得したのは古いバージョンのOracle Masterなので、すみません。

この表現の意味するところは、おそらく、初期化パラメータとしてPGA_AGGREGATE_TARGETが自動的に設定されるわけではないが、V$PARAMETERビューやEnterprise Manager上は表示される、というような意味で「暗黙的」とされていたのかなと、今更になって改めて思いました。
公式マニュアルをざっとみてみましたが明確に記載されている箇所は見つけることができなかったので、この内容が実際の試験で出題されるのかは、なんとも言えない気がします...。

2024/05/14 コメント
SELECT文の実行時の処理の流れについて
別の問題ですが、問題ID:29541にSGAや共有プールの解説がありましたので、こちらも参照してみると良いかもしれません。 ▼問題ID: 29541 ---------------------------------------- [共有プール] 共有プールは、実行されたSQLやその解析結果、データ・ディクショナリ(データベースに関する様々な管理情報が格納された読取り専用の表)の情報などを保持する領域です。 Oracle Databaseでは、SQL文を実行する際、構文に誤りはないか、指定された表が存在するか、アクセス権はあるか等、SQL文の解析作業を行いますが、解析作業にはそれなりのCPUリソースを消費します。そこで、SQL文の解析結果を共有プールにキャッシュし、次に同じSQL文が実行される際に共有プールから情報を取り出し、処理の高速化や、リソースの浪費を防ぐために使用されます。共有プールのサイズを増やせば、より多くのSQL文をキャッシュできます。 なお、共有プールの情報は他のユーザーと共有されます。 ----------------------------------------
2024/05/14 コメント
SELECT文の実行時の処理の流れについて
> 「受け取ったSQL文」というのはその前の文章にある(「サーバープロセスがユーザープロセスからSQL文を受け取った後」)サーバープロセス側が受け取るSQLを指していると思いますが、 はい、ご認識の通りです。 > 「一致するSQL文」というのは一体いつから共有プールに存在しているのでしょうか。 「一致するSQL文」は、過去に実行されたSQL文のことをさしています。Oracleデータベースでは、一度実行されたSQL文やその解析結果の情報が、SGAの共有プール内に保持され、将来、同一のSQL文がユーザープロセスから発行された場合に、この共有プール内に「過去に実行されて解析済みのSQLの情報があるか」を確認します。 これらは、共有プールのサイズが不足すると古いものから削除されていきます。※パラメータの設定などで多少挙動の変更は可能。
2024/05/12 返信
SELECT文の実行時の処理の流れについて

[1]でSELECT文をサーバープロセスに送信していますが、その後、共有プールにそれが格納されているかどうかの確認をしています。何故でしょうか。格納されていないからユーザプロセスからSELECT文が送信されているのであって、格納されているのであればユーザプロセスからSELECT文を送信する必要はないと考えています。

そもそも、SQL文がユーザープロセス側からサーバープロセス側に送信されなければ、Oracleデータベース側は何もしませんし、何をしていいかもわかりません。ユーザープロセスからサーバープロセスに対してSQL文が送信されなければ、実行しようとしているSQL文がどのようなものか、サーバープロセスは知ることができません。ですので、共有プールにキャッシュされているSQL文と一致するかも確認しようがありません。

ユーザープロセスは、クライアントPC上で起動したSQLPlusのようなクライアントアプリケーションによって、クライアントPC側に生成されます。サーバープロセスは、サーバーマシン側に生成され(厳密にはリスナープロセスによって生成される)、ユーザープロセスからの処理要求を受け付けて、実際のSQL実行などを行います。
※1台のマシンにOracleデータベースがインストールされており、同マシン上でSQL
Plusのようなクライアントアプリケーションを実行する場合でも、動きは同様です。

サーバープロセスがユーザープロセスからSQL文を受け取った後に、はじめて、その受け取ったSQL文と一致するSQL文が共有プールにあるかどうかを確認することができます。

質問の意図を理解できておらず、的外れな返答となっていたらすみません。

合格体験記の投稿
投稿がありません