2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

感覚的に理解するOracleDB Part5-1

Posted at

はじめに

前回までのパートで、オラクルDBで出てくる登場人物はおおむね出揃いました。
今回はこれらのDB構成要素がどのように作用してSQLの実行をしているのかを簡単に解析していきます。そして、バックグラウンドプロセスの役割やREDO・UNDOについての理解を深めていきます。

db4-11.png

SELECT文の解析

まずはSQLの基本となるSELECT文がどのように実行されているかを見てみましょう。SELECT文の実行順序は以下の図のようになります。

db5-1.png

図が複雑なので段階的に順序を追っていきましょう!

1. SELECT文発行

ユーザプロセスがSELECT文を発行します。

2. SQLを解析する(Parse)

サーバプロセスが発行されたSELECT文の解析を行います。この解析のことをparseといいます。図中ではサーバプロセスが2人存在しているように見えますが、本来これらは同一プロセス(一人)です。

db5-2.png

parseは、上司が仕事についての計画を立てるような感覚に近いと思います。つまり上司であるサーバプロセスが仕事であるSQLについて解析や実行手順の計画を行う感じです。

3. 解析結果を共有

サーバプロセスのSQL解析結果をSGAへ格納します。ここで新しい単語が出てきました。DBバッファ共有プールです!この2つについて簡単に説明します。

  • 共有プール:SQLの解析結果を共有する場所
  • DBバッファ:データベース内のデータを共有する場所

SQL解析結果はこの2つのうち、共有プールに格納されます。上司が建てた仕事の計画を格納する場所が共有プールということですね!

db5-3.png

共有プールに格納されたSQLの解析結果は、再び同じSQLのタスクが来た際に再利用されます。このように、共有プールにはSQLの実行効率を向上させるメリットがあります

4. データブロックを読み出す

解析結果の共有まで終了したら、サーバプロセスは実際のデータの読み出しを行います。このとき、サーバプロセスは毎回データベースまでデータを撮りにいくのが面倒で仕方ありません。そのため、極力楽にデータの読み出しを行おうとします。このときに活用されるのがDBバッファです!

db5-4.png

まず、サーバプロセスはDBバッファに読み出したいデータがあるかを確認します。ここで、欲しいデータが存在する場合には、そのデータを取得してデータの読み出しは終了です。もしも、DBバッファにデータが存在しない場合には、サーバプロセスはデータベースまでデータを取りに出かけます。そして、データベースから欲しかったデータのデータブロックを取得したあと(オラクルDBのデータの最小単位はデータブロックでしたね!Part4参照)、そのデータを再度取りに出かけなくていいようにDBバッファに格納します。このようにして、データ取得の効率を上げているわけです。

db5-5.png

db5-6a.png

このように考えると、SGAのDBバッファが大きければ大きいほどサーバプロセスの無駄な移動はなくなり、効率よく仕事ができそうですね!しかし、作業台であるSGAを大きくすればそれだけ工場の面積を圧迫することになるので、そのあたりは加減を考えてSGAの大きさを設計する必要があります。

5. SQLの結果を返す(Fetch)

データが読み出されると、一度そのデータはサーバプロセスの作業机であるPGAに格納されます。ここで、そのデータの最終確認が行われ、必要であればソート処理などを行います。最終確認が完了するとその結果データはクライアントへ納品されます。この動作のことをfetchといいます。

db5-7.png

SELECT文の動作は以上です!お疲れ様でした!
では、最後に動作手順をまとめましょう!!!

まとめ

SELECT文は以下の手順で実行されます。

  1. ユーザプロセスがSELECT文を発行する
  2. サーバプロセスがSQLを受け取り、解析(parse)を行う
  3. SQLの解析結果をSGA内部の共有プールに格納する
  4. DBバッファかPDBからデータを読み出す
  5. PGAで最終確認を行い、納品する(fetch)

記事が長くなりそうなので、一旦ここまでにします!
Part5-2では、UPDATE文の解析を行う予定ですが、その前にPart6で別の話題を扱うと思います!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?