KR102511927B1 - Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법 - Google Patents

Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법 Download PDF

Info

Publication number
KR102511927B1
KR102511927B1 KR1020180006721A KR20180006721A KR102511927B1 KR 102511927 B1 KR102511927 B1 KR 102511927B1 KR 1020180006721 A KR1020180006721 A KR 1020180006721A KR 20180006721 A KR20180006721 A KR 20180006721A KR 102511927 B1 KR102511927 B1 KR 102511927B1
Authority
KR
South Korea
Prior art keywords
jit
execution plan
statement
query
optimization
Prior art date
Application number
KR1020180006721A
Other languages
English (en)
Other versions
KR20190088318A (ko
Inventor
이명철
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020180006721A priority Critical patent/KR102511927B1/ko
Priority to US16/112,204 priority patent/US10754857B2/en
Publication of KR20190088318A publication Critical patent/KR20190088318A/ko
Application granted granted Critical
Publication of KR102511927B1 publication Critical patent/KR102511927B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Operations Research (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 저장 프로시저를 활용한 온라인 분석 워크로드를 효율적으로 지원하고자 하는 데이터베이스 시스템에서의 저장 프로시저 최적화와 관련된다.
본 발명의 일 실시 예에 따른 JIT 컴파일 기반 데이터베이스 시스템은, 스토리지에 저장된 데이터를 관리하는 한편, 요청에 따라 데이터를 제공하는 저장 관리기; 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 SQL 실행 플랜을 생성하는 인터프리터 기반 질의 처리기; 및 상기 SQL 실행 플랜을 제공받고, 제공받은 SQL 실행 플랜 내 분기문 및 반복문에 대한 최적화를 실행한 후, 최적화된 JIT 실행 플랜을 생성하는 한편, 생성된 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하고, 생성된 질의 처리 실행기에 의해 수행된 질의 처리 결과를 제공하는 JIT 기반 질의 처리기를 포함한다.

Description

JIT 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법{Database System based on JIT Compilation, Query Processing Method of the same and Method for Optimization of Stored Procedure of the same}
본 발명은 데이터베이스 분야에서의 질의 최적화와 관련되며, 특히 저장 프로시저를 활용한 온라인 분석 워크로드를 효율적으로 지원하고자 하는 데이터베이스 시스템에서의 저장 프로시저 최적화와 관련된다.
대부분의 인메모리 DBMS는 사전 컴파일된 인터프리터 방식 실행기를 이용해서 전통적인 Volcano 방식의 iterator(이터레이터) 모델 및 tuple-at-a-time(한번에 한 튜플만 처리) 모델로 질의 처리를 수행한다.
Volcano 방식의 iterator 모델에서는 사전 컴파일된 인터프리터 방식 질의 실행기가 SQL 질의로부터 생성된 실행 플랜의 트리를 Top-Down 방식으로 순회하면서 각 연산자 노드를 방문하고 해당 연산자를 처리하여 충분한 결과가 만들어질 때까지 결과 튜플을 한번에 하나씩 생성하여 아래에서 위로 결과를 계속 올려 보내는 방식으로 질의 처리를 수행한다.
그러나, iterator 모델 기반 질의 처리는 최신 고병렬 HW를 활용함에도 불구하고 성능에 한계를 보이는 문제점이 있다.
iterator 모델 기반 질의 처리에서 성능에 한계를 보이는 이유는 다수의 함수 호출 및 한 튜플 단위의 처리 등으로 인해 최신 CPU가 제공하는 파이프라인 처리를 활용하는 데에 어려움이 있고, 레지스터/캐시의 지역성(locality) 활용 미진, 브랜치 예측 정확도 저하 등의 문제로 인해 메모리 접근 속도 이상의 성능을 내기 어렵기 때문이다.
이에 따라, HIQUE, HyPer, MonetDB, Hekaton, Impala, LegoBase 등의 최신 데이터베이스 시스템들은 컴파일러 최적화 기법, 즉 JIT(Just-In-Time) 컴파일 기반의 SQL 최적화 기법을 채택하고 있다.
JIT 컴파일을 수행하면 컴파일된 질의 실행기 자체의 성능은 개선되나, JIT 컴파일 시간이 좀 더 소요되는 단점이 있다. 따라서, JIT 컴파일은 대부분의 레코드에 접근하여 분석을 수행하고, 이에 따라 장시간 수행되는 특성을 갖는 OLAP 분석과 한번 컴파일하면 여러 번 실행되므로 컴파일 시간이 중요하지 않은 저장 프로시저에 적합한 것으로 알려져 있다.
저장 프로시저는 자주 반복적으로 실행되는 SQL 문장을 미리 저장해 놓고, 여러 번 반복하여 실행하여 SQL 문장 구문 분석 등 SQL 문장 처리 시 마다 소요되는 비용을 절감하기 위하여 데이터베이스 시스템이 제공하는 기능이다.
저장 프로시저는 일반 SQL 문과 비교하여 다수의 절차문(Procedural Statements), 중첩 가능한 다수의 제어문(분기/반복)을 추가적으로 제공하여, 일반적으로 일반 SQL 문 대비 복잡한 로직 또는 알고리즘을 표현할 수 있다.
따라서, 저장 프로시저는 일반 SQL 문 대비 상대적으로 수행 시간이 긴 특성을 갖기 때문에, 이러한 저장 프로시저의 특성, 특히 수행 시간에 큰 영향을 미치는 분기와 반복, 즉 컨트롤 플로(control flow)에 대해 JIT 컴파일 기반의 최적화를 제공함으로써 데이터베이스 시스템에서 저장 프로시저 수행 시간을 단축할 수 있는 방법이 필요하다.
따라서, 본 발명은 상기와 같은 종래 기술의 문제점을 해결하기 위하여 안출된 것으로, 본 발명의 목적은, JIT 컴파일을 통해 질의 최적화를 지원하는 데이터베이스 시스템에서 저장 프로시저에서 나타나는 분기와 반복, 즉 컨트롤 플로의 처리 시의 긴 시간 소요 문제를 해결하여 저장 프로시저 수행 시간을 단축함으로써 실시간 분석 및 즉각적인 의사 결정을 지원할 수 있는 JIT 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법을 제공함에 있다.
상기와 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따른 JIT 컴파일 기반 데이터베이스 시스템은, 스토리지에 저장된 데이터를 관리하는 한편, 요청에 따라 데이터를 제공하는 저장 관리기; 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 SQL 실행 플랜을 생성하는 인터프리터 기반 질의 처리기; 및 상기 SQL 실행 플랜을 제공받고, 제공받은 SQL 실행 플랜 내 분기문 및 반복문에 대한 최적화를 실행한 후, 최적화된 JIT 실행 플랜을 생성하는 한편, 생성된 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하고, 생성된 질의 처리 실행기에 의해 수행된 질의 처리 결과를 제공하는 JIT 기반 질의 처리기를 포함한다.
상기 JIT 기반 질의 처리기는, 입력되는 SQL 실행 플랜을 분석하여, JIT 컴파일 대상 질의인지를 판단하는 질의 판단모듈; 입력되는 SQL 실행 플랜 내 분기문에 대한 최적화를 실행하는 분기 최적화 실행모듈; 입력되는 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하는 JIT 실행 플랜 생성모듈; 입력되는 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하는 반복 최적화 실행모듈; 상기 분기 최적화 실행모듈의 최적화 실행 및 상기 반복 최적화 실행모듈의 최적화 실행에 이용되는 규칙을 저장하는 최적화 규칙 저장모듈; 및 상기 인터프리터 기반 질의 처리기로부터 제공되는 SQL 실행 플랜을 상기 질의 판단모듈로 제공하는 한편, 상기 반복 최적화 실행모듈로부터 JIT 실행 플랜을 제공받고, 제공받은 JIT 실행 플랜에 대한 질의 처리를 수행하는 질의 처리 실행기를 생성하는 질의 처리 제어모듈을 포함한다.
상기 질의 판단모듈은 상기 SQL 실행 플랜에 대한 질의 워크로드 분석을 통해, OLTP 질의인지 OLAP 분석인지를 판단하여, OLAP 분석인 경우에 JIT 컴파일 대상 질의인 것으로 판단한다.
상기 질의 판단모듈은 분석 함수 및 집계 함수가 모두 사용되는 경우 OLAP 분석으로 판단한다.
상기 질의 판단모듈은 분석 함수 및 집계 함수가 사용되지 않거나 하나의 함수만 사용된 경우, 질의 선택율을 예측하여 질의 선택율이 임계치 이하이면 OLAP 분석으로 판단한다.
상기 질의 처리 제어모듈은 상기 질의 판단모듈에 의해 SQL 실행 플랜이 JIT 컴파일 대상 질의인 것으로 판단된 경우, SQL 실행 플랜을 상기 분기 최적화 실행 모듈로 제공하고, 상기 질의 판단모듈에 의해 SQL 실행 플랜이 JIT 컴파일 대상 질의가 아닌 것으로 판단된 경우, 상기 인터프리터 기반 질의 처리기로 SQL 실행 플랜에 대한 처리를 요청한다.
상기 질의 처리 제어모듈은 상기 분기 최적화 실행 모듈로부터 제공받은 분기문 최적화된 SQL 실행 플랜을 상기 JIT 실행 플랜 생성모듈로 제공하고, 상기 JIT 실행 플랜 생성모듈로부터의 JIT 실행 플랜을 상기 반복 최적화 실행모듈로 제공하고, 상기 반복 최적화 실행모듈로부터의 반복문 최적화된 JIT 실행 플랜을 제공받으면, 상기 질의 처리 실행기를 생성한다.
상기 분기 최적화 실행모듈은, 분기 최적화 적용 여부 판단을 위한 기본 자료 구조를 구성하고, 입력된 SQL 실행 플랜을 분석하여 분기 최적화가 적용 가능한지를 판단하고, 분기 최적화가 적용 가능한 것으로 판단하면, 최적화 적용을 위한 분기 파트 정보를 구성하고, 분기 파트 정보를 기반으로 최적화를 실행하고, 최적화 실행 결과에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 변수 이름 및 참조 위치를 조정한다.
상기 분기 최적화 실행모듈은, 하나의 분기 블록 내에서 중복 연산 및 고유 연산의 묶음마다 분기 블록 1개씩 생성하여 유형을 구분하고, 구성된 분기 파트의 유형 및 다른 분기 파트와의 상대적 위치에 따라, 중복 연산자 및 고유 연산자를 앞뒤로 이동 배치하여 최적화를 실행한다.
상기 반복 최적화 실행모듈은, 입력된 JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단하고, 반복 최적화 규칙을 적용할 수 있는 반복문인 경우, 반복문 내에서의 반복 조건 변수를 추출하고, 반복문 내에서 순회 병렬화를 위한 반복 함수를 추출하고, 추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하고, 구성된 병렬 루프 스케줄러를 이용하여, 추출된 반복 함수들을 병렬 처리 가능하도록 배치한다.
상기 반복 최적화 실행모듈은, 입력된 JIT 실행 플랜 내 반복문이 단순 반복문, 순회간 의존성이 있는 반복문, 변경문을 포함하는 반복문, 하위 반복문을 포함하는 반복문인 경우에 최적화 대상이 아닌 것으로 판단하고, 입력된 JIT 실행 플랜 내 반복문이 순회간 의존성이 없는 반복문, 변경문을 포함하고 있지 않은 반복문, 하위 반복문을 포함하지 않은 반복문인 경우에 최적화 대상인 것으로 판단한다.
상기 반복 최적화 실행모듈은, BARRIER 문과 LEAVE 문 사이의 연산문에 대한 반복 조건 변수를 검사하여, 변경 연산문 정보를 추출하고, LEAVE 문과 REDO 문 사이의 연산문에 대한 반복 조건 변수를 검사하여 변경 연산문 정보를 추출한다.
상기 반복 최적화 실행모듈은 스레드화가 가능한 함수인 checkLoopCond() 함수, checkLeaveCond() 함수, checkRedoCond() 함수, processPartition() 함수 및 preparePartition() 함수를 추출한다.
상기와 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따른 JIT 컴파일 기반 데이터베이스 시스템의 질의 처리 방법은, 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 SQL 실행 플랜을 생성하는 단계; 생성된 상기 SQL 실행 플랜에 대해서, JIT 실행 플랜으로의 컴파일 대상 질의인지를 판단하는 단계; 상기 SQL 실행 플랜이 JIT 실행 플랜으로의 컴파일 대상 질의가 아닌 것으로 판단되면, 인터프리터 기반으로 질의를 처리하여 결과를 제공하는 단계; 상기 SQL 실행 플랜이 JIT 실행 플랜으로의 컴파일 대상 질의인 것으로 판단되면, 상기 SQL 실행 플랜 내 분기문이 있는 경우, 분기문에 대한 최적화를 실행하는 단계; 상기 SQL 실행 플랜 내 분기문이 없는 경우에는 상기 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하고, 분기문에 대한 최적화가 실행된 경우에는 분기문 최적화된 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하는 단계; 생성된 상기 JIT 실행 플랜 내 반복문이 있는 경우, 반복문에 대한 최적화를 실행하는 단계; 상기 JIT 실행 플랜 내 반복문이 없는 경우에는 상기 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하고, 반복문에 대한 최적화가 실행된 경우에는 반복문 최적화된 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하는 단계; 및 생성된 질의 처리 실행기를 이용하여, 상기 JIT 실행 플랜 혹은 상기 반복문 최적화된 JIT 실행 플랜을 머신 코드로 변환하여 JIT 기반의 질의를 처리하여 결과를 제공하는 단계를 포함한다.
상기 JIT 실행 플랜으로의 컴파일 대상 질의인지를 판단하는 단계는, 상기 SQL 실행 플랜에 대한 질의 워크로드 분석을 통해, OLTP 질의인지 OLAP 분석인지를 판단하여, OLAP 분석인 경우에 JIT 컴파일 대상 질의인 것으로 판단하는 단계이다.
상기 분기문에 대한 최적화를 실행하는 단계는, 분기 최적화 적용 여부 판단을 위한 기본 자료 구조를 구성하는 단계; 입력된 SQL 실행 플랜을 분석하여 분기 최적화가 적용 가능한지를 판단하는 단계; 분기 최적화가 적용 가능한 것으로 판단하면, 최적화 적용을 위한 분기 파트 정보를 구성하는 단계; 분기 파트 정보를 기반으로 최적화를 실행하는 단계; 및 최적화 실행 결과에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 변수 이름 및 참조 위치를 조정하는 단계를 포함한다.
상기 반복문에 대한 최적화를 실행하는 단계는, 입력된 JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단하는 단계; 반복 최적화 규칙을 적용할 수 있는 반복문인 경우, 반복문 내에서의 반복 조건 변수를 추출하는 단계; 반복문 내에서 순회 병렬화를 위한 반복 함수를 추출하는 단계; 추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하는 단계; 및 구성된 병렬 루프 스케줄러를 이용하여, 추출된 반복 함수들을 병렬 처리 가능하도록 배치하는 단계를 포함한다.
상기와 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따른 JIT 컴파일 기반 데이터베이스 시스템의 저장 프로시저 최적화 방법은 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 처리를 통해 생성되는 SQL 실행 플랜 내 분기문에 대한 최적화를 실행하는 단계; 분기문 최적화된 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하는 단계; 생성된 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하는 단계; 및 반복문 최적화된 JIT 실행 플랜을 머신 코드로 변환하여 질의를 처리하는 단계를 포함한다.
상기 SQL 실행 플랜 내 분기문에 대한 최적화를 실행하는 단계는, 분기 최적화 적용 여부 판단을 위한 기본 자료 구조를 구성하는 단계; 입력된 SQL 실행 플랜을 분석하여 분기 최적화가 적용 가능한지를 판단하는 단계; 분기 최적화가 적용 가능한 것으로 판단하면, 최적화 적용을 위한 분기 파트 정보를 구성하는 단계; 분기 파트 정보를 기반으로 최적화를 실행하는 단계; 및 최적화 실행 결과에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 변수 이름 및 참조 위치를 조정하는 단계를 포함한다.
상기 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하는 단계는, 입력된 JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단하는 단계; 반복 최적화 규칙을 적용할 수 있는 반복문인 경우, 반복문 내에서의 반복 조건 변수를 추출하는 단계; 반복문 내에서 순회 병렬화를 위한 반복 함수를 추출하는 단계; 추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하는 단계; 및 구성된 병렬 루프 스케줄러를 이용하여, 추출된 반복 함수들을 병렬 처리 가능하도록 배치하는 단계를 포함한다.
상기와 같은 본 발명의 실시 예에 따르면, JIT 컴파일 기반 저장 프로시저 최적화에 따라, 저장 프로시저를 활용한 온라인 분석 질의를 효율적으로 지원하고자 하는 데이터베이스 시스템에서 저장 프로시저가 갖는 분기와 반복을 포함하는 컨트롤 플로를 최적화한 후 머신 코드로 JIT 컴파일함으로써 온라인 분석 질의 성능을 향상시킬 수 있다.
도 1은 종래 기술에 따른 인터프리터 기반의 데이터베이스 시스템의 일반적 구조를 도시한 도면이다.
도 2는 본 발명에서 최적화 대상으로 하는 저장 프로시저로 K-means 알고리즘을 구현한 일 실시 예를 도시한 도면이다.
도 3은 본 발명에서 최적화 대상으로 하는 저장 프로시저와 이에 대응하는 SQL 실행 플랜의 일 실시 예를 도시한 도면이다.
도 4는 본 발명에서 JIT 컴파일 기반 질의 최적화를 위해 도 3의 SQL 실행 플랜으로부터 생성한 중간 표현의 일 실시 예를 나타내는 도면이다.
도 5는 본 발명의 실시 예에 따른 JIT 컴파일 기반 데이터베이스 시스템의 구조를 도시한 도면이다.
도 6은 본 발명의 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 시에 있어서 SQL 실행 플랜 내의 분기문을 JIT 실행 플랜으로 생성한 일례를 도시한 도면이다.
도 7은 본 발명의 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 시에 있어서 SQL 실행 플랜 내의 반복문을 JIT 실행 플랜으로 생성한 일례를 도시한 도면이다.
도 8은 본 발명의 바람직한 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 방법에 따른 동작을 설명하기 위한 도면이다.
도 9는 저장 프로시저 분기문의 실행 플랜에서 연산 중복 문제가 발생하는 경우의 일 실시 예를 나타내는 도면이다.
도 10은 도 9의 저장 프로시저 분기문에 대해 컨트롤 플로 분기 최적화 규칙이 적용되어 최적화된 실행 플랜의 일 실시 예를 나타낸 도면이다.
도 11a는 저장 프로시저 분기문의 Head Common 패턴을 컨트롤 플로 분기 최적화 방법에 따라 최적화한 경우의 SQL 실행 플랜의 일 실시 예를 나타낸 것이다.
도 11b는 저장 프로시저 분기문의 Middle Common 패턴을 컨트롤 플로 분기 최적화 방법에 따라 최적화한 경우의 SQL 실행 플랜의 일 실시 예를 나타낸 것이다.
도 11c는 저장 프로시저 분기문의 Tail Common 패턴을 컨트롤 플로 분기 최적화 방법에 따라 최적화한 경우의 SQL 실행 플랜의 일 실시 예를 나타낸 것이다.
도 12는 본 발명의 실시 예에 따른 분기 최적화 규칙 실행 흐름을 도시한 도면이다.
도 13은 본 발명의 실시 예에 따른 반복 최적화 규칙의 개념을 설명하기 위한 도면이다.
도 14는 본 발명의 실시 예에 따른 반복 최적화 규칙 실행 흐름을 도시한 도면이다.
본 명세서에 개시되어 있는 본 발명의 실시 예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시 예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시 예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시 예들에 한정되는 것으로 해석되어서는 안 된다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는 바, 특정 실시 예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 “연결되어” 있다거나 “접속되어” 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 “직접 연결되어” 있다거나 “직접 접속되어” 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 “~사이에”와 “바로 ~사이에” 또는 “~에 이웃하는”과 “~에 직접 이웃하는” 등도 마찬가지로 해석되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, “포함하다” 또는 “가지다” 등의 용어는 개시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
한편, 어떤 실시 예가 달리 구현 가능한 경우에 특정 블록 내에 명기된 기능 또는 동작이 순서도에 명기된 순서와 다르게 일어날 수도 있다. 예를 들어, 연속하는 두 블록이 실제로는 실질적으로 동시에 수행될 수도 있고, 관련된 기능 또는 동작에 따라서는 상기 블록들이 거꾸로 수행될 수도 있다.
본 발명은 데이터베이스 시스템에서 저장 프로시저 실행 시에 발생하는 저장 프로시저 컨트롤 폴로 관련 성능 병목 문제, 예를 들어 분기문 내의 중복 연산문 생성 문제, 반복문에서 각 순회를 순차 처리하는 문제 등을 해소하기 위해 제안된다.
이를 위해, 본 발명은 저장 프로시저에 JIT 컴파일 기법을 적용하여 질의 실행 플랜을 중간 표현으로 변환하고, 분기문 및 반복문에 특화된 최적화 규칙을 적용하여 실행 플랜을 최적화하고, 최신 머신 코드로 컴파일된 질의 실행기를 생성 및 실행함으로써, 저장 프로시저를 최적화하는 방법을 제안한다.
본 발명에서 제안되는 저장 프로시저 최적화 방법은 저장 프로시저를 활용하여 온라인 분석 워크로드를 지원하는 일반적인 형태의 데이터베이스 시스템에 널리 적용될 수 있다.
이하, 본 발명의 바람직한 실시 예에 따른 저장 프로시저 최적화 방법 및 시스템에 대하여 첨부된 도면을 참조하여 상세하게 설명하도록 한다.
도 1은 종래 기술에 따른 인터프리터 기반의 데이터베이스 시스템의 일반적 구조를 도시한 도면이다.
도 1을 참조하면, 데이터베이스 시스템(100)은 크게 저장 관리기(Storage Manager, 110)와 질의 처리기(Query Processor, 120)로 구성된다.
상기 저장 관리기(110)는 디스크 또는 메모리(Storage) 상에 관리되는 데이터에 대한 관리 및 접근 방법을 질의 처리기에 제공하며, 질의 처리기(120)는 저장 관리기(110)가 제공하는 접근 방법을 이용해서 사용자가 입력한 질의를 처리하여 그 결과를 사용자에게 제공한다.
기능 수행을 위해, 상기 저장 관리자(110) 및 질의 처리기(120) 각각은 적어도 하나 이상의 프로세서 및 적어도 하나 이상의 메모리를 포함할 수 있다.
기능적으로, 상기 저장 관리기(110)는 디스크 또는 인메모리(Storage, 111)에 저장된 데이터를 관리하는 한편, 질의 처리기(120)로부터의 데이터 요청에 따라 요청된 데이터를 질의 처리기(120)로 제공한다.
그리고, 상기 질의 처리기(120)는 OLTP(Online Transaction Processing) 질의, OLAP(Online Analytical Processing) 분석 또는 저장 프로시저를 위한 사용자 질의를 파싱하는 질의 파서(Query Parser, 121), 파싱 결과인 추상 신택스 트리(Abstract Syntax Tree)를 실행 가능한 실행 플랜으로 변환하는 질의 변환기(Query Rewriter, 122), 실행 플랜을 최적화된 형태로 변환하는 질의 최적화기(Query Optimizer, 123) 및 최적화된 트리 형태의 실행 플랜을 탑-다운(Top-Down) 방식으로 순회(traverse)해 가면서 질의 처리를 수행하고 질의 결과를 바텀-업(Bottom-Up) 방식으로 생성하여 전달해 나가는 인터프리터 기반 질의 실행기(Interpreted Executor, 124)로 구성된다.
도 2는 본 발명에서 최적화 대상으로 하는 저장 프로시저로 K-means 알고리즘을 구현한 일 실시 예를 도시한 도면이다.
도 2에 도시된 바와 같이, 저장 프로시저는 다수의 분기문(Branch)과 중첩 가능한 다수의 반복문(Loop, Nested Loop)으로 구성된다.
도 3은 본 발명에서 최적화 대상으로 하는 저장 프로시저와 이에 대응하는 SQL 실행 플랜의 일 실시 예를 도시한 도면이다.
도 3에서와 같이, 도 1의 인터프리터 기반 질의 실행기(124)는 실행 플랜(Execution Plan)을 만나면, 루트 노드에서부터 단말 노드로 순회해 가면서 연산자를 나타내는 각 노드의 타입(연산자 종류)에 따른 처리를 수행하는 함수(ex, JOIN 노드의 경우 join() 함수)를 호출한다.
호출된 함수는 해당 노드의 결과를 생성하기 위하여 차례로 하위 노드의 함수를 수행하여 결과를 차례로 제공받는다. 이와 같은 처리 방식에서는 다수의 함수 호출이 발생하고, 함수 호출이 빈번하게 발생하며, 최신 CPU가 제공하는 파이프라인 처리 기능, 레지스터/캐쉬 활용 등이 어려우며, 단일 튜플 단위 처리로 인해 병렬 처리가 불가능하다.
따라서, 데이터베이스 시스템은 인터프리터 방식으로 질의를 처리하기 때문에, 최신 하드웨어의 활용에도 불구하고, 데이터베이스 시스템의 성능을 향상시키는 데에 한계가 있다.
도 4는 본 발명에서 JIT 컴파일 기반 질의 최적화를 위해 도 3의 SQL 실행 플랜으로부터 생성한 중간 표현의 일 실시 예를 나타내는 도면이다.
도 4에서와 같이, 중간 표현(IR, Intermediate Representation) 형태로 표현된 SQL 실행 플랜은 다수의 저수준 연산자 함수의 호출로 구성된다.
예를 들어, 각 연산자 함수는 이미 중간 표현 형태로 변환이 되어 관리되고 있다가, SQL 실행 플랜 내 연산자 함수가 대응하는 중간 표현 형태로 변환되고, 변환된 중간 표현이 최적화 방법에 따라 JIT 실행 플랜과 연결이 되어 종합적인 최적화가 이루어질 수 있다.
일례로, 다양한 SQL 질의를 플랫폼에 독립적이며, 저수준의 표현(저수준 플랫폼 독립적인 표현)으로 나타낼 수 있고, 다양한 최적화 방법을 적용할 수 있도록, 본 발명의 중간 표현은, 오픈 소스 프로젝트인 LLVM(Low Level Virtual Machine)의 중간 표현 구문을 활용할 수 있다.
중간 표현은 최적화가 적용이 되면 최적화된 중간 표현으로 변환되고, 최종적으로는 플랫폼 의존적인 머신 코드로 변환이 되어 실행된다.
도 5는 본 발명의 실시 예에 따른 JIT 컴파일 기반 데이터베이스 시스템의 구조를 도시한 도면이다.
도 5를 참조하면, 본 발명의 데이터베이스 시스템(500)은 저장 관리기(510), 인터프리터 기반 질의 처리기 (520) 및 JIT 기반 질의 처리기(530)로 이루어진다.
상기 저장 관리기(510)는 디스크 또는 인메모리(Storage, 511)에 저장된 데이터를 관리하는 한편, 인터프리터 기반 질의 처리기(520) 혹은 JIT 기반 질의 처리기(530)로부터의 데이터 요청에 따라 요청된 데이터를 해당 처리기(520 or 530)로 제공한다.
상기 인터프리터 기반 질의 처리기(520)는 도 1에 도시된 인터프리터 기반 질의 처리기(120)와 동일하게 구성되므로, 인터프리터 기반 질의 처리기(520)에 대한 상세한 설명은 생략한다.
상기 인터프리터 기반 질의 처리기(520)는 SQL 파싱 및 실행 플랜 생성 기능을 이용하여, 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대해서 구문 분석, 질의 변환 및 SQL 최적화를 수행하여 SQL 실행 플랜을 생성한다.
그리고, 상기 인터프리터 기반 질의 처리기(520)는 생성된 SQL 실행 플랜을 JIT 기반 질의 처리기(530)로 입력한다.
상기 JIT 기반 질의 처리기(530)는 기능 수행을 위한 적어도 하나 이상의 프로세서, 기능 수행에 필요한 알고리즘(혹은 프로그램) 및 동작 수행 결과를 저장하는 적어도 하나 이상의 메모리, 외부 장치와의 통신을 위한 통신 모듈 등을 포함할 수 있다.
상기 JIT 기반 질의 처리기(530)는 인터프리터 기반 질의 처리기(520)로부터 입력된 SQL 실행 플랜이 JIT 컴파일 대상 질의인지를 판단하고, JIT 컴파일 대상 질의가 아닌 경우에는 인터프리터 기반 질의 처리를 수행할 수 있도록 인터프리터 기반 질의 처리기(520)로 처리 명령을 제공한다.
그리고, 상기 JIT 기반 질의 처리기(530)는 입력된 SQL 실행 플랜이 JIT 컴파일 대상 질의인 경우에는, 입력된 SQL 실행 플랜에 대한 JIT 컴파일 수행하는 한편, 분기분과 반복문에 대한 최적화를 수행한 후, 질의 처리를 수행한다.
구체적으로, 상기 JIT 기반 질의 처리기(530)는 질의 처리 제어모듈(531), 질의 판단모듈(532), 분기 최적화 실행모듈(533), JIT 실행 플랜 생성모듈(534), 반복 최적화 실행모듈(535), 최적화 규칙 저장모듈(536)로 이루어질 수 있다.
상기 질의 처리 제어모듈(531)은 JIT 기반 질의 처리기(530)의 전반적인 동작을 제어하여 JIT 기반 질의 처리가 이루어질 수 있도록 수행한다.
특히, 상기 질의 처리 제어모듈(531)은 인터프리터 기반 질의 처리기(520)로부터의 SQL 실행 플랜을 질의 판단 모듈(532)로 제공한다.
그리고, 상기 질의 처리 제어모듈(531)은 인터프리터 기반 질의 처리기(520)로부터의 SQL 실행 플랜이 JIT 컴파일 대상 질의가 아니라는 판단결과를 질의 판단모듈(532)로부터 제공받으면, 인터프리터 기반 질의 처리기(520)가 질의를 처리할 것을 인터프리터 기반 질의 처리기(520)로 요청한다.
그리고, 상기 질의 처리 제어모듈(531)은 생성된 JIT 실행 플랜을 토대로 질의를 처리하여 그 결과를 사용자에게 제공하는 질의 처리 실행기(537)를 생성한다.
이때, 상기 질의 처리 제어모듈(531)은 질의 처리 실행기(537)가 저장 관리기(510)와의 연동을 통해 데이터를 송수신할 수 있도록 질의 처리 실행기(537)를 생성하며, 질의 처리 실행기(537)는 JIT 실행 플랜을 머신 코드로 변환하여 질의를 처리한다.
또한, 상기 질의 처리 제어모듈(531)은 JIT 기반 질의 처리기(530) 내의 다른 모듈(ex, 533, 534, 535)과 정보를 송수신한다.
상기 질의 판단모듈(532)은 질의 처리 제어모듈(531)로부터의 SQL 실행 플랜을 분석하여, JIT 컴파일 대상 질의인지를 판단하여, 판단 결과를 질의 처리 제어모듈(531)로 제공한다.
이때, 상기 질의 판단모듈(532)은 SQL 실행 플랜에 대한 질의 워크로드 분석을 통해, OLTP 질의인지 OLAP 분석인지를 판단하여, OLAP 분석인 경우에 JIT 컴파일 대상 질의인 것으로 판단한다.
그리고, 상기 질의 판단모듈(532)은 분석/집계 함수가 모두 사용되는 경우 OLAP 분석으로 판단하고, 아니면 다시 질의 선택율을 예측하여 질의 선택율이 임계치 이하이면 OLAP 분석으로 판단한다. 이때 사용하는 임계치는 실험에 의해 가변적으로 설정하여 사용할 수 있다.
반면, 상기 질의 판단모듈(532)은 분석/집계 함수가 사용되지 않거나 하나의 함수만 사용되고, 질의 선택율이 임계치를 초과하면 OLTP 질의로 판단한다.
상기 분기 최적화 실행 모듈(533)은 질의 처리 제어모듈(531)로부터의 SQL 실행 플랜 내 분기문에 대한 최적화를 실행하여, 실행 결과인 분기문 최적화된 SQL 실행 플랜을 질의 처리 제어모듈(531)로 제공한다.
상기 JIT 실행 플랜 생성 모듈(534)은 질의 처리 제어모듈(531)로부터의 SQL 실행 플랜을 중간 표현 형태의 JIT 실행 플랜으로 변환하여 JIT 실행 플랜을 생성하고, 생성된 JIT 실행 플랜을 질의 처리 제어모듈(531)로 제공한다.
상기 반복 최적화 실행 모듈(535)은 질의 처리 제어모듈(531)로부터의 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하여, 실행 결과인 반복문 최적화된 JIT 실행 플랜을 질의 처리 제어모듈(531)로 제공한다.
상기 최적화 규칙 저장모듈(536)은 분기 최적화 실행모듈(533) 및 반복 최적화 실행 모듈(535)이 최적화 기능을 수행하는 데에 필요한 최적화 규칙을 저장하고 있다.
이때, 상기 JIT 실행 플랜 생성모듈(534)은 SQL 실행 플랜 내의 기본적인 절차문에 대해서는 일반적인 함수 호출문을 생성하는 방식으로 JIT 실행 플랜을 생성한다.
그리고, 상기 JIT 실행 플랜 생성모듈(534)은 SQL 실행 플랜 내의 분기문과 반복문에 대해서는 연산문 묶음인 BasicBlock 간의 조건/무조건 브랜치 문을 활용하여 JIT 실행 플랜을 생성한다.
SQL 실행 플랜에서 분기문과 반복문은 BARRIER, LEAVE, REDO, EXIT의 4개 심볼을 이용해서 표현된다.
분기문은 배리어 밖에서 배리어 안으로의 진입(즉, BARRIER 안으로 이동)을 검사하는 BARRIER 조건문과, 분기문 밖으로 퇴출하기 위한 EXIT 문으로 구성된다.
반복문은 배리어 밖에서 배리어 안으로의 진입(BARRIER 안으로 이동)을 검사하는 BARRIER 조건문, 배리어 내에서 배리어 밖으로의 퇴출(EXIT로 이동)을 검사하는 LEAVE 조건문, 배리어의 처음으로 이동하기 위한 REDO 조건문, 및 반복문의 밖으로 최종 퇴출하기 위한 EXIT 문으로 구성된다.
도 6은 본 발명의 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 시에 있어서 SQL 실행 플랜 내의 분기문을 JIT 실행 플랜으로 생성한 일례를 도시한 도면이고, 도 7은 본 발명의 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 시에 있어서 SQL 실행 플랜 내의 반복문을 JIT 실행 플랜으로 생성한 일례를 도시한 도면이다.
도 6 및 도 7에서와 같이, 본 발명의 JIT 컴파일 기반 저장 프로시저 최적화는 분기문과 반복문을 나타내는 실행 플랜(SQL 실행 플랜 혹은 JIT 실행 플랜)에 적용 가능한 컨트롤 플로 분기 최적화 규칙과 컨트롤 플로 반복 최적화 규칙에 의해 달성될 수 있다.
이상에서는 본 발명의 바람직한 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 시스템의 구성 및 구성별 기능에 대해서 설명하였다. 이하에서는 본 발명의 바람직한 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 방법에 대해서 도 8을 참조하여 설명한다.
도 8은 본 발명의 바람직한 실시 예에 따른 JIT 컴파일 기반 저장 프로시저 최적화 방법에 따른 동작을 설명하기 위한 도면이다.
도 8에 도시된 동작은 도 5의 데이터베이스 시스템(500)에 의해 수행될 수 있는 것으로서, 인터프리터 기반 질의 처리기(520)는 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 SQL 실행 플랜을 생성한다(S800).
상기 단계 S800에서 인터프리터 기반 질의 처리기(520)에 의해 생성된 SQL 실행 플랜은 JIT 기반 질의 처리기(530)로 제공된다.
인터프리터 기반 질의 처리기(520)로부터의 SQL 실행 플랜에 대해서, JIT 기반 질의 처리기(530)는 JIT 실행 플랜으로의 컴파일 대상 질의인지를 판단한다(S810).
상기 단계 S810에서, SQL 실행 플랜이 JIT 실행 플랜으로의 컴파일 대상 질의가 아닌 것으로 판단되면(S810-아니오), JIT 기반 질의 처리기(530)는 인터프리터 기반 질의 처리기(520)로 질의를 처리할 것을 요청함에 따라, 인터프리터 기반 질의 처리기(520)가 인터프리터 기반으로 질의를 처리하여 결과를 제공한다(S820).
상기 단계 S810에서, SQL 실행 플랜이 JIT 실행 플랜으로의 컴파일 대상 질의인 것으로 판단되면(S810-예), JIT 기반 질의 처리기(530)는 SQL 실행 플랜 내 분기문이 있는 경우, 분기문에 대한 최적화를 실행한다(S830).
SQL 실행 플랜 내 분기문이 없거나, 분기문에 대한 최적화를 수행한 후, JIT 기반 질의 처리기(530)는 SQL 실행 플랜 혹은 분기문 최적화된 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성한다(S840).
이후, JIT 기반 질의 처리기(530)는 생성된 JIT 실행 플랜 내 반복문이 있는 경우, 반복문에 대한 최적화를 실행한다(S850).
이후, JIT 기반 질의 처리기(530)는 JIT 실행 플랜 혹은 반복문 최적화된 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하고(S860), 질의 처리 실행기는 JIT 실행 플랜 혹은 반복문 최적화된 JIT 실행 플랜을 머신 코드로 변환하여 JIT 기반의 질의 처리를 수행한 후 결과를 제공한다(S870).
이하에서는, ‘컨트롤 플로 분기 최적화 규칙’과 ‘컨트롤 플로 반복 최적화 규칙’을 이용하여 저장 프로시저를 최적화하는 과정에 대한 설명을 통해, 본 발명의 JIT 컴파일 기반 저장 프로시저 최적화 기술에 대해 보다 구체적으로 설명한다.
컨트롤 플로 분기 최적화 규칙
먼저, 본 발명의 JIT 컴파일 기반 저장 프로시저 최적화 시에 이용되는 컨트롤 플로 분기 최적화 규칙에 대해서 설명한다.
컨트롤 플로 분기 최적화는 저장 프로시저에 표현된 분기문 중에 하나의 분기 조건 변수의 값에 따라 다수의 선택적인 연산을 수행하는 분기문 묶음에 대해서 적용 가능한 최적화 방법이다.
이와 같은 분기문 묶음은 분기 조건 변수의 값에 따라 특정 분기문만 수행 가능하지만, 어떤 분기문이 수행될지 미리 예측할 수 없기 때문에 모든 분기문의 연산문(instruction)들을 모두 생성해야 한다.
이 때문에, 전체 JIT 실행 플랜의 연산문의 수가 증가되는데, JIT 실행 플랜에서는 연산문의 개수가 늘어날수록 머신 코드 생성 시간이 급격하게 증가하는 문제가 발생한다.
도 9는 저장 프로시저 분기문의 실행 플랜에서 연산 중복 문제가 발생하는 경우의 일 실시 예를 나타내는 도면이다.
도 9의 저장 프로시저를 보면, 저장 프로시저는 분기문 내에 1개의 변경문(UPDATE) 만을 포함하고 있다. 이 변경문은 SQL 실행 플랜으로 변환되는 경우 총 48개의 SQL 연산문으로 변환된다.
이때 type 분기 조건 변수 값에 의해 변경되는 필드의 이름(pm10_clusterId, no2_clusterId, o3_clusterId)이 결정되는데, SQL 실행 플랜의 48개 연산문 중에 맨 마지막 1개의 연산문만이 고유한 연산문이고, 나머지 47개의 연산문은 SQL 실행 플랜에서 같은 연산문이 서로 다른 분기문 내에 중복 표현된다.
이에 따라, JIT 실행 플랜으로 변환 시에도 동일하게 중복을 유지하도록 변환이 되며, 이로 인해 JIT 실행 플랜을 머신 코드로 JIT 컴파일할 때 컴파일 대상 연산문의 개수 증가로 인해 JIT 컴파일 시간을 증가시키는 문제가 발생한다.
도 10은 도 9의 저장 프로시저 분기문에 대해 컨트롤 플로 분기 최적화 규칙이 적용되어 최적화된 실행 플랜의 일 실시 예를 나타낸 도면이다.
도 10에서 확인할 수 있는 바와 같이, 도 9의 일 실시 예에 컨트롤 플로 분기 최적화 규칙을 적용하면, 동일한 분기 조건 변수에 의존적인 barrier/exit 블록 3개 내의 중복 연산이 전체 barrier/exit 블록 앞으로 이동되고, 각 barrier/exit 블록 3개 내에서의 분기 조건 변수에 따라 다르게 수행하는 연산문만을 수행하도록, SQL 실행 플랜이 최적화된다.
분기문에 따라 중복 연산문과 고유 연산문이 발생하는 패턴은 표 1에서 보는 바와 같이 정의될 수 있다.
패턴 특징
Head Common 모든 중복 연산문들이 barrier/exit 블록의 앞쪽에 위치
Middle Common 모든 중복 연산문들이 barrier/exit 블록의 중간에 위치
Tail common 모든 중복 연산문들이 barrier/exit 블록의 뒤에 이치
Mixed Common 중복 연산문들이 barrier/exit 블록의 중간에 임의 위치
표 1의 분기문 연산 발생 패턴별 컨트롤 플로 분기 최적화 방법은 다음과 같다.
Head Common 패턴의 경우, 중복 연산문들이 전체 barrier/exit 블록의 앞으로 이동되어 중복이 제거되며, 고유 연산문들은 각 barrier/exit 블록 내에 위치된다..
그리고, 각 고유 연산문이 인자로 중복 연산문의 결과를 변수로 참조하는 경우 전체 barrier/exit 블록의 앞으로 이동한 연산문을 참조하도록 변경된다.
Middle Common 패턴의 경우, 전체 barrier/exit 블록이 2개로 분리되고, 첫번째 barrier/exit 블록에 첫번째 고유 연산문들이 위치되고, 두번째 barrier/exit 블록에 두번째 고유 연산문들이 위치된다.
그리고, 중복 연산문들은 첫번째 barrier/exit 블록과 두번째 barrier/exit 블록 사이에 위치되어 중복이 제거된다.
이때, 중복 연산문이 첫번째 barrier/exit 블록 내의 고유 연산문의 결과를 참조하는 경우, 첫번째 barrier/exit 블록 내의 고유 연산문의 결과 변수가 모두 동일하게 변경되고, 중복 연산문이 해당 결과 변수를 참조하도록 변경된다.
그리고, 두번째 barrier/exit 블록 내의 고유 연산문이 첫번째 barrier/exit 블록 내의 고유 연산문 또는 중복 연산문의 결과 변수를 인자로 참조하는 경우, 이동 위치에 맞게 참조하도록 변경된다.
Tail Common 패턴의 경우, 고유 연산문들이 각 barrier/exit 블록 내에 위치되고, 중복 연산문들을 전체 barrier/exit 블록 뒤에 위치시켜 중복을 제거한다.
이때, 중복 연산문이 앞의 barrier/exit 블록 내의 고유 연산문의 결과를 참조하는 경우, 앞의 barrier/exit 블록 내의 고유 연산문의 결과 변수를 모두 동일하게 하고, 중복 연산문이 해당 결과 변수를 참조하도록 변경한다.
Mixed Common 패턴의 경우, 다른 발생 패턴의 최적화 방법을 활용하여 최적화가 수행된다.
도 11a 내지 11c는 저장 프로시저 분기문의 중복/고유 연산 발생 패턴별 컨트롤 플로 분기 최적화 방법에 따라 최적화된 SQL 실행 플랜의 일 실시 예들을 나타낸 도면들이다.
도 11a는 저장 프로시저 분기문의 Head Common 패턴을 컨트롤 플로 분기 최적화 방법에 따라 최적화한 경우의 SQL 실행 플랜의 일 실시 예를 나타낸 것이고, 도 11b는 저장 프로시저 분기문의 Middle Common 패턴을 컨트롤 플로 분기 최적화 방법에 따라 최적화한 경우의 SQL 실행 플랜의 일 실시 예를 나타낸 것이고, 11c는 저장 프로시저 분기문의 Tail Common 패턴을 컨트롤 플로 분기 최적화 방법에 따라 최적화한 경우의 SQL 실행 플랜의 일 실시 예를 나타낸 것이다.
도 12는 본 발명의 실시 예에 따른 분기 최적화 규칙 실행 흐름을 도시한 도면이다.
도 12에 도시된 분기문에 대한 최적화는 JIT 기반 질의 처리기(530)의 분기 최적화 실행모듈(533)에 의해 수행될 수 있다.
도 12를 참조하면, 분기 최적화 실행모듈(533)은 분기 최적화 적용 여부 판단을 위한 기본 자료 구조(ex, 컨트롤 플로 정보, 분기 정보, 분기 블록 정보 등)를 구성한다(S1200).
상기 단계 S1200에서, 컨트롤 플로 정보는 분기 정보의 목록, SQL 실행 플랜 정보 등을 관리하는 데에 이용되고, 분기 정보는 연이어 발생하는 2개 이상의 같은 분기 조건 변수를 갖는 분기문의 목록, 분기 조건 변수 등을 관리하는 데에 이용되며, 분기 블록 정보는 분기 정보 내의 개별 분기문 정보를 분기 파트 목록으로 관리하는 데에 이용된다.
상기 단계 S1200 이후, 분기 최적화 실행모듈(533)은 SQL 실행 플랜을 분석하여 분기 최적화가 적용 가능한지를 판단한다(S1210).
이때, 상기 분기 최적화 실행모듈(533)은 같은 분기 조건 변수를 갖는 분기문이 연이어 2개 이상 존재하면 분기 최적화가 적용 가능한 것으로 판단한다.
상기 단계 S1210에서, 분기 최적화 실행모듈(533)은 분기 최적화가 적용 가능하지 않은 것으로 판단하면(S1210-아니오), 분기 최적화를 종료한다.
상기 단계 S1210에서, 분기 최적화 실행모듈(533)은 분기 최적화가 가능한 것으로 판단하면(S1210-예), 최적화 적용을 위한 자료 구조(ex, 분기 파트 정보)를 구성한다(S1220).
여기서, 분기 파트 정보는 하나의 분기 블록 내에서 중복/고유 연산의 묶음마다 분기 블록 1개씩 생성하며, 분기 파트의 유형은 0(Common), 1(Distinct), -1(Uninitialized)로 구분한다.
상기 단계 S1220 이후, 분기 최적화 실행모듈(533)은 자료 구조 정보를 기반으로 최적화를 수행한다(S1230).
여기서, 최적화는 단계 S1220에서 구성된 분기 파트의 유형 및 다른 분기 파트와의 상대적 위치에 따라, 중복/고유 연산자들을 앞/뒤로 이동 배치하는 방식으로 수행된다.
상기 단계 S 이후, 분기 최적화 실행모듈(533)은 변수 이름 및 참조 위치 조정을 수행한다(S1240).
여기서, 조정은 단계 S1230의 최적화 수행에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 전체 연산문을 대상으로 참조 오류가 발생하지 않도록 이루어진다.
컨트롤 플로 반복 최적화 규칙
이하에서는, 본 발명의 JIT 컴파일 기반 저장 프로시저 최적화 시에 이용되는 컨트롤 플로 반복 최적화 규칙에 대해서 설명한다.
도 2의 K-means 저장 프로시저의 일 실시 예에서 확인할 수 있는 바와 같이, 반복문은 반복 조건 변수의 조건 검사 결과에 따라 반복문의 내부 절차문을 여러 차례 반복하여 실행하기 위하여 제공되는 구문이다.
반복문에서 반복 실행되는 내부 절차문의 묶음을 순회(iteration)라고 하며, 반복은 특정 조건을 만족할 때까지 순회를 계속 수행하는 것이다.
저장 프로시저로 표현 가능한 반복문은 반복 내 각 순회(iteration) 간의 순서, 변경문 포함 여부, 중첩 여부 등에 따라 표 2에서와 같이 병렬 수행 가능 여부를 분류할 수 있다.
표 2는 본 발명의 실시 예에 따른 컨트롤 플로 반복문 분류 정보를 나타낸 것이다.
본 발명의 컨트롤 플로 반복 최적화 규칙은 원래 각 순회를 순차 실행하는 반복문 중에서 의존성이 존재하지 않으면서, 변경문을 포함하지 않고, 하위 반복문을 포함하지 않은 반복문에 대해서는 각 순회의 연산들을 병렬 수행함으로써 성능을 향상하고자 하는 최적화 방법이다.
특성 분류 특성 병렬 수행 여부
순회
간의
순서
Unordered 순회 간 의존성이 없는 반복 가능
Ordered 순회 간 의존성이 있는 반복 불가
변경문 미포함 순회간 일관성 오류 미발생 가능
포함 순회간 일관성 오류 발생 불가
중첩 Unnested 반복문 내에 하위 반복문이 미존재 순회간의 순서와 변경문 포함 여부에 따라 판단
Nested 반복문 내에 다른 반복문이 존재 - 상위 반복문: 불가
- 하위 반복문: 중첩 여부, 순회간의 순서와 변경문 포함 여부에 따라 판단
도 13은 본 발명의 실시 예에 따른 반복 최적화 규칙의 개념을 설명하기 위한 도면이다.
도 13에서와 같이, 구체적으로, 컨트롤 플로 반복 최적화 규칙은 단일 함수 형태로 표현되는 JIT 실행 플랜을 변환하여, 스레드화가 가능한 5개의 반복 함수(checkLoopCond(), checkRedoCond(), checkLeaveCond(), preparePartition(), processPartition())를 추출하고, 이러한 반복 함수들의 스케줄링을 담당하는 병렬 루프 스케줄러를 추가하여, 병렬 루프 스케줄러가 스레드 병렬 실행을 제어하도록 하여, 병렬 실행 가능한 반복문의 내부 절차문을 다중 스레드로 병렬 실행하도록 하는 최적화 방법이다.
도 14는 본 발명의 실시 예에 따른 반복 최적화 규칙 실행 흐름을 도시한 도면이다.
도 14에 도시된 반복문에 대한 최적화는 JIT 기반 질의 처리기(530)의 반복 최적화 실행모듈(535)에 의해 수행될 수 있다.
도 14를 참조하면, 반복 최적화 실행모듈(535)은 표 2에서와 같은 컨트롤 플로 반복문 분류 정보를 바탕으로, JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단한다(S1400).
이때, 상기 반복 최적화 실행모듈(535)은 단순 반복문, 순회간 의존성이 있는 반복문, 변경문을 포함하는 반복문, 하위 반복문을 포함하는 반복문은 최적화 대상이 아닌 것으로 판단한다.
반면, 상기 반복 최적화 실행모듈(535)은 순회간 의존성이 없는 반복문, 변경문을 포함하고 있지 않은 반복문, 하위 반복문을 포함하지 않은 반복문은 최적화 대상인 것으로 판단한다.
상기 단계 S1400 이후, 반복 최적화 실행모듈(535)은 반복문 내에서의 반복 조건 변수를 검사하고 추출한다(S1410).
특히, 상기 단계 S1410에서 반복 최적화 실행모듈(535)은 BARRIER 문과 LEAVE 문 사이의 연산문에 대한 반복 조건 변수를 검사하여, 변경 연산문 정보를 추출한다.
또한, 상기 단계 S1410에서 반복 최적화 실행모듈(535)은 LEAVE 문과 REDO 문 사이의 연산문에 대한 반복 조건 변수를 검사하여 변경 연산문 정보를 추출한다.
상기 단계 S1410 이후, 반복 최적화 실행모듈(535)은 반복문 내에서 순회 병렬화를 위한 반복 함수를 추출한다(S1420).
이때, 상기 반복 최적화 실행모듈(535)은 스레드화가 가능한 5개의 반복 함수(checkLoopCond() 함수, checkLeaveCond() 함수, checkRedoCond() 함수, processPartition() 함수, preparePartition() 함수)를 추출할 수 있다.
checkLoopCond() 함수는 반복문 내부로 들어갈지 여부를 판단하는 연산문 묶음이고, checkLeaveCond() 함수는 반복문 외부로 나갈지 여부를 판단하는 연산문 묶음이고, checkRedoCond() 함수는 반복문 내부의 처음으로 돌아갈지 여부를 판단하는 연산문 묶음이고, processPartition() 함수는 매 순회의 실제 처리/변경/검색 업무를 수행하는 연산문의 묶음이며, preparePartition() 함수는 반복 조건 변수의 값을 갱신하는 연산문의 묶음이다.
상기 단계 S1420 이후, 반복 최적화 실행모듈(535)은 단계 S1420에서 추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하고(S1430), 구성된 병렬 루프 스케줄러를 이용하여, 도 13에 도시된 바과 같이, 추출된 함수들을 병렬 처리 가능하도록 배치한다(S1440).
상기 단계 S1440에서 병렬 루프 스케줄러는 최초에 checkLoopCond() 함수를 수행하여 반복문 수행 여부를 제어하고, 매 순회마다, checkLoopCond() 함수를 수행하여 해당 순회 수행 여부를 판단한다.
그리고, 순회 수행이 필요하면, 병렬 루프 스케줄러는 processPartition() 함수와 preparePartition() 함수로 구성되는 루프 본체(Loop Body) 함수를 스레드화 하여 병렬 수행 가능하도록 배치한다.
스레드 수행 후에는 checkRedoCond() 함수를 수행하여 다음 순회 조건 검사를 대비한다. 병렬 루프 스케줄러는 checkLoopCond() 함수의 결과가 Yes일 때까지 반복문을 확인한다.
상기 단계 S1440 이후, 반복 최적화 실행모듈(535)은 JIT 실행 플랜 내 다른 반복문이 존재하는지를 판단하고(S1450), 다른 반복문이 존재하지 않으면(S1450-아니오), 반복문 최적화를 종료하고, 다른 반복문이 존재하면, 단계 S1400을 수행한다.
이상에서 설명한 본 발명의 실시 예를 구성하는 모든 구성요소들이 하나로 결합하거나 결합하여 동작하는 것으로 기재되어 있다고 해서, 본 발명이 반드시 이러한 실시예에 한정되는 것은 아니다. 즉, 본 발명의 목적 범위 안에서라면, 그 모든 구성요소들이 하나 이상으로 선택적으로 결합하여 동작할 수도 있다. 또한, 그 모든 구성요소들이 각각 하나의 독립적인 하드웨어로 구현될 수 있지만, 각 구성요소들의 그 일부 또는 전부가 선택적으로 조합되어 하나 또는 복수 개의 하드웨어에서 조합된 일부 기능 혹은 모든 기능을 수행하는 프로그램 모듈을 갖는 컴퓨터 프로그램으로서 구현될 수도 있다. 또한, 이와 같은 컴퓨터 프로그램은 USB 메모리, CD 디스크, 플래쉬 메모리 등과 같은 컴퓨터가 읽을 수 있는 기록매체(Computer Readable Media)에 저장되어 컴퓨터에 의하여 읽혀지고 실행됨으로써, 본 발명의 실시예를 구현할 수 있다. 컴퓨터 프로그램의 기록매체로서는 자기 기록매체, 광 기록매체, 캐리어 웨이브 매체 등이 포함될 수 있다.
한편, 본 발명의 JIT 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법을 실시 예에 따라 설명하였지만, 본 발명의 범위는 특정 실시 예에 한정되는 것은 아니며, 본 발명과 관련하여 통상의 지식을 가진 자에게 자명한 범위 내에서 여러 가지의 대안, 수정 및 변경하여 실시할 수 있다.
따라서, 본 발명에 기재된 실시 예 및 첨부된 도면들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시 예 및 첨부된 도면에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리 범위에 포함되는 것으로 해석되어야 할 것이다.
110, 510 : 저장 관리기
120, 520 : 인터프리터 기반 질의 처리기
121, 521 : 질의 파서
122, 522 : 질의 변환기
123, 523 : 질의 최적화기
124, 524 : 질의 실행기
500 : 데이터베이스 시스템
530 : JIT 기반 질의 처리기
531 : 질의 처리 제어모듈
532 : 질의 판단모듈
533 : 분기 최적화 실행모듈
534 : JIT 실행 플랜 생성모듈
535 : 반복 최적화 실행모듈
536 : 최적화 규칙 저장모듈
537 : 질의 처리 실행기

Claims (20)

  1. 스토리지에 저장된 데이터를 관리하는 한편, 요청에 따라 데이터를 제공하는 저장 관리기;
    입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 SQL 실행 플랜을 생성하는 인터프리터 기반 질의 처리기; 및
    상기 SQL 실행 플랜을 제공받고, 제공받은 SQL 실행 플랜 내 분기문 및 반복문에 대한 최적화를 실행한 후, 최적화된 JIT 실행 플랜을 생성하는 한편, 생성된 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하고, 생성된 질의 처리 실행기에 의해 수행된 질의 처리 결과를 제공하는 JIT 기반 질의 처리기를 포함하되,
    상기 JIT 기반 질의 처리기는,
    입력되는 SQL 실행 플랜 내 분기문에 대하여 같은 분기 조건 변수를 갖는 분기문이 연속 존재하는 경우 컨트롤 플로 분기 최적화 규칙 기반의 최적화를 실행하는 분기 최적화 실행모듈을 포함하고,
    상기 분기 최적화 실행모듈은 하나의 분기 블록 내에서 중복 연산 및 고유 연산의 묶음마다 분기 블록 1개씩 생성하여 분기 파트의 유형을 구분하여 상기 컨트롤 플로 분기 최적화 규칙 적용 여부를 판단하기 위한 분기 정보로 구성하고, 상기 분기 파트의 유형 및 다른 분기 파트와의 상대적 위치에 따라, 중복 연산자 및 고유 연산자를 앞뒤로 이동 배치하여 상기 최적화를 실행하는
    JIT 컴파일 기반 데이터베이스 시스템.
  2. 제 1 항에 있어서,
    상기 JIT 기반 질의 처리기는,
    입력되는 SQL 실행 플랜을 분석하여, JIT 컴파일 대상 질의인지를 판단하는 질의 판단모듈;
    입력되는 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하는 JIT 실행 플랜 생성모듈;
    입력되는 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하는 반복 최적화 실행모듈;
    상기 분기 최적화 실행모듈의 최적화 실행 및 상기 반복 최적화 실행모듈의 최적화 실행에 이용되는 규칙을 저장하는 최적화 규칙 저장모듈; 및
    상기 인터프리터 기반 질의 처리기로부터 제공되는 SQL 실행 플랜을 상기 질의 판단모듈로 제공하는 한편, 상기 반복 최적화 실행모듈로부터 JIT 실행 플랜을 제공받고, 제공받은 JIT 실행 플랜에 대한 질의 처리를 수행하는 질의 처리 실행기를 생성하는 질의 처리 제어모듈을 포함하는
    JIT 컴파일 기반 데이터베이스 시스템.
  3. 제 2 항에 있어서,
    상기 질의 판단모듈은 상기 SQL 실행 플랜에 대한 질의 워크로드 분석을 통해, OLTP 질의인지 OLAP 분석인지를 판단하여, OLAP 분석인 경우에 JIT 컴파일 대상 질의인 것으로 판단하는
    JIT 컴파일 기반 데이터베이스 시스템.
  4. 제 3 항에 있어서,
    상기 질의 판단모듈은 분석 함수 및 집계 함수가 모두 사용되는 경우 OLAP 분석으로 판단하는
    JIT 컴파일 기반 데이터베이스 시스템.
  5. 제 4 항에 있어서,
    상기 질의 판단모듈은 분석 함수 및 집계 함수가 사용되지 않거나 하나의 함수만 사용된 경우, 질의 선택율을 예측하여 질의 선택율이 임계치 이하이면 OLAP 분석으로 판단하는
    JIT 컴파일 기반 데이터베이스 시스템.
  6. 제 2 항에 있어서,
    상기 질의 처리 제어모듈은 상기 질의 판단모듈에 의해 SQL 실행 플랜이 JIT 컴파일 대상 질의인 것으로 판단된 경우, SQL 실행 플랜을 상기 분기 최적화 실행 모듈로 제공하고, 상기 질의 판단모듈에 의해 SQL 실행 플랜이 JIT 컴파일 대상 질의가 아닌 것으로 판단된 경우, 상기 인터프리터 기반 질의 처리기로 SQL 실행 플랜에 대한 처리를 요청하는
    JIT 컴파일 기반 데이터베이스 시스템.
  7. 제 2 항에 있어서,
    상기 질의 처리 제어모듈은 상기 분기 최적화 실행 모듈로부터 제공받은 분기문 최적화된 SQL 실행 플랜을 상기 JIT 실행 플랜 생성모듈로 제공하고, 상기 JIT 실행 플랜 생성모듈로부터의 JIT 실행 플랜을 상기 반복 최적화 실행모듈로 제공하고, 상기 반복 최적화 실행모듈로부터의 반복문 최적화된 JIT 실행 플랜을 제공받으면, 상기 질의 처리 실행기를 생성하는
    JIT 컴파일 기반 데이터베이스 시스템.
  8. 제 2 항에 있어서,
    상기 분기 최적화 실행모듈은,
    상기 컨트롤 플로 분기 최적화 규칙의 실행 결과에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 변수 이름 및 참조 위치를 조정하는
    JIT 컴파일 기반 데이터베이스 시스템.
  9. 삭제
  10. 제 2 항에 있어서,
    상기 반복 최적화 실행모듈은,
    입력된 JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단하고,
    반복 최적화 규칙을 적용할 수 있는 반복문인 경우, 반복문 내에서의 반복 조건 변수를 추출하고,
    반복문 내에서 순회 병렬화를 위한 반복 함수를 추출하고,
    추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하고,
    구성된 병렬 루프 스케줄러를 이용하여, 추출된 반복 함수들을 병렬 처리 가능하도록 배치하는
    JIT 컴파일 기반 데이터베이스 시스템.
  11. 제 10 항에 있어서,
    상기 반복 최적화 실행모듈은, 입력된 JIT 실행 플랜 내 반복문이 단순 반복문, 순회간 의존성이 있는 반복문, 변경문을 포함하는 반복문, 하위 반복문을 포함하는 반복문인 경우에 최적화 대상이 아닌 것으로 판단하고,
    입력된 JIT 실행 플랜 내 반복문이 순회간 의존성이 없는 반복문, 변경문을 포함하고 있지 않은 반복문, 하위 반복문을 포함하지 않은 반복문인 경우에 최적화 대상인 것으로 판단하는
    JIT 컴파일 기반 데이터베이스 시스템.
  12. 제 10 항에 있어서,
    상기 반복 최적화 실행모듈은, BARRIER 문과 LEAVE 문 사이의 연산문에 대한 반복 조건 변수를 검사하여, 변경 연산문 정보를 추출하고, LEAVE 문과 REDO 문 사이의 연산문에 대한 반복 조건 변수를 검사하여 변경 연산문 정보를 추출하는
    JIT 컴파일 기반 데이터베이스 시스템.
  13. 제 10 항에 있어서,
    상기 반복 최적화 실행모듈은 스레드화가 가능한 함수인 checkLoopCond() 함수, checkLeaveCond() 함수, checkRedoCond() 함수, processPartition() 함수 및 preparePartition() 함수를 추출하는JIT 컴파일 기반 데이터베이스 시스템.
  14. 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 SQL 실행 플랜을 생성하는 단계;
    생성된 상기 SQL 실행 플랜에 대해서, JIT 실행 플랜으로의 컴파일 대상 질의인지를 판단하는 단계;
    상기 SQL 실행 플랜이 JIT 실행 플랜으로의 컴파일 대상 질의가 아닌 것으로 판단되면, 인터프리터 기반으로 질의를 처리하여 결과를 제공하는 단계;
    상기 SQL 실행 플랜이 JIT 실행 플랜으로의 컴파일 대상 질의인 것으로 판단되면, 상기 SQL 실행 플랜 내 분기문이 있는 경우, 분기문에 대한 최적화를 실행하는 단계;
    상기 SQL 실행 플랜 내 분기문이 없는 경우에는 상기 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하고, 분기문에 대한 최적화가 실행된 경우에는 분기문 최적화된 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하는 단계;
    생성된 상기 JIT 실행 플랜 내 반복문이 있는 경우, 반복문에 대한 최적화를 실행하는 단계;
    상기 JIT 실행 플랜 내 반복문이 없는 경우에는 상기 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하고, 반복문에 대한 최적화가 실행된 경우에는 반복문 최적화된 JIT 실행 플랜을 기반으로 질의 처리를 수행하는 질의 처리 실행기를 생성하는 단계; 및
    생성된 질의 처리 실행기를 이용하여, 상기 JIT 실행 플랜 혹은 상기 반복문 최적화된 JIT 실행 플랜을 머신 코드로 변환하여 JIT 기반의 질의를 처리하여 결과를 제공하는 단계를 포함하되,
    상기 분기문에 대한 최적화를 실행하는 단계는,
    입력되는 SQL 실행 플랜 내 분기문에 대하여 같은 분기 조건 변수를 갖는 분기문이 연속 존재하는 경우 컨트롤 플로 분기 최적화 규칙 기반의 최적화를 실행하되,
    하나의 분기 블록 내에서 중복 연산 및 고유 연산의 묶음마다 분기 블록 1개씩 생성하여 분기 파트의 유형을 구분하여 상기 컨트롤 플로 분기 최적화 규칙 적용 여부를 판단하기 위한 분기 정보로 구성하고, 상기 분기 파트의 유형 및 다른 분기 파트와의 상대적 위치에 따라, 중복 연산자 및 고유 연산자를 앞뒤로 이동 배치하여 상기 최적화를 실행하는
    JIT 컴파일 기반 데이터베이스 시스템의 질의 처리 방법.
  15. 제 14 항에 있어서,
    상기 JIT 실행 플랜으로의 컴파일 대상 질의인지를 판단하는 단계는,
    상기 SQL 실행 플랜에 대한 질의 워크로드 분석을 통해, OLTP 질의인지 OLAP 분석인지를 판단하여, OLAP 분석인 경우에 JIT 컴파일 대상 질의인 것으로 판단하는 단계인
    JIT 컴파일 기반 데이터베이스 시스템의 질의 처리 방법.
  16. 제 14 항에 있어서,
    상기 컨트롤 플로 분기 최적화 규칙의 실행 결과에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 변수 이름 및 참조 위치를 조정하는 단계를 포함하는
    JIT 컴파일 기반 데이터베이스 시스템의 질의 처리 방법.
  17. 제 14 항에 있어서,
    상기 반복문에 대한 최적화를 실행하는 단계는,
    입력된 JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단하는 단계;
    반복 최적화 규칙을 적용할 수 있는 반복문인 경우, 반복문 내에서의 반복 조건 변수를 추출하는 단계;
    반복문 내에서 순회 병렬화를 위한 반복 함수를 추출하는 단계;
    추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하는 단계; 및
    구성된 병렬 루프 스케줄러를 이용하여, 추출된 반복 함수들을 병렬 처리 가능하도록 배치하는 단계를 포함하는
    JIT 컴파일 기반 데이터베이스 시스템의 질의 처리 방법.
  18. 입력되는 OLTP 질의, OLAP 분석 및 저장 프로시저에 대한 처리를 통해 생성되는 SQL 실행 플랜 내 분기문에 대한 최적화를 실행하는 단계;
    분기문 최적화된 SQL 실행 플랜을 변환하여 JIT 실행 플랜을 생성하는 단계;
    생성된 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하는 단계; 및
    반복문 최적화된 JIT 실행 플랜을 머신 코드로 변환하여 질의를 처리하는 단계를 포함하되,
    상기 SQL 실행 플랜 내 분기문에 대한 최적화를 실행하는 단계는,
    입력되는 SQL 실행 플랜 내 분기문에 대하여 같은 분기 조건 변수를 갖는 분기문이 연속 존재하는 경우 컨트롤 플로 분기 최적화 규칙 기반의 최적화를 실행하되,
    하나의 분기 블록 내에서 중복 연산 및 고유 연산의 묶음마다 분기 블록 1개씩 생성하여 분기 파트의 유형을 구분하여 상기 컨트롤 플로 분기 최적화 규칙 적용 여부를 판단하기 위한 분기 정보로 구성하고, 상기 분기 파트의 유형 및 다른 분기 파트와의 상대적 위치에 따라, 중복 연산자 및 고유 연산자를 앞뒤로 이동 배치하여 상기 최적화를 실행하는
    JIT 컴파일 기반 데이터베이스 시스템의 저장 프로시저 최적화 방법.
  19. 제 18 항에 있어서,
    상기 컨트롤 플로 분기 최적화 규칙의 실행 결과에 따라 위치가 변경된 연산문들의 원래 위치와 이동 위치를 고려하여, 변수 이름 및 참조 위치를 조정하는 단계를 포함하는
    JIT 컴파일 기반 데이터베이스 시스템의 저장 프로시저 최적화 방법.
  20. 제 18 항에 있어서,
    상기 JIT 실행 플랜 내 반복문에 대한 최적화를 실행하는 단계는,
    입력된 JIT 실행 플랜 내 반복문이 반복 최적화 규칙을 적용할 수 있는 반복문인지를 판단하는 단계;
    반복 최적화 규칙을 적용할 수 있는 반복문인 경우, 반복문 내에서의 반복 조건 변수를 추출하는 단계;
    반복문 내에서 순회 병렬화를 위한 반복 함수를 추출하는 단계;
    추출된 반복 함수에 대한 스케줄링을 제어하는 병렬 루프 스케줄러를 구성하는 단계; 및
    구성된 병렬 루프 스케줄러를 이용하여, 추출된 반복 함수들을 병렬 처리 가능하도록 배치하는 단계를 포함하는
    JIT 컴파일 기반 데이터베이스 시스템의 저장 프로시저 최적화 방법.
KR1020180006721A 2018-01-18 2018-01-18 Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법 KR102511927B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020180006721A KR102511927B1 (ko) 2018-01-18 2018-01-18 Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법
US16/112,204 US10754857B2 (en) 2018-01-18 2018-08-24 Database system based on JIT compilation, query processing method thereof, and stored procedure optimization method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180006721A KR102511927B1 (ko) 2018-01-18 2018-01-18 Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법

Publications (2)

Publication Number Publication Date
KR20190088318A KR20190088318A (ko) 2019-07-26
KR102511927B1 true KR102511927B1 (ko) 2023-03-21

Family

ID=67214074

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180006721A KR102511927B1 (ko) 2018-01-18 2018-01-18 Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법

Country Status (2)

Country Link
US (1) US10754857B2 (ko)
KR (1) KR102511927B1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11429604B2 (en) * 2019-09-10 2022-08-30 Oracle International Corporation Techniques of heterogeneous hardware execution for SQL analytic queries for high volume data processing
CN112711602B (zh) * 2019-10-25 2023-04-28 金篆信科有限责任公司 一种存储过程的运行方法、装置,数据库系统及存储介质
CN111125147B (zh) * 2019-12-12 2021-06-01 跬云(上海)信息科技有限公司 基于扩展预计算模型和sql函数的超大集合分析方法及装置
CN111459968A (zh) * 2020-03-27 2020-07-28 深圳市金蝶天燕云计算股份有限公司 数据查询方法、数据查询系统及计算机存储介质
CN112347126B (zh) * 2021-01-05 2021-04-02 平安科技(深圳)有限公司 大数据处理方法、装置、设备及介质
KR102535613B1 (ko) 2021-02-15 2023-05-23 한국전자통신연구원 다변량 세트에서의 매개 변량 및 매개 영향도 추출 방법 및 시스템
CN115640278B (zh) * 2022-09-30 2023-08-08 北京柏睿数据技术股份有限公司 一种数据库性能智能优化的方法及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7392259B2 (en) 2004-12-14 2008-06-24 Electronics And Telecommunications Research Institute Method and system for supporting XQuery trigger in XML-DBMS based on relational DBMS
KR100918117B1 (ko) 2007-11-29 2009-09-22 한국전자통신연구원 센서 네트워크 관리 장치 및 그 방법
US8996503B2 (en) 2010-10-04 2015-03-31 Sybase, Inc. Query plan optimization for prepared SQL statements
US10176236B2 (en) 2014-07-29 2019-01-08 Microsoft Technology Licensing, Llc Systems and methods for a distributed query execution engine
US10031940B2 (en) * 2015-09-24 2018-07-24 Futurewei Technologies, Inc. System and method for database query

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
M. Lee et al., A JIT Compilation-based Unified SQL Query Optimization System, 2016 6th International Conference on IT Convergence and Security(2016.11.10.)*
T. Neumann, Efficiently Compiling Efficient Query Plans for Modern Hardware, Proceedings of the VLDB Endowment Vol.4, pp539-550(2011)*

Also Published As

Publication number Publication date
KR20190088318A (ko) 2019-07-26
US20190220535A1 (en) 2019-07-18
US10754857B2 (en) 2020-08-25

Similar Documents

Publication Publication Date Title
KR102511927B1 (ko) Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법
Begoli et al. Apache calcite: A foundational framework for optimized query processing over heterogeneous data sources
Boehm et al. On optimizing operator fusion plans for large-scale machine learning in systemml
Tahboub et al. How to architect a query compiler, revisited
Palkar et al. Weld: A common runtime for high performance data analytics
Ramachandra et al. Froid: Optimization of imperative programs in a relational database
Essertel et al. Flare: Optimizing Apache Spark with Native Compilation for {Scale-Up} Architectures and {Medium-Size} Data
Hueske et al. Opening the black boxes in data flow optimization
Zhou et al. SCOPE: parallel databases meet MapReduce
Kunft et al. An intermediate representation for optimizing machine learning pipelines
US8239847B2 (en) General distributed reduction for data parallel computing
US20180165077A1 (en) Source code translation
US11023443B2 (en) Collaborative planning for accelerating analytic queries
Groß et al. Bridging two worlds with RICE: integrating R into the SAP in-memory computing engine
Park et al. End-to-end optimization of machine learning prediction queries
US11132366B2 (en) Transforming directed acyclic graph shaped sub plans to enable late materialization
KR20180035035A (ko) 데이터 엔진에서의 질의 최적화 방법 및 장치
Swarna et al. Apache Pig-a data flow framework based on Hadoop Map Reduce
Jungmair et al. Designing an open framework for query optimization and compilation
US20130060753A1 (en) Optimization Method And Apparatus
Schlaipfer et al. Optimizing big-data queries using program synthesis
Fegaras et al. Compile-time code generation for embedded data-intensive query languages
Abeysinghe et al. Architecting intermediate layers for efficient composition of data management and machine learning systems
Xu et al. Niijima: Sound and automated computation consolidation for efficient multilingual data-parallel pipelines
Preethi et al. Big data analytics using Hadoop tools—Apache Hive vs Apache Pig

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant