プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • データベース
  • 【SQL】内部処理の仕組み(Oracle)
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【SQL】内部処理の仕組み(Oracle)

04.30

  • miyabisan2
  • 5件のコメント

この記事は2分で読めます

なぜ、SQLの内部処理を理解する必要があるかというと、「SQLチューニング」において遅延原因を分析することが出来るようになるためです。

SQLは、Oracle内で、内部的には下記の流れで処理されます。

  1. SQLの解析
  2. SQLの実行
  3. SQLのフェッチ

SQLの解析

Oracleは、SQLを受け取ると「共有プール」の「ライブラリキャッシュ」に格納して、SQLの構文解析を実施します。

「共有プール」や、「ライブラリキャッシュ」という用語については下記の記事で解説しています。

【Oracleアーキテクチャ】「共有プール」の構造や仕組みについて

構文解析でやってること

  • 構文が正しいかチェック(コンパイル)
  • 対象データを参照する権限が、問い合わせしたユーザーに与えられているかどうかチェックすること。
  • 効率が上がるように、SQL書式の再設定をする場合もある。
  • ライブラリ・キャッシュ内に同一SQLが残っているかチェックしている。(過去に同じ問い合わせをしてないかチェック)

SQLの実行

実行計画の作成

まずは、SQLを実行する前に、Oracleのオプティマイザが解析済みのSQLに対して、「実行計画」を作成します。

「実行計画」については、下記の記事でも解説しています。

【SQL】実行計画について

SQLの実行

「バインド変数」が利用されているものに対しては、変数を割り当てて、実行計画を元に、SQLを実行します。

バインド変数とは?

ライブラリ・キャッシュに格納されているSQLを共有して利用する仕組みのことです。

SQL実行時のテーブルへのアクセスする動作の仕組みに関しては、下記の記事で解説しています。

【Oracle】実行計画作成後のSQL実行時の動作の仕組み(アクセスパス)

SQLのフェッチ

「フェッチ」は、SQLの結果セットからデータを取得する処理のことです。

フェッチがあるのは、「SELECT文のみ」になり、Java等のプログラム言語で利用されたりします。

結果セットを使用した後は、必ず結果セットをクローズするようにしましょう。

なお、Javaから、JDBCを利用して結果セットをクローズすることに関しては、下記の記事でも解説しています。

【Java】JDBCプログラムを理解する。

ソフトパースとハードパース

ソフトパースの方が解析処理がスキップされる分パフォーマンスが良くなります。なので、SQLを記述する際はハードパースが作られないようなSQLにする必要があります。

ソフトパース

同一SQLが解析されている場合は、キャッシュされている実行計画を利用して実行します。解析処理をスキップできます。

ハードパース

同一SQLが解析されている場合でも解析処理を行います。

スポンサーリンク
  • 2018 04.30
  • miyabisan2
  • 5件のコメント
  • Oracle, SQL, データベース
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 06.21

    【SQL】「GROUP BY句」、「HAVING句」について

  2. 2018 04.08

    【データベース設計】正規化について

  3. 2018 04.22

    【Java】PreparedStatementによるINSERT文の実行

  4. 2018 04.29

    【データベース】ロックの基礎知識(デッドロック等も)

  5. 2020 08.13

    【DBスペシャリスト】「生産管理」業務、「発注・仕入・支払」業務

  6. 2020 12.06

    【データベース】「排他制御」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【システム開発】チューニングの基礎知識

【Oracleアーキテクチャ】「共有プール」の構造や仕…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー