OracleDB/Concept

SQL 처리 과정

대끄블 2023. 5. 18. 14:23

오늘은 Database가 DDL문을 처리하여 object를 생성하고, DML문을 통해 Data를 수정하며 쿼리를 통해 Data를 검색하는 "SQL 처리 과정"에 대해 알아보겠습니다.

SQL 처리 과정은 크게 Parsing, Optimization, Row Source Generation 그리고 Execution 단계로 나뉘어집니다.

Stages of SQL Processing

1. SQL Parsing

1.1. Syntax Check

SQL 구문에 대한 규칙을 위반하는 명령문을 구분하는 단계입니다.

SQL> SELECT * FORM employees;
SELECT * FORM employees
         *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

 

1.2. Semantic Check

SQL 구문에서 사용되는 object, columns이 있는 지 확인하는 단계입니다.

SQL> SELECT * FROM nonexistent_table;
SELECT * FROM nonexistent_table
              *
ERROR at line 1:
ORA-00942: table or view does not exist

 

1.3. Shared Pool Check(Hard/Soft Parse)

이 단계에서 Resource를 많이 사용하는 명령문 처리 단계를 Skip할 수 있는지 여부를 결정합니다. (Hashing Algorithm 이용)

1.3.1. Hard Parse

Oracle이 기존 코드를 재사용할 수 없는 경우, 코드를 새로 빌드해야 합니다. Hard Parsing하는 동안 Database는 Library Cache와 Dictionary Cache에 여러 번 액세스하여 Data Dictionary를 확인합니다.

"DDL문은 항상 Hard Parse를 수행합니다"

1.3.2. Soft Parse

명령문이 재사용 가능한 SQL문과 동일한 경우 Oracle은 기존 코드를 재사용합니다. -> Library Cache Hit

Soft Parse는 Optimization, Row Source Generation 단계를 건너뛰고 바로 Execution 단계로 진행하기 때문에 Hard Parse보다 선호됩니다.

Dedicated Server에서 Update문의 Shared Pool Check 과정

 

2. SQL Optimization

Optimization 과정에서 Oracle은 모든 DML문에 대해 적어도 한번은 Hard Parse를 수행하야 하며 Pasing 중에 Optimization을 수행해야 합니다. (DDL문은 Optimization하지 않습니다-예외: subquery에 DML문이 포함된 경우)

3. SQL Row Source Generation

Row Source Generator는 Optimizer로부터 최적의 Execution Plan을 수신하고 나머지 Database에서 사용할 수 있는 반복적인 Execution Plan을 생성하는 소프트웨어입니다.

Row Source는 row를 반복적으로 처리할 수 있는 control structure와 함께 Execution Plan 과정에서 반환되는 row set입니다. (Row Source는 table, view, or result of a join or grouping operation의 결과일 수 있습니다.)

4. SQL Execution

Execution 과정에서 SQL 엔진은 Row Source Generator에의해 생성된 Tree의 각 Row Source를 실행합니다.(DML Processing에서 유일한 필수작업입니다.)

Row Source Tree

일반적으로 실행 단계의 순서는 계획의 순서와 반대이므로 계획을 아래에서 위로 읽습니다!!

Black Box : Database에 Object에서 Data를 물리적으로 검색

White Box : Row Source에서 작동

Execution과정에서 Database는 Data가 Memory에 없으면 Disk에서 Memory로 Data를 읽어옵니다. 또한 Database는 데이터 무결성을 보장하는 데 필요한 Lock, Latch를 해제하고 SQL Execution 중 변경 사항을 기록합니다. SQL Processing의 마지막 단계는 Cursor를 Close하는 것 입니다.

참조:

https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/sql-processing.html#GUID-B3415175-41F2-4EBB-95CF-5F8B5C39E927

 

SQL Tuning Guide

This chapter explains how database processes DDL statements to create objects, DML to modify data, and queries to retrieve data.

docs.oracle.com