KR102177064B1 - 다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치 - Google Patents

다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치 Download PDF

Info

Publication number
KR102177064B1
KR102177064B1 KR1020190147583A KR20190147583A KR102177064B1 KR 102177064 B1 KR102177064 B1 KR 102177064B1 KR 1020190147583 A KR1020190147583 A KR 1020190147583A KR 20190147583 A KR20190147583 A KR 20190147583A KR 102177064 B1 KR102177064 B1 KR 102177064B1
Authority
KR
South Korea
Prior art keywords
join
query
sub
graph
gpu
Prior art date
Application number
KR1020190147583A
Other languages
English (en)
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 KR1020190147583A priority Critical patent/KR102177064B1/ko
Application granted granted Critical
Priority to US17/093,724 priority patent/US11409746B2/en
Publication of KR102177064B1 publication Critical patent/KR102177064B1/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
    • G06F16/24544Join order 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
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • 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/2428Query predicate definition using graphical user interfaces, including menus and forms
    • 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/24532Query optimisation of parallel queries
    • 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/24535Query rewriting; Transformation of sub-queries or views
    • 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
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Operations Research (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명을 일 실시예에 따른 데이터 베이스 쿼리 실행 방법은, 데이터베이스의 입력 쿼리를 획득하는 단계, 상기 데이터베이스의 테이블에 대응되는 정점 및 테이블간 조인 정보에 대응되는 간선으로 구성된 조인 그래프(join graph)를 생성하는 단계, 상기 조인 그래프를 복수의 서브 그래프로 분할하는 단계, 상기 입력 쿼리에 대하여, 상기 복수의 서브 그래프를 이용하여 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성하는 단계, 비용 모델을 기초로 상기 타겟 쿼리의 실행 계획을 최적화하는 단계, GPU 또는 CPU 메모리의 가용 크기를 기초로, 상기 타겟 쿼리에 포함된 다항 조인 연산자의 테이블 정렬 알고리즘을 획득하는 단계, 상기 다항 조인 연산자의 테이블에 포함된 하나 이상의 조인 컬럼의 정렬 순서를 결정하는 단계 및 상기 하나 이상의 조인 컬럼의 정렬 순서를 기초로, 상기 복수의 서브 그래프에 대한 연산을 수행하는 단계를 포함하는,

Description

다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치{ METHOD AND APPARATUS FOR PROCESSING QUERY USING N-ARY JOIN OPERATORS }
본 발명은 데이터 베이스의 쿼리를 처리하는 방법에 관한 것으로서, 보다 구체적으로 다항 조인 연산자(N-ary Join Operator)를 이용하여 쿼리를 빠르게 처리하기 위한 쿼리 실행 계획을 생성하는 방법 및 그 장치 관한 것이다.
관계형 데이터 베이스의 쿼리 처리 기술이 다양한 분야에서 응용됨에 따라, 점차 복잡한 형태의 쿼리의 처리가 요구되고 있다. 특히, 비고유키들 사이의 조인(foreign-key-foreign-key join, FK-FK join) 을 포함한 쿼리가 점점 늘어가고 있는 추세이나, 비고유키의 비단일성 문제로 쿼리 처리시 너무 큰 중간데이터의 생성으로 인해 쿼리 처리 성능이 느려지거나 아예 쿼리 처리에 실패하는 경우가 발생한다. 대부분의 인메모리 시스템들은 해시(hash) 조인 알고리즘을 이용하여 조인 연산을 처리한다. 이 경우, 해시 테이블 탐색 과정에서 해시 테이블에 포함된 모든 중복키에 대하여 현재의 조인키와의 비교를 수행하기 때문에 많은 양의 연산 비용이 요구된다.
이를 해결하기 위해 다항 조인 연산 알고리즘의 연구가 수행되고 있으나, 상기 다항 조인 연산 알고리즘을 이용하여 정렬 연산 수행함에 있어 CPU만으로 다항 조인 연산 처리에 필요한 정렬 연산 수행시 동작 효율성이 매우 떨어지는 한계가 존재한다. 또한, 성능 문제를 해결하기 위해 GPU와 같은 이기종 쿼리 처리 가속시를 활용하더라도, 다항 조인 처리 연산과 그에 따른 정렬 연산의 상호 연관성을 잘 고려하지 못 할 경우 CPU와 GPU를 동시에 활용하더라도 성능상의 비효율성을 유발한다.
한국등록특허 10-1862779 (2016.11.01)
본 발명의 일 실시예에 따르면, 복잡한 조인 쿼리에 대해 기존의 이항 조인 연산자와 다항 조인 연산자를 모두 활용해 빠른 쿼리 처리가 가능한 효율적인 쿼리 실행 계획을 제공할 수 있다.
본 발명의 다른 실시예에 따르면, 입력된 쿼리를 조인 그래프로 표현하고, 해당 조인 그래프의 분석을 통해 입력 쿼리를 효율적으로 처리 할 수 있는 쿼리 처리 계획을 제공할 수 있다.
본 발명의 또 다른 실시예에 따르면, 쿼리 처리 비용 분석을 통해 다항 연산자를 활용한 쿼리 실행 계획과 이항 조인 연산만을 활용한 기존의 쿼리 실행 계획을 비교하여 주어진 쿼리 처리를 위한 쿼리 최적화 기술을 제공할 수 있다.
본 발명의 또 다른 실시예에 따르면, CPU와 GPU 가속기를 동시에 활용하여 입력된 쿼리에 대한 다항 연산자를 포함한 쿼리 실행 계획을 고속으로 처리할 수 있다.
그러나 이러한 과제는 예시적인 것으로, 이에 의해 본 발명의 범위가 한정되는 것은 아니다.
본 발명의 일 실시예에 따른 쿼리 처리 방법은 데이터베이스의 입력 쿼리를 획득하고, 상기 데이터베이스의 테이블에 대응되는 정점 및 테이블간 조인 정보에 대응되는 간선으로 구성된 조인 그래프(join graph)를 생성하고, 상기 조인 그래프를 복수의 서브 그래프로 분할하고, 상기 입력 쿼리를 기초로 상기 복수의 서브 그래프를 이용하여 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성하고, 비용 모델을 기초로 상기 타겟 쿼리의 실행 계획을 최적화하고, GPU 또는 CPU 메모리의 가용 크기를 기초로, 상기 타겟 쿼리에 포함된 다항 조인 연산자의 테이블 정렬 알고리즘을 획득하고, 상기 다항 조인 연산자의 테이블에 포함된 하나 이상의 조인 컬럼의 정렬 순서를 결정하고, 상기 하나 이상의 조인 컬럼의 정렬 순서를 기초로, 상기 복수의 서브 그래프에 대한 연산을 수행할 수 있다.
일 실시예에서 상기 조인 그래프를 생성하는 단계는 상기 입력 쿼리에 포함된 조인 술어 정보(join predicate)를 이용하여 상기 조인 그래프를 생성하는 단계를 포함하고, 상기 조인 그래프는, 상기 정점에 대한 테이블 타입 정보를 포함하고, 상기 간선에 대한 술어 정보 및 조인 타입 정보를 더 포함할 수 있다.
일 실시예에서 상기 복수의 서브 그래프는, 참조키-참조키 조인 타입과 대응되는 간선으로만 구성된 제1 서브 그래프 및 고유키-참조키 조인 타입과 대응되는 간선을 포함하는 제2 서브 그래프를 포함할 수 있다.
일 실시예에서 상기 제2 서브 그래프는, 고유키-참조키 조인 타입과 대응되는 복수의 간선으로 구성되고, 상기 복수의 간선과 연결된 공통 정점은 사실 테이블(fact table) 타입의 테이블과 대응될 수 있다.
일 실시예에서 상기 타겟 쿼리의 실행 계획을 생성하는 단계는, 상기 제2 서브 그래프의 개수를 기초로 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성하는 단계를 포함할 수 있다.
일 실시예에서 타겟 쿼리의 실행 계획을 생성하는 단계는 상기 복수의 서브 그래프 중 상기 제1 서브 그래프가 하나인 경우, 복수의 제2 서브 그래프 각각을 이용하여 서브 쿼리를 생성하고, 상기 서브 쿼리들이 제1 서브 그래프에 대응되는 다항 조인 연산자의 자식(child)으로 구성된 타겟 쿼리의 실행 계획을 생성하는 단계를 포함할 수 있다.
일 실시예에서 상기 서브 쿼리는, 상기 복수의 서브 그래프 중 상기 제1 서브 그래프가 복수인 경우 상기 제1 서브 그래프에 포함된 고유키-참조키 조인 타입에 대응되는 간선들의 집합을 기초로 생성될 수 있다.
일 실시예에서 상기 타겟 쿼리의 실행 계획을 생성하는 단계는, 복수의 제1 서브 그래프에 대하여, i 번째 제1 서브 그래프내의 정점을 포함하는 j 번째 제1 서브 그래프에 대한 서브쿼리가 존재하는 경우, i 번째 제1 서브 그래프와 그 자식들에 대해 생성된 서브쿼리가 j 번째 제1 서브 그래프에 대한 서브쿼리의 자식으로 구성된 타겟 쿼리의 실행 계획을 생성할 수 있다.
일 실시예에서 상기 타겟 쿼리의 실행 계획을 생성하는 단계는, 상기 입력 쿼리 중 상기 복수의 서브 그래프에 대응되는 서브 쿼리를 제외한 나머지 쿼리가 존재하는 경우, 상기 나머지 쿼리에 대응되는 추가 서브 쿼리를 생성하고, 제1 서브 그래프에 대한 서브 쿼리가 상기 추가 서브 쿼리의 자식으로 구성된 타겟 쿼리의 실행 계획을 생성할 수 있다.
일 실시예에서 상기 타겟 쿼리의 실행 계획을 최적화하는 단계는 상기 타겟 쿼리에 대한 복수의 후보 쿼리 실행 계획을 생성하고, 지정된 비용 모델에 기초하여 상기 복수의 후보 쿼리 실행 계획 각각의 처리 비용을 연산하고, 최소 처리 비용의 후보 쿼리 실행 계획을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는 상기 다항 조인 연산자의 각 자식 테이블에 대해 테이블의 카디널리티(Cardinality), 조인 컬럼의 개수, GPU 장치 사용 가능 유무를 기초로 GPU 사용 가능 여부를 판단하고. GPU 사용이 가능한 경우, 테이블의 카디널리티와 상기 테이블의 정렬 대상 컬럼 크기를 이용하여 테이블 정렬 시 필요한 최소 메모리 공간의 크기를 계산하고, 상기 최소 메모리 공간의 크기와 GPU 가용 크기를 비교하여 상기 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는, GPU 가용 크기보다 상기 최소 메모리 공간의 크기가 크고 정렬 대상 컬럼이 하나인 경우, 이기종 (Heterogeneous) 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는, GPU 가용 크기보다 상기 최소 메모리 공간이 크고 정렬 대상 컬럼이 복수개인 경우 CPU 장치 기반의 비교(comparison) 기반 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는, GPU 사용이 가능하고 모든 자식 테이블에 대해 GPU 가용 크기보다 상기 최소 메모리 공간이 작으며, 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 하나인 경우 GPU 장치 기반의 비-비교(non-comparison) 기반의 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는, GPU 사용이 가능하고 모든 자식 테이블에 대해 GPU 가용 크기보다 상기 최소 메모리 공간이 작으며, 상기 정렬 대상 컬럼이 복수개인 경우 GPU 장치 기반의 비교 기반 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는, GPU 사용이 불가능하고 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 하나인 경우 CPU 장치 기반의 비-비교(non-comparison) 기반의 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 정렬 알고리즘을 획득하는 단계는, GPU 사용이 불가능하고 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 복수개인 경우 CPU 장치 기반의 비교 기반 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 상기 복수의 서브 그래프는, 참조키-참조키 조인 타입과 대응되는 간선으로만 구성된 제1 서브 그래프 및 고유키-참조키 조인 타입과 대응되는 간선을 포함하는 제2 서브 그래프를 포함하고, 상기 하나 이상의 조인 컬럼의 정렬 순서를 결정하는 단계는, 상기 제1 서브 그래프에 대해 하나 이상의 전역 조인 변수를 추출하고, 상기 추출된 하나 이상의 전역 조인 변수(
Figure 112019117985544-pat00001
) 각각에 대하여, 상기 조인 그래프 에서 해당 전역 조인 변수를 조인 컬럼으로 포함하는 간선의 집합(
Figure 112019117985544-pat00002
), 상기 전역 조인 변수를 포함하는 정점의 집합(
Figure 112019117985544-pat00003
) 및 정점에 해당하는 데이터베이스 테이블들의 카디널리티의 합(
Figure 112019117985544-pat00004
) 계산하고, 상기 하나 이상의 전역 조인 변수(
Figure 112019117985544-pat00005
) 각각에 대응되는 튜플
Figure 112019117985544-pat00006
을 획득하고, 값을 기준으로 상기 획득된 하나 이상의 튜플을 정렬하고, 상기 정렬된 튜플을 기초로, 각각의 튜플에 대응되는 전역 조인 변수간 정렬 순서를 결정하고, 상기 각각의 전역 조인 변수를 포함하는 하나 이상의 조인 컬럼의 정렬 순서를 결정할 수 있다.
일 실시예에서 상기 복수의 서브 그래프에 대한 연산을 수행하는 단계는, 하나 이상의 제2 서브 그래프에 포함된 복수의 서브 쿼리 간 처리 순서를 결정하고, 상기 복수의 서브 쿼리 간 결정된 처리 순서에 따라, 상기 복수의 서브 쿼리의 실행 및 상기 복수의 서브 쿼리의 실행 결과의 정렬을 병렬적으로 수행할 수 있다.
일 실시예에서 상기 복수의 서브 쿼리 간 결정된 처리 순서에 따라, 상기 복수의 서브 쿼리의 실행 및 상기 복수의 서브 쿼리의 실행 결과의 정렬을 병렬적으로 수행하는 단계는, 상기 서브 쿼리(
Figure 112019117985544-pat00007
)의 실행 결과 데이터의 크기가 GPU 메모리 크기보다 작은 경우, GPU를 이용하여 상기 서브 쿼리(
Figure 112019117985544-pat00008
)의 실행 결과 데이터의 정렬 및 다음 서브 쿼리(
Figure 112019117985544-pat00009
)의 실행을 병렬적으로 수행하고, 상기 서브 쿼리(
Figure 112019117985544-pat00010
) 의 실행 결과 데이터의 크기가 GPU 메모리 크기보다 큰 경우, GPU를 이용하여 이기종 정렬 알고리즘의 정렬 단위(chunk)의 중간 결과 데이터의 정렬 및 서브 쿼리(
Figure 112019117985544-pat00011
)의 실행을 병렬적으로 수행할 수 있다.
일 측에 따르면, 복잡한 관계형 데이터베이스 쿼리에 대해 다항 연산자를 활용할 수 있는 쿼리 처리 계획을 생성하여 쿼리 처리 성능을 향상시킬 수 있다.
도 1은 본 발명의 일 실시예에 따른 쿼리 실행 장치의 구성을 설명하기 위한 도면이다.
도 2는 본 발명의 일 실시예에 따른 쿼리 실행 장치의 동작을 설명하기 위한 블록도이다.
도 3은 본 발명의 일 실시예에 따른 쿼리 실행 방법의 순서도이다.
도 4는 본 발명의 일 실시예에 따른 조인 그래프의 예시도이다.
도 5는 본 발명의 일 실시예에 따라 핵심 서브 그래프가 하나인 조인 그래프를 분할하는 방법을 설명하기 위한 도면이다.
도 6은 본 발명의 일 실시예에 따라 조인 그래프 분해를 활용하여 쿼리의 실행 계획을 생성하는 방법을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시예에 따라 핵심 서브 그래프가 하나인 경우 다항 조인 연산자를 포함하는 쿼리의 실행 계획을 생성하는 방법의 순서도이다.
도 8은 본 발명의 일 실시예에 따른 하나 이상의 핵심 서브 그래프를 포함하는 조인 그래프의 예시도이다.
도 9는 본 발명의 일 실시예에 따른 하나 이상의 핵심 서브 그래프를 포함하는 조인 그래프를 분할하는 방법을 설명하기 위한 도면이다.
도 10은 본 발명의 일 실시예에 따른 비용 모델을 기초로 타겟 쿼리의 실행 계획을 최적화하는 방법을 설명하기 위한 도면이다.
도 11은 본 발명의 일 실시예에 따른 비 핵심 서브 그래프가 자식인 핵심 서브 그래프를 처리하는 방법을 설명하기 위한 도면이다.
도 12는 본 발명의 일 실시예에 따른 핵심 서브 그래프의 자식인 비 핵심서브 그래프를 정렬하기 위해 조인 변수들의 정렬 순서를 결정하는 방법을 설명하기 위한 도면이다.
도 13은 본 발명의 일 실시예에 따른 핵심 서브 그래프의 예시도이다.
도 14는 본 발명의 일 실시예에 따라 정렬 알고리즘 선택하고 정렬 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 15는 도 16 및 도 17에 도시된 심볼의 의미를 설명하기 위한 표이다..
도 16은 본 발명의 일 실시예에 따른 이항 조인 연산만을 포함한 쿼리 실행 계획의 처리 비용을 계산하는 방법의 순서도이다.
도 17은 본 발명의 일 실시예에 따른 다항 조인연산을 포함한 쿼리 실행 계획의 처리 비용을 계산하는 방법의 순서도이다.
이하, 본 개시의 다양한 실시예가 첨부된 도면과 연관되어 기재된다. 본 개시의 다양한 실시예는 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들이 도면에 예시되고 관련된 상세한 설명이 기재되어 있다. 그러나, 이는 본 개시의 다양한 실시예를 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 개시의 다양한 실시예의 사상 및 기술 범위에 포함되는 모든 변경 및/또는 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 도면의 설명과 관련하여, 유사한 구성요소에 대해서는 유사한 참조 부호가 사용되었다.
본 개시의 다양한 실시예에서 사용될 수 있는 "포함한다" 또는 "포함할 수 있다" 등의 표현은 개시(disclosure)된 해당 기능, 동작 또는 구성요소 등의 존재를 가리키며, 추가적인 하나 이상의 기능, 동작 또는 구성요소 등을 제한하지 않는다. 또한, 본 개시의 다양한 실시예에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
본 개시의 다양한 실시예에서 "또는" 등의 표현은 함께 나열된 단어들의 어떠한, 그리고 모든 조합을 포함한다. 예를 들어, "A 또는 B"는, A를 포함할 수도, B를 포함할 수도, 또는 A 와 B 모두를 포함할 수도 있다.
본 개시의 다양한 실시예에서 사용된 "제1", "제2", "첫째", 또는 "둘째" 등의 표현들은 다양한 실시예들의 다양한 구성요소들을 수식할 수 있지만, 해당 구성요소들을 한정하지 않는다. 예를 들어, 상기 표현들은 해당 구성요소들의 순서 및/또는 중요도 등을 한정하지 않는다. 상기 표현들은 한 구성요소를 다른 구성요소와 구분하기 위해 사용될 수 있다. 예를 들어, 제1 사용자 기기와 제2 사용자 기기는 모두 사용자 기기이며, 서로 다른 사용자 기기를 나타낸다. 예를 들어, 본 개시의 다양한 실시예의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소가 상기 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 상기 어떤 구성요소와 상기 다른 구성요소 사이에 새로운 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소와 상기 다른 구성요소 사이에 새로운 다른 구성요소가 존재하지 않는 것으로 이해될 수 있어야 할 것이다.
본 개시의 다양한 실시예에서 사용한 용어는 단지 특정일 실시예를 설명하기 위해 사용된 것으로, 본 개시의 다양한 실시예를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 개시의 다양한 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다.
일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 개시의 다양한 실시예에서 명백하게 정의되지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
도 1은 본 발명의 일 실시예에 따른 쿼리 실행 장치의 내부 구성을 설명하기 위한 도면이다.
본 발명의 일 실시예에 따른 데이터베이스 쿼리 실행 장치(100)는 데이터베이스 테이블들 사이의 조인 술어(join predicate) 정보를 이용하여, 데이터베이스의 테이블을 정점으로 대응시키고 테이블간 조인 정보를 간선으로 대응시킬 수 있다. 이후, 쿼리 실행 장치(100)는 전술한 정점 및 간선으로 구성된 조인 그래프(join graph)를 생성할 수 있고, 상기 조인 그래프를 데이터베이스 테이블의 타입 정보와 조인 술어에 대한 세부 정보를 더 포함할 수 있다.
그리고 일 실시예에 따른 쿼리 실행 장치(100)는 조인 그래프에 포함된 테이블의 세부 정보와 테이블들 간의 조인 연산의 세부 정보를 활용하여 조인 그래프를 분해할 수 있다. 또한, 쿼리 실행 장치(100)는 입력 쿼리를 재작성하여 다항 조인 연산자를 포함한 쿼리 실행 계획을 하는 타겟 쿼리의 실행 계획을 생성할 수 있다. 이 때 쿼리 실행 장치(100)는 타겟 쿼리에 대하여 가능한 모든 후보 쿼리 실행 계획을 생성하고, 각각의 후보 쿼리 실행 계획에 대한 쿼리 최적화를 수행하여 최저 비용의 쿼리 실행 계획을 선택 할 수 있다.
쿼리 실행 장치(100)는 선택된 쿼리 실행 계획에 다항 조인 연산자가 포함되어 있을 경우, 각 다항 조인 연산자의 입력 테이블들을 대상으로 정렬 알고리즘을 선택할 수 있다. 또한, 각 다항 조인 연산자의 입력으로 사용된 테이블들의 조인 컬럼들간 정렬 순서를 정하여 쿼리 실행 계획을 처리할 수 있다. 전술한 쿼리 실행 장치에 대한 보다 상세한 설명은 이하 관련 도면에서 후술한다.
일 실시예에서 쿼리 실행 장치(100)는 입출력 인터페이스(102), 메모리(101), 프로세서(103) 및 통신 모듈(104)을 포함할 수 있다. 메모리(101)는 컴퓨터에서 판독 가능한 기록 매체로서, RAM(random access memory), ROM(read only memory) 및 디스크 드라이브와 같은 비소멸성 대용량 기록장치(permanent mass storage device)를 포함할 수 있다. 또한, 메모리(101)에는 쿼리 실행 장치(100)를 제어하기 위한 프로그램 코드 및 설정, 데이터 베이스 테이블 정보, 조인 그래프 정보 및 쿼리 실행 계획이 일시적 또는 영구적으로 저장될 수 있다.
프로세서(103)는 기본적인 산술, 로직 및 입출력 연산을 수행함으로써, 컴퓨터 프로그램의 명령을 처리하도록 구성될 수 있다. 명령은 메모리(101) 또는 통신 모듈(104)에 의해 프로세서(103)로 제공될 수 있다. 예를 들어 프로세서(103)는 메모리(101)와 같은 기록 장치에 저장된 프로그램 코드에 따라 수신되는 명령을 실행하도록 구성될 수 있다.
통신 모듈(104)은 네트워크를 통해 외부 장치와 통신하기 위한 기능을 제공할 수 있다. 일례로, 쿼리 실행 장치(100)의 프로세서(103)가 메모리(101)와 같은 기록 장치에 저장된 프로그램 코드에 따라 생성한 요청이 통신 모듈(104)의 제어에 따라 네트워크를 통해 외부 장치로 전달될 수 있다. 역으로, 외부 장치의 프로세서의 제어에 따라 제공되는 제어 신호나 명령, 컨텐츠, 파일 등이 네트워크를 거쳐 통신 모듈(104)을 통해 쿼리 실행 장치(100)로 수신될 수 있다. 예를 들어 통신 모듈(104)을 통해 수신된 외부 장치의 제어 신호나 명령 등은 프로세서(103)나 메모리(101)로 전달될 수 있고, 컨텐츠나 파일 등은 쿼리 실행 장치(100)가 더 포함할 수 있는 저장 매체로 저장될 수 있다.
또한, 통신 모듈(104)은 외부 장치와 네트워크를 통해 통신할 수 있다. 통신 방식은 제한되지 않지만, 네트워크는 근거리 무선통신망일 수 있다. 예를 들어, 네트워크는 블루투스(Bluetooth), BLE(Bluetooth Low Energy), Wifi 통신망일 수 있다.
또한, 입출력 인터페이스(102)는 사용자의 입력을 수신하고, 출력 데이터를 디스플레이 할 수 있다. 일 실시예에 따른 입출력 인터페이스(102)는 입력 쿼리 정보를 입력 받을 수 있고, 재작성 된 타겟 쿼리의 실행 계획을 출력할 수 있다.
또한, 다른 실시예들에서 쿼리 실행 장치(100)는 도 1의 구성요소들보다 더 많은 구성요소들을 포함할 수도 있다. 그러나, 대부분의 종래기술적 구성요소들을 명확하게 도시할 필요성은 없다. 예를 들어, 쿼리 실행 장치(100)는 쿼리 실행 장치의 내부 구성요소들에 전력을 공급하는 배터리 및 충전 장치를 포함할 수 있고, 상술한 입출력 장치 중 적어도 일부를 포함하도록 구현되거나 또는 트랜시버(transceiver), GPS(Global Positioning System) 모듈, 각종 센서, 데이터베이스 등과 같은 다른 구성요소들을 더 포함할 수도 있다.
도 2는 본 발명의 일 실시예에 따른 쿼리 실행 장치의 동작을 설명하기 위한 블록도이다.
일 실시예에 따른 쿼리 실행 장치(100)는 쿼리 실행 계획 생성기(120) 및 쿼리 실행 계획 처리기(130)를 포함할 수 있다.
일 실시예에서 쿼리 실행 계획 생성기(120)는 조인 그래프 생성 모듈(121), 조인 그래프 분할 모듈(122), 쿼리 재작성 모듈(123), 비용 기반 쿼리 최적화 모듈(124), 정렬 알고리즘 선택 모듈(125) 및 정렬 순서 결정 모듈(126)을 포함할 수 있다.
일 실시예에서 조인 그래프 생성 모듈(121)은 데이터베이스의 테이블에 대응되는 정점 및 테이블간 조인 정보에 대응되는 간선으로 구성된 조인 그래프(join graph)를 생성할 수 있다. 보다 상세한 설명은 이하 도 4 내지 도 7에서 후술한다.
일 실시예에서 조인 그래프 분할 모듈(122)은 조인 그래프를 복수의 서브 그래프로 분할할 수 있다. 보다 상세한 설명은 이하 도 5에서 후술한다.
일 실시예에서 쿼리 재작성 모듈(123)은 입력 쿼리를 기초로 상기 복수의 서브 그래프를 이용하여 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성할 수 있다. 보다 상세한 설명은 이하 도 6 내지 도 9에서 후술한다.
일 실시예에서 비용 기반 쿼리 최적화 모듈(124)은 지정된 비용 모델을 기초로 상기 타겟 쿼리의 실행 계획을 최적화할 수 있다. 보다 상세한 설명은 도 10, 도 16 및 도 17 에서 후술한다.
일 실시예에서 정렬 알고리즘 선택 모듈(125)은 GPU 또는 CPU 메모리의 가용 크기를 기초로, 상기 타겟 쿼리에 포함된 다항 조인 연산자의 테이블 정렬 알고리즘을 획득할 수 있다. 보다 상세한 설명은 도 14에서 후술한다.
일 실시예에서 정렬 순서 결정 모듈은 다항 조인 연산자의 테이블에 포함된 하나 이상의 조인 컬럼의 정렬 순서를 결정할 수 있다. 보다 상세한 설명은 도 12에서 후술한다.
일 실시예에 따른 쿼리 실행 계획 처리기(130)는 해당 분야에서 통상적으로 포함하는 물리적 관계형 연산자(미도시)를 포함하고, 본 발명의 몇몇 실시예에서 다항 조인 연산자(131), CPU 기반 정렬 연산자(132) 및 GPU 기반 정렬 연산자(133)를 더 포함할 수 있다. 또한, 일 실시예에 따른 쿼리 실행 계획 처리기는 핵심 서브 그래프의 쿼리 처리기(134), 비 핵심서브 그래프의 쿼리 처리기(135) 및 나머지 쿼리 처리기(136)를 포함할 수 있다. 일 실시예에서 나머지 쿼리 처리기(136)는 쿼리 실행 계획 중 핵심 서브 그래프 및 비 핵심서브 그래프를 처리하기 위한 쿼리 실행 계획을 제외한 부분을 처리할 수 있다. 다항 조인 연산자(131), CPU 정렬 연산자(132) 및 GPU 정렬 연산자(133)의 동작에 대한 상세한 설명은 이하 도 11에서 후술하며, 쿼리 처리기(134, 135, 136)의 동작에 대한 상세한 설명은 도 6에서 상세히 후술한다.
도 3은 본 발명의 일 실시예에 따른 쿼리 실행 방법의 순서도이다.
단계 S110에서 일 실시예에 따른 쿼리 실행 장치는 데이터베이스의 입력 쿼리를 획득할 수 있다.
단계 S120에서 일 실시예에 따른 쿼리 실행 장치는 데이터베이스의 테이블에 대응되는 정점 및 테이블간 조인 정보에 대응되는 간선으로 구성된 조인 그래프(join graph)를 생성할 수 있다. 일 실시예에서 쿼리 실행 장치는 입력 쿼리에 포함된 조인 술어 정보(join predicate)를 이용하여 상기 조인 그래프를 생성할 수 있고, 조인 그래프는 정점에 대한 테이블 타입 정보를 포함하고, 상기 간선에 대한 술어 정보 및 조인 타입 정보를 더 포함할 수 있다.
단계 S130에서 일 실시예에 따른 쿼리 실행 장치는 조인 그래프를 복수의 서브 그래프로 분할할 수 있다. 일 실시예에서 전술한 복수의 서브 그래프는 참조키-참조키 조인 타입(foreign-key-foreign-key join, FK-FK join)과 대응되는 간선으로만 구성된 제1 서브 그래프 및 고유키-참조키 조인 타입(primary-key-foreign-key join, PK-FK 조인)과 대응되는 간선을 포함하는 제2 서브 그래프를 포함할 수 있다. 이하, 제1 서브 그래프는 핵심 서브 그래프(Core subgraph)일 수 있고, 제2 서브 그래프는 비 핵심서브 그래프(Non-core subgraph)임을 가정하여 설명한다.
일 실시예에서 제2 서브 그래프는, 고유키-참조키 조인 타입과 대응되는 복수의 간선으로 구성되고, 상기 복수의 간선과 연결된 공통 정점은 사실 테이블(fact table) 타입의 테이블과 대응될 수 있다.
단계 S140에서 일 실시예에 따른 쿼리 실행 장치는 입력 쿼리에 대하여, 복수의 서브 그래프를 이용하여 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성할 수 있다. 일 실시예에 따른 쿼리 실행 장치는 상기 제2 서브 그래프의 개수를 기초로 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성할 수 있다.
다른 실시예에 따른 타겟 쿼리 실행 장치는 복수의 서브 그래프 중 제1 서브 그래프가 하나인 경우, 복수의 제2 서브 그래프 각각을 이용하여 서브 쿼리를 생성할 수 있다. 또한, 서브 쿼리가 제1 서브 그래프에 대응되는 다항 조인 연산자의 자식(child)으로 구성된 타겟 쿼리의 실행 계획을 생성할 수 있다. 일 실시예에서 쿼리 실행 장치는 상기 복수의 서브 그래프 중 상기 제1 서브 그래프가 복수인 경우 상기 제1 서브 그래프에 포함된 고유키-참조키 조인 타입에 대응되는 간선들의 집합을 기초로 서브 쿼리를 생성할 수 있다.
예를 들어 일 실시예에 따른 쿼리 실행 장치는 복수의 제1 서브 그래프에 대하여, i 번째 제1 서브 그래프내의 정점을 포함하는 j 번째 제1 서브 그래프에 대한 서브쿼리가 존재하는 경우, i 번째 제1 서브 그래프와 그 자식들에 대해 생성된 서브쿼리가 j 번째 제1 서브 그래프에 대한 서브쿼리의 자식으로 구성된 타겟 쿼리의 실행 계획을 생성할 수 있다.
또 다른 실시예에 따른 쿼리 실행 장치는 상기 입력 쿼리 중 상기 복수의 서브 그래프에 대응되는 서브 쿼리를 제외한 나머지 쿼리가 존재하는 경우, 상기 나머지 쿼리에 대응되는 추가 서브 쿼리를 생성할 수 있고, 제1 서브 그래프에 대한 서브 쿼리가 상기 추가 서브 쿼리의 자식으로 구성된 타겟 쿼리의 실행 계획을 생성할 수 있다.
단계 S150에서 일 실시예에 따른 쿼리 실행 장치는 비용 모델을 기초로 타겟 쿼리의 실행 계획을 최적화할 수 있다. 일 실시예에서 쿼리 실행 장치는 타겟 쿼리에 대한 복수의 후보 쿼리 실행 계획을 생성하고, 지정된 비용 모델에 기초하여 상기 복수의 후보 쿼리 실행 계획 각각의 처리 비용을 연산하고, 최소 처리 비용의 후보 쿼리 실행 계획을 획득할 수 있다.
단계 S160에서 일 실시예에 따른 쿼리 실행 장치는 메모리 가용 크기를 기초로, 타겟 쿼리에 포함된 다항 조인 연산자의 테이블 정렬 알고리즘을 선택할 수 있다. 일 실시예에서 쿼리 실행 장치는 다항 조인 연산자의 각 자식 테이블에 대해 테이블의 카디널리티(Cardinality), 조인 컬럼의 개수, GPU 장치 사용 가능 유무를 기초로 GPU 사용 가능 여부를 판단할 수 있다. 이후, 쿼리 실행 장치는 GPU 사용이 가능한 경우, 테이블의 카디널리티와 상기 테이블의 정렬 대상 컬럼 크기를 이용하여 테이블 정렬 시 필요한 최소 메모리 공간의 크기를 계산할 수 있다. 또한, 쿼리 실행 장치는 최소 메모리 공간의 크기와 GPU 가용 크기를 비교하여 상기 정렬 알고리즘을 획득할 수 있다.
일 실시예에서 쿼리 실행 장치는 GPU 가용 크기보다 상기 최소 메모리 공간의 크기가 크고 정렬 대상 컬럼이 하나인 경우, 이기종(Heterogeneous) 정렬 알고리즘을 획득할 수 있다. 또는 GPU 가용 크기보다 상기 최소 메모리 공간이 크고 정렬 대상 컬럼이 복수개인 경우 CPU 장치 기반의 비교(comparison) 기반 정렬 알고리즘을 획득할 수 있다. 또는 GPU 사용이 가능하고 모든 자식 테이블에 대해 GPU 가용 크기보다 상기 최소 메모리 공간이 작으며, 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 하나인 경우 GPU 장치 기반의 비-비교(non-comparison) 기반의 정렬 알고리즘을 획득할 수 있다. 또는 GPU 사용이 가능하고 모든 자식 테이블에 대해 GPU 가용 크기보다 상기 최소 메모리 공간이 작으며, 상기 정렬 대상 컬럼이 복수개인 경우 GPU 장치 기반의 비교 기반 정렬 알고리즘을 획득할 수 있다. 또는 GPU 사용이 불가능하고 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 하나인 경우 CPU 장치 기반의 비-비교(non-comparison) 기반의 정렬 알고리즘을 획득할 수 있다. 또는 GPU 사용이 불가능하고 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 복수개인 경우 CPU 장치 기반의 비교 기반 정렬 알고리즘을 획득할 수 있다.
단계 S170에서 일 실시예에 따른 쿼리 실행 장치는 조인 전역 변수의 정렬 순서를 기초로, 다항 조인 연산자의 테이블에 포함된 조인 컬럼들 간 정렬 순서를 결정할 수 있다. 일 실시예에서 쿼리 실행 장치는 상기 제1 서브 그래프에 대해 하나 이상의 전역 조인 변수를 추출 하고, 상기 추출된 하나 이상의 전역 조인 변수(
Figure 112019117985544-pat00012
) 각각에 대하여, 상기 조인 그래프 에서 해당 전역 조인 변수를 조인 컬럼으로 포함하는 간선의 집합(
Figure 112019117985544-pat00013
), 상기 전역 조인 변수를 포함하는 정점의 집합(
Figure 112019117985544-pat00014
) 및 정점에 해당하는 데이터베이스 테이블들의 카디널리티의 합(
Figure 112019117985544-pat00015
) 계산할 수 있다. 또한 쿼리 실행 장치는 상기 하나 이상의 전역 조인 변수(
Figure 112019117985544-pat00016
) 각각에 대응되는 튜플
Figure 112019117985544-pat00017
을 획득하고, 값을 기준으로 상기 획득된 하나 이상의 튜플을 정렬 한 후, 상기 정렬된 튜플을 기초로, 각각의 튜플에 대응되는 전역 조인 변수간 정렬 순서를 결정하고, 상기 각각의 전역 조인 변수를 포함하는 하나 이상의 조인 컬럼의 정렬 순서를 결정할 수 있다.
단계 S180에서 일 실시예에 따른 쿼리 실행 장치는 조인 컬럼들 간 정렬 순서를 기초로, 복수의 서브 그래프에 대한 연산을 수행할 수 있다. 일 실시예에서 쿼리 실행 장치는 하나 이상의 제2 서브 그래프에 포함된 복수의 서브 쿼리 간 처리 순서를 결정하고, 상기 복수의 서브 쿼리 간 결정된 처리 순서에 따라, 상기 복수의 서브 쿼리의 실행 및 상기 복수의 서브 쿼리의 실행 결과의 정렬을 병렬적으로 수행할 수 있다.
또한, 일 실시예에서 쿼리 실행 장치는 상기 서브 쿼리(
Figure 112019117985544-pat00018
)의 실행 결과 데이터의 크기가 GPU 메모리 크기보다 작은 경우, GPU를 이용하여 상기 서브 쿼리(
Figure 112019117985544-pat00019
)의 실행 결과 데이터의 정렬 및 다음 서브 쿼리(
Figure 112019117985544-pat00020
)의 실행을 병렬적으로 수행하고, 상기 서브 쿼리(
Figure 112019117985544-pat00021
) 의 실행 결과 데이터의 크기가 GPU 메모리 크기보다 큰 경우, GPU를 이용하여 이기종 정렬 알고리즘의 정렬 단위(chunk)의 중간 결과 데이터의 정렬 및 서브 쿼리(
Figure 112019117985544-pat00022
)의 실행을 병렬적으로 수행할 수 있다.
도 4는 본 발명의 일 실시예에 따른 조인 그래프의 예시도이다.
일 실시예에 따른 조인 그래프는 총 여섯개의 정점으로 표현된 쿼리에 참여한 데이터베이스 테이블에 대응되는 하나 이상의 정점(210, 211, 212, 213, 214, 215)을 포함할 수 있다. 또한, 조인 그래프는 데이터베이스 테이블 사이의 조인 연산에 대응되는 하나 이상의 간선(220, 221, 222, 223, 224, 225, 226)을 포함할 수 있다. 하나 이상의 정점은 각각의 정점에 대응되는 테이블의 타입 정보(210a, 211a, 212a, 213a, 214a, 215a)를 포함하며, 하나 이상의 간선은 각각의 간선에 대응되는 조인 연산의 타입 정보(220a, 221a, 222a, 223a, 224a, 225a, 226a)와 조인 술어 정보(220b, 221b, 222b, 223b, 224b, 225b, 226b)를 포함할 수 있다.
일 실시예에서 쿼리 처리 장치는 도 2의 조인 그래프 분석 모듈(121)과 조인 그래프 생성 모듈(122)을 이용하여 입력 쿼리의 조인 연산에 포함된 데이터 베이스 테이블(이하, 테이블)을 조인 그래프의 노드로 구성할 수 있다. 또한, 정점은 레이블(label) 정보를 더 포함할 수 있으며, 상기 레이블 정보는 해당 테이블의 타입 정보를 포함하고, 상기 테이블의 타입은 사실 테이블(Fact table, Fact) 타입 또는 차원 테이블(Dimension table, Dim) 타입일 수 있다.
일 실시예에서 쿼리 처리 장치는 입력 쿼리의 조인 연산에 포함된 두 테이블 사이의 조인 관계를 조인 그래프의 간선으로 구성할 수 있다. 본 실시예에서 간선은 레이블 정보를 포함할 수 있고, 상기 레이블 정보는 조인 술어 (join predicate)정보 및 조인 타입 정보를 포함할 수 있다. 이 경우, 각각의 간선의 레이블 정보에 포함된 조인 타입 정보는 PK-FK 조인 또는 FK-FK 조인 중 하나일 수 있다. 일 실시예에서 PK-FK 조인은 Dim 테이블과 Fact 테이블 사이의 조인 연산에 대응될 수 있고, FK-FK 조인은 두 개의 Fact 테이블 사이의 조인 연산에 대응될 수 있다..
도 5는 본 발명의 일 실시예에 따라 핵심 서브 그래프가 하나인 조인 그래프를 분할하는 방법을 설명하기 위한 도면이다.
도 5에 도시된 서브 그래프는 도 4에 도시된 조인 그래프가 분할되어 생성된 서브 그래프의 일 예이다. 일 실시예에서 조인 그래프 분할 모듈(122)은 조인 그래프를 분할하여 서브 그래프를 획득할 수 있다. 일 실시예에서 서브 그래프는 조인 그래프에 포함된 연결 요소(connected component)들의 집합으로 구성될 수 있고, 이 경우 연결 요소 각각은 서브 그래프의 간선에 대응될 수 있다. 이 때, 어떠한 두 서브 그래프간에도 공통으로 포함된 간선이 존재하지 않음에 유의한다.
예를 들어, 도 4의 조인 그래프는 복수개의 서브 그래프로 분할될 수 있다. 조인 그래프의 분할로 생성되는 서브 그래프는 핵심 서브 그래프 또는 비 핵심서브 그래프일 수 있다. 핵심 서브 그래프는 도 5에 도시된 core ={
Figure 112019117985544-pat00023
}이고, 이 경우 핵심 서브 그래프는 각 간선의 타입이 FK-FK 조인인 간선들만 포함할 수 있다. 따라서, 비 핵심서브 그래프는 도 5에 도시된 {
Figure 112019117985544-pat00024
}일 수 있다.
도 6은 본 발명의 일 실시예에 따라 조인 그래프 분해를 이용하여 쿼리 실행 계획을 생성하는 방법을 설명하기 위한 도면이다.
도 6는 도 5의 조인 그래프 분해 결과로 생성된 쿼리 실행 계획임을 가정하고 설명한다. 도 5의 비 핵심서브 그래프 {
Figure 112019117985544-pat00025
} 는 각각 도 6의{
Figure 112019117985544-pat00026
}와 대응될 수 있다. 일 실시예에서 핵심 서브 그래프는 FK-FK 조인만을 포함한 서브 그래프로써 쿼리 실행 계획에서 다항 조인 연산자(440)로 처리될 수 있다. 이 경우, 다항 조인 연산자(440) {
Figure 112019117985544-pat00027
}는 세 개의 비 핵심서브 그래프
Figure 112019117985544-pat00028
(410),
Figure 112019117985544-pat00029
(420), 그리고
Figure 112019117985544-pat00030
(430) 을 자식으로 가질 수 있다. 일 실시예에서 다항 조인 연산자(440)의 자식의 개수가 두 개인 경우, 다항 조인 연산자(440)는 이항 조인 연산자가 될 수 있다. 이를 통해 해시 조인을 이용하지 않더라도, 다항 조인 처리 알고리즘을 그대로 사용하여 입력의 개수가 두 개인 쿼리를 생성할 수 있다.
도 6에 도시된 비 핵심서브 그래프{
Figure 112019117985544-pat00031
} 들은 PK-FK 조인을 하나 이상 포함할 수 있다. 이때, 비 핵심서브 그래프는 다항 조인 연산자가 아닌 당해 분야의 통상의 기술자가 선택할 수 있는 시스템의 동작 방식을 기초로 연산될 수 있다. 이 경우 일 실시예에 따른 쿼리 실행 장치(100)의 쿼리 실행 계획 처리기(130)는 이항 조인 연산자만을 이용한 쿼리 실행 계획을 통해 비 핵심서브 그래프에 대한 연산을 수행할 수 있다..
도 7은 본 발명의 일 실시예에 따라 핵심 서브 그래프가 하나인 경우 다항 조인 연산자를 포함하는 쿼리의 실행 계획을 생성하는 방법의 순서도이다.
이하, 도 7을 참조하여 조인 그래프를 분할함으로써 획득한 핵심 서브 그래프가 하나인 경우, 쿼리 실행 계획 생성기(120)가 다항 조인 연산자 하나를 포함한 쿼리 실행 계획을 생성하는 방법에 대하여 상세히 설명한다. 발명의 명확한 설명을 위해 도 6에서 도시된 다항 조인 연산자(440) 및 비 핵심서브 그래프에 해당하는 서브 쿼리들(410,420,430)을 포함한 쿼리 실행 계획을 생성하는 방법을 예로 들어 설명한다. 일 실시예에서 생성된 쿼리 실행 계획은 쿼리 재작성 모듈(123)을 통해 실제 쿼리 처리 계획으로 구현될 수 있음은 물론이다.
단계 S510에서 일 실시예에 따른 쿼리 실행 장치는 도 2의 조인 그래프 생성 모듈(121)을 활용하여 만들어진 입력 쿼리에 대한 조인 그래프(
Figure 112019117985544-pat00032
)를 분석하여 조인 그래프 내에 핵심 서브 그래프가 존재하는지의 유무를 확인한다.
단계 S511에서 일 실시예에 따른 쿼리 실행 장치는 조인 그래프(
Figure 112019117985544-pat00033
)에 포함된 핵심 서브 그래프(core)의 유무를 확인할 수 있다.
만약 조인 그래프에 핵심 서브 그래프가 포함되어 있지 않는 경우, 단계 S525에서 일 실시예에 따른 쿼리 실행 장치(100)는 기존 쿼리 실행 계획을 해당 입력 쿼리의 최종 쿼리 실행 계획(
Figure 112019117985544-pat00034
)으로 선택할 수 있다.
핵심 서브 그래프가 존재하는 경우, 단계 S512에서 일 실시예에 따른 쿼리 실행 장치(100)의 조인 그래프 분해 모듈(122)은 조인 그래프(G)에 대해 가능한 모든 분해 결과(
Figure 112019117985544-pat00035
)를 별도로 저장할 수 있다.
단계 S513에서 일 실시예에 따른 쿼리 실행 장치는 루프에서 사용되는 변수 i 와 j를 각각 0으로 초기화 할 수 있다. 이 경우, i는 분해 결과(
Figure 112019117985544-pat00036
)의 변수고, j는 i번째 조인 그래프 분해 결과(
Figure 112019117985544-pat00037
)에 포함된 j번째 비 핵심서브 그래프 (
Figure 112019117985544-pat00038
)의 변수임을 가정한다.
이하, 단계 S514 내지 단계 S520을 통해, 조인 그래프 분해 결과(
Figure 112019117985544-pat00039
)를 기초로 쿼리 실행 계획을 생성하는 방법에 대하여 설명한다. 본 발명의 일 실시예에 따른 쿼리 실행 장치는 단계 S514 내지 단계 S520을 수행함으로써, 각각의 조인 그래프(
Figure 112019117985544-pat00040
) 에 대하여 다항 조인 연산자를 포함하는 쿼리 실행 계획(
Figure 112019117985544-pat00041
)을 생성할 수 있다.
단계 S515에서 일 실시예에 따른 쿼리 실행 장치는 조인 그래프 분해 결과(
Figure 112019117985544-pat00042
)에 포함된 하나의 핵심 서브 그래프를 루트(root)로 하는 쿼리 실행 계획 (
Figure 112019117985544-pat00043
) 을 생성할 수 있다. 즉, 생성된 쿼리 실행 계획은 상기 핵심 서브 그래프에 대응되는 다항 조인 연산자를 루트로 하는 트리 형태로 생성될 수 있다.
단계 S516에서 쿼리 실행 장치는 생성된 쿼리 실행 계획 (
Figure 112019117985544-pat00044
)을 후보 쿼리 실행 계획 (
Figure 112019117985544-pat00045
)에 포함시킬 수 있다.
이후, 일 실시예에 따른 쿼리 실행 장치는 단계 S517 내지 단계 S523에서 조인 그래프 분해 결과(
Figure 112019117985544-pat00046
)에 포함된 비 핵심서브 그래프(
Figure 112019117985544-pat00047
)를 쿼리 실행 계획(
Figure 112019117985544-pat00048
)에 추가할 수 있다. 이 경우, 쿼리 실행 장치는 비 핵심서브 그래프(
Figure 112019117985544-pat00049
)는 핵심 서브 그래프에 대응되는 다항 조인 연산자의 자식이 되도록 쿼리 실행 계획(
Figure 112019117985544-pat00050
)을 생성할 수 있다. 또한, 쿼리 실행 장치는 쿼리 실행 계획(
Figure 112019117985544-pat00051
)에 포함된 핵심 서브 그래프의 자식들 간의 처리 순서를 결정할 수 있다.
보다 구체적으로, 단계 S517에서 일 실시예에 따른 쿼리 실행 장치는 조인 그래프 분해 (
Figure 112019117985544-pat00052
)에 포함된 비 핵심서브 그래프 (
Figure 112019117985544-pat00053
)를 선택할 수 있다.
단계 S518에서 쿼리 실행 장치는 비 핵심서브 그래프(
Figure 112019117985544-pat00054
) 에 포함된 PK-FK 조인들을 처리하기 위한 서브쿼리의 쿼리 실행 계획을 생성할 수 있다.
이후, 단계 S519에서 쿼리 실행 장치는 생성된 비 핵심서브 그래프(
Figure 112019117985544-pat00055
)의 쿼리 실행 계획을 핵심 서브 그래프에 대한 다항 조인 연산의 자식으로 추가할 수 있다.
단계 S520에서 쿼리 실행 장치는 전술한 비 핵심서브 그래프(
Figure 112019117985544-pat00056
)의 다음 비 핵심서브 그래프(
Figure 112019117985544-pat00057
)가 조인 그래프 분해 결과(
Figure 112019117985544-pat00058
)에 포함되어 있는지 여부를 확인할 수 있다.
만약 비 핵심서브 그래프(
Figure 112019117985544-pat00059
)가 존재하는 경우 쿼리 실행 장치는 단계 S521에서 조인 그래프의 분해 결과 변수 i를 증가시킨다. 만약 비 핵심서브 그래프(
Figure 112019117985544-pat00060
)가 존재하지 않는 경우, 쿼리 실행 장치는 단계 S522에서 쿼리 실행 계획(
Figure 112019117985544-pat00061
)에서 다항 조인 연산자의 자식간 처리 순서를 결정할 수 있다.
단계 S523에서 쿼리 실행 장치는 쿼리 실행 계획을 만들 조인 그래프 분해가
Figure 112019117985544-pat00062
내에 더 존재하는지를 확인한다.
일 실시예에서 쿼리 실행 장치는 전술한 쿼리 실행 계획을 만들 조인 그래프가 존재하는 않는 경우 단계 S524와 같이 변수 j의 값을 증가시킬 수 있다. 일 실시예에서 전술한 쿼리 실행 계획을 만들 조인 그래프가 존재하지 않는 경우, 쿼리 실행 장치는 조인 그래프(
Figure 112019117985544-pat00063
)에 대한 모든 조인 그래프 분해에 대해 쿼리 실행 계획(
Figure 112019117985544-pat00064
) 내에서 최종 쿼리 실행 계획 (
Figure 112019117985544-pat00065
)을 선택한다.
도 8은 본 발명의 일 실시예에 따른 하나 이상의 핵심 서브 그래프를 포함하는 조인 그래프의 예시도이다. 이하 도 8에 도시된 조인 그래프를 이용하여 설명한다.
일 실시예에 따른 조인 그래프는 쿼리에 참여한 데이터베이스 테이블에 대응되는 하나 이상의 정점(610, 611, 612, 613, 614, 615, 616)을 포함하며, 데이터베이스 테이블 사이의 조인 연산에 대응되는 하나 이상의 간선(620, 621, 622, 623, 624, 625, 626)을 포함할 수 있다. 일 실시예에서 하나 이상의 정점은 각각의 정점에 대응되는 테이블의 타입 정보(610a, 611a, 612a, 613a, 614a, 615a)를 포함할 수 있고, 하나 이상의 간선은 각각의 간선에 대응되는 조인 연산의 타입 정보(620a, 621a, 622a, 623a, 624a, 625a, 626a)와 조인 술어 정보(620b, 621b, 622b, 623b, 624b, 625b, 626b)를 포함할 수 있다.
이하, 일 실시예에 따라 핵심 서브 그래프를 획득하는 방법에 대하여 설명한다. 본 발명의 일 실시예에 따른 쿼리 실행 장치는 간선간 연결 여부를 기초로 서브 그래프를 분할할 수 있다. 예를 들어 도 8에 도시된 조인 그래프는 간선
Figure 112019117985544-pat00066
(622)와 간선
Figure 112019117985544-pat00067
(626)에 해당하는 핵심 서브 그래프 2개를 포함한다. 이 경우 간선
Figure 112019117985544-pat00068
(622)와 간선
Figure 112019117985544-pat00069
(626)은 직접 연결되지 않았으므로 각각에 대응되는 핵심 서브 그래프는 독립적으로 생성될 수 있다.
도 9는 본 발명의 일 실시예에 따른 하나 이상의 핵심 서브 그래프를 포함하는 조인 그래프를 분할하는 방법을 설명하기 위한 도면이다.
도 9는 도 8에 해당하는 조인 그래프에 대해 생성 가능한 여러 가지의 쿼리 실행 계획 중 일 예이다. 일 실시예에 따라 도 9에 도시된 쿼리 실행 계획은 2개의 FK-FK 조인을 처리하는 이항 조인 연산자(712, 713)를 포함할 수 있다. 구체적으로, 조인 연산자(713)는 서브 그래프
Figure 112019117985544-pat00070
(710)과 서브 그래프
Figure 112019117985544-pat00071
(711)를 자식으로 가질 수 있다.
이 때, 서브 그래프
Figure 112019117985544-pat00072
(711) 는 FK-FK 조인에 대응되는 간선
Figure 112019117985544-pat00073
(712)을 포함할 수 있다. 이 경우 본 발명의 일 실시예에 따른 쿼리 실행 장치는 도 7의 단계 S525 이후 도 10의 단계 S810 내지 S816 를 수행할 수 있다. 즉, 본 실시예에서 쿼리 실행 장치는 최초의 핵심 서브 그래프에 대하여 도 7의 단계 S510 내지 S525를 수행할 수 있다.
또한, 전술한 최초의 핵심 서브 그래프의 자식들이 모두 비 핵심서브 그래프이고, 비 핵심서브 그래프가 FK-FK 조인에 대응되는 간선을 포함하는 경우, 일 실시예에 따른 쿼리 실행 장치는 최종 쿼리 실행 계획을 선택하기 전 후술되는 도 10의 단계 S810 내지 S815를 수행하여 새로운 서브 쿼리를 만들 수 있다. 본 실시예에서 쿼리 실행 장치는 추가적으로 발견된 핵심 서브 그래프를 루트로 하는 서브쿼리의 쿼리 실행 계획을 생성할 수 있다. 예를 들어 도 9에 도시된 서브 그래프
Figure 112019117985544-pat00074
(711) 의 간선
Figure 112019117985544-pat00075
(712)는 해당 서브쿼리의 쿼리 실행 계획의 루트가 될 수 있다.
도 10은 본 발명의 일 실시예에 따른 비용 모델을 기초로 타겟 쿼리의 실행 계획을 최적화하는 방법을 설명하기 위한 도면이다.
단계 S810에서 일 실시예에 따른 쿼리 실행 장치는 입력 쿼리에 대한 조인 그래프(G)로부터 이항 조인 연산자 만을 사용하는 쿼리 실행 계획
Figure 112019117985544-pat00076
를 생성할 수 있다.
이후 단계 S811에서 쿼리 실행 장치는 조인 그래프(G)에 핵심 서브 그래프가 존재하는지 확인할 수 있다.
일 실시예에서 전술한 핵심 서브 그래프가 조인 그래프에 존재하지 않는 경우, 단계 S813에서 일 실시예에 따른 쿼리 실행 장치는
Figure 112019117985544-pat00077
를 최종 쿼리 실행 계획
Figure 112019117985544-pat00078
으로 선택할 수 있다.
다른 실시예에서 핵심 서브 그래프가 조인 그래프에 존재하는 경우, 단계 S812 에서 일 실시예에 따른 쿼리 실행 장치는 도 7에서 설명한 단계 S510 내지 S525를 통해 다항 조인 연산자를 활용한 새로운 쿼리 실행 계획
Figure 112019117985544-pat00079
을 생성할 수 있다.
이후 단계 S814에서 쿼리 실행 장치는 두 쿼리 실행 계획
Figure 112019117985544-pat00080
Figure 112019117985544-pat00081
에 대해 비용 기반의 처리 비용 계산 결과를 획득할 수 있다.
일 실시예에서
Figure 112019117985544-pat00082
Figure 112019117985544-pat00083
보다 처리 비용이 작은 경우, 단계 S815에서 쿼리 실행 장치는
Figure 112019117985544-pat00084
를 최종 쿼리 실행 계획
Figure 112019117985544-pat00085
으로 선택할 수 있다.
다른 실시예에서 실행 쿼리 장치는 단계 S816에 따라
Figure 112019117985544-pat00086
를 최종 쿼리 실행 계획
Figure 112019117985544-pat00087
으로 선택할 수 있다.
도 11은 본 발명의 일 실시예에 따른 비 핵심서브 그래프가 자식인 핵심 서브 그래프를 처리하는 방법을 설명하기 위한 도면이다.
도 11은 다항 조인 연산자의 자식들({
Figure 112019117985544-pat00088
})을 처리할 때 연산(evaluation) 처리 순서에 따른 연산 수행 시간의 예를 보여주는 도면이다. 이하, 각 자식들의 연산 시간을
Figure 112019117985544-pat00089
로, 연산이 끝난 {
Figure 112019117985544-pat00090
} 의 결과에 대해 주어진 어떤 정렬 순서로 정렬 하는데 걸리는 시간을
Figure 112019117985544-pat00091
라고 가정한다. 또한 도 11을 참조하여 설명하는 일 실시예에 따른 쿼리 실행 장치는 GPU를 사용하여 정렬을 수행한다고 가정한다. 이 경우, 정렬을 위해 GPU 메모리로 자식들을 전달하는 시간을 H2D copy라고 하며, {
Figure 112019117985544-pat00092
} 에 대한 각각의 연산 후의 메모리 크기는 사용 가능한 GPU 메모리 크기의 1배, 2배, 그리고 3배라 가정한다.
따라서, 일 실시예에 따른 쿼리 실행 장치는 {
Figure 112019117985544-pat00093
} 를 GPU로 정렬하기 위해, chunk 단위로 GPU에서 {
Figure 112019117985544-pat00094
} 에 대한 정렬을 수행한 후, CPU에서 병합 정렬 알고리즘을 이용하여 정렬을 수행할 수 있다. 이 경우, GPU 메모리보다 큰 입력데이터를 정렬하는 이기종 정렬(Heterogeneous Sort) 알고리즘이 이용될 수 있다.
보다 상세하게, 도 11의 (a)에서 쿼리 실행 장치는 {
Figure 112019117985544-pat00095
} 각각을 결과 크기가 작은 순서로 처리할 수 있다. 이후 처리 결과를 다시 결과 크기 순으로 정렬할 수 있다(910). 이는, 통상의 기술자가 해당 분야에서 용이하게 채택할 수 있는 방법으로 (a) 방법 내지 (b) 방법 중 가장 느린 성능을 가진다.
(b)에서 쿼리 실행 장치는
Figure 112019117985544-pat00096
의 처리와
Figure 112019117985544-pat00097
의 정렬을 오버래핑 (overlapping) 시킬 수 있다(920). 이 경우, 쿼리 실행 장치는 서로 다른 처리 장치(예를 들어, CPU 및 GPU) 사이에서 서로 다른 연산이 오버래핑 되는 정도에 따라 정렬시간을 줄일 수 있다.
일 실시예에서 쿼리 실행 장치는 (c) 방법과 (d) 방법을 이용하여 (b) 방법의 수행시간을 더욱 감소시킬 수 있다. 구체적으로, 이기종 정렬 알고리즘을 이용하는 경우 사용되는 chunk 크기만큼의
Figure 112019117985544-pat00098
에 대한 처리 결과가 기준치 이상 모이는 경우, 상기 모인 chunk를 GPU로 보내 정렬을 수행할 수 있다. 본 실시예의 경우, 조인 결과 크기가 커질수록 오버래핑 시킬 수 있는 chunk 개수가 늘어나기 때문에 (a)방법 및 (b)방법보다 더욱 큰 빠른 성능을 얻을 수 있다.
(c)에서 쿼리 실행 장치는 낮은 비용 우선 처리 방법 (Low Cost 자식 First, LCF)을 이용할 수 있고(930), (d)에서 쿼리 실행 장치는 높은 비용 우선 처리 방법 (High Cost 자식 First, HCF)을 이용할 수 있다(940). 이 경우, 방법 (c)와 방법 (d)간의 수행 시간의 차이는 없음은 물론이다. 따라서 본 발명의 몇몇 실시예에 따른 쿼리 실행 장치에서 자식 정렬을 수행하는 경우, 전술한 (b) 방법, (c) 방법 및 (d) 방법 중 하나 이상을 선택할 수 있고, 다른 실시예에서 쿼리 실행 장치는 (c) 방법 및 (d) 방법 중 하나를 (b) 방법 보다 우선적으로 선택하여 다항 조인 연산자가 포함된 쿼리 실행 계획을 수행할 수도 있다.
(a) 방법과 달리 본 발명의 몇몇 실시예에 따른 쿼리 실행 장치에서 수행되는 (b), (c) 및 (d) 방법은 {
Figure 112019117985544-pat00099
} 의 처리 결과를 활용하지 않고, 입력 테이블 및 조인 컬럼들의 메타 정보만을 활용하여 {
Figure 112019117985544-pat00100
} 처리 전에 정렬 변수 순서를 결정할 수 있다. 특히, 크기가 큰 테이블이 주로 활용하는 조인 변수일 수록 높은 우선순위로 정렬 변수에 선택되게 함으로써 정렬 및 다항 조인 연산 처리시 수행시간을 단축시킬 수 있다.
도 12는 본 발명의 일 실시예에 따른 핵심 서브 그래프의 자식인 비 핵심서브 그래프를 정렬하기 위해 조인 변수들의 정렬 순서를 결정하는 방법을 설명하기 위한 도면이고, 도 13은 본 발명의 일 실시예에 따른 핵심 서브 그래프의 예시도 이다. 이하 도 12을 자세히 설명하기 위해 도 13을 참조한다.
도 13은 도 5의 핵심 서브 그래프(core)를 도시한다. 도 13의 핵심 서브 그래프는 3개의 테이블에 대응되는 정점(1120, 1130, 1140)을 포함할 수 있다. 각 테이블 사이에는 총 5개의 간선이 존재하며 (1110, 1111, 1112, 1113, 1114) 모든 간선의 조인 타입은 FK-FK 조인일 수 있다.
도 12의 단계 S1010에서 일 실시예에 따른 쿼리 실행 장치는 전역 조인 변수를 획득하기 위해, 다항 조인 연산자로 처리될 핵심 서브 그래프에서 포함된 모든 조인 변수를 추출하여 임의의 변수
Figure 112019117985544-pat00101
에 저장할 수 있다.
예를 들어, 도 13에는 item, cust, 그리고 ticket의 총 세 개의 전역 조인 변수가 도시되어 있다. 일 실시예에서 쿼리 실행 장치는 간선(1110)과 간선(1111)에서 item 조인 변수를 획득할 수 있다. 구체적으로, 간선(1110)의 CS.item과 SR.item 조인 컬럼은 동일하게 item 테이블의 고유키 (primary key)를 참조 한다. 따라서, 두 조인 컬럼에 대한 전역 조인 변수는 item이 된다. 마찬가지로 간선(1111)에서도 전역 조인 변수 item을 획득할 수 있다.
이 경우 전술한 전역 조인 변수는 총 3개이므로, 모두 8(=
Figure 112019117985544-pat00102
) 가지의 정렬 순에 대한 경우의 수가 존재할 수 있다. 이 경우 전역 조인 변수의 개수가 늘어나면 조인 변수의 순서를 선택하기 위한 비용이 기하급수적으로 커질 수 있다. 따라서, 본 발명의 몇몇 실시예에 따른 쿼리 실행 장치는 지정된 통계치를 이용하여 가능한 모든 정렬 순서에 대한 예상 처리 비용을 계산하지 않고, 휴리스틱한 방법을 통해 빠르게 정렬 순서를 결정한다. 이를 통해 본 실시예에 따른 쿼리 실행 장치는 조인 변수의 순서를 선택하기 위한 처리 시간을 최소화 할 수 있다.
단계 S1011에서 일 실시예에 따른 처리 실행 장치는 특정 전역 조인 변수를 선택하기 위한 변수 i를 초기화 하고, 정렬 순서 계산에 필요한 메타데이터를 저장하기 위한 리스트(list)를 초기화할 수 있다.
이하, 단계 S1012 내지 단계 S1018을 참조하여 각 전역 조인 변수마다 필요한 메타정보를 리스트에 저장하는 방법에 대해 설명한다.
먼저, 단계 S1012에서 일 실시예에 따른 쿼리 실행 장치는 i번째 전역 조인 변수
Figure 112019117985544-pat00103
Figure 112019117985544-pat00104
로부터 선택한다.
단계 S1013에서 일 실시예에 따른 쿼리 실행 장치는 핵심 서브 그래프에 포함된 간선들 중 전역변수
Figure 112019117985544-pat00105
를 조인 컬럼으로 사용하는 간선의 집합
Figure 112019117985544-pat00106
를 생성할 수 있다. 예를 들어, 도 13에 도시된 전역 조인 변수 item의 경우
Figure 112019117985544-pat00107
이다.
단계 S1014에서 일 실시예에 따른 쿼리 실행 장치는 핵심 서브 그래프에 포함된 정점들 중 전역 변수
Figure 112019117985544-pat00108
를 조인 컬럼으로 포함하는 정점의 집합
Figure 112019117985544-pat00109
를 구축할 수 있다. 예를 들어, 도 13에 도시된 전역 조인 변수 item의 경우
Figure 112019117985544-pat00110
이다.
단계 S1015에서 일 실시예에 따른 쿼리 실행 장치는 핵심 서브 그래프에 포함된 정점들 중 전역변수
Figure 112019117985544-pat00111
를 조인 컬럼으로 포함하는 정점의 최초 카디널리티의 합
Figure 112019117985544-pat00112
을 구한다. 예를 들어, 도 13에 도시된 정점(1120), 정점(1130), 그리고 정점(1140)의 카디널리티를 각각 100, 200, 그리고 300으로 가정한다면, 전역 조인 변수 item에 대한
Figure 112019117985544-pat00113
이다.
단계 S1016에서 일 실시예에 따른 쿼리 실행 장치는 튜플
Figure 112019117985544-pat00114
를 생성하여 리스트에 추가할 수 있다. 이때, 함수
Figure 112019117985544-pat00115
Figure 112019117985544-pat00116
에 대한 카디널리티 함수이다. 예를 들어, 도 13에 도시 된 전역 조인 변수 item의 경우
Figure 112019117985544-pat00117
이다.
단계 S1017에서 일 실시예에 따른 쿼리 실행 장치는 리스트에 추가되지 않은 전역 조인 변수
Figure 112019117985544-pat00118
가 있는지 여부를 확인할 수 있다.
일 실시예에서 리스트에 추가되지 않은 전역 조인 변수
Figure 112019117985544-pat00119
가 존재하는 경우 단계 S1018를 통해 변수 i값을 1 증가시킨 후, 단계 S1012 내지 단계 S1017을 다시 수행할 수 있다.
다른 실시예에서 리스트에 추가되지 않은 전역 조인 변수
Figure 112019117985544-pat00120
가 존재하지 않는 경우, 쿼리 실행 장치는 단계 S1019를 통해 리스트의 튜플들을 (
Figure 112019117985544-pat00121
) 의 내림차순으로 정렬 하고 정렬된 결과를
Figure 112019117985544-pat00122
에 저장할 수 있다. 이 경우, 전역 조인 변수 w들이 핵심 서브 그래프의 간선들에 많이 포함되고, 포함된 간선에서 조인되는 테이블이 클수록, 높은 우선순위를 가질 수 있다. 이후 일 실시예에 따른 쿼리 실행 장치는 정렬이 끝난 집합
Figure 112019117985544-pat00123
의 첫 번째 튜플부터 마지막 튜플에 해당하는 전역 조인 변수 순으로 각 자식들을 정렬할 수 있다.
테이블의 크기는 SS, CS, SR 순으로 크다고 가정할 때, 도 13의 핵심 서브 그래프에 대해 도 12에 도시된 단계 S1010 내지 단계 S1019를 수행하면 (item, cust, ticket) 순으로 전역 조인 변수가 정렬될 수 있다. 이 경우 일 실시예에 따른 테이블(1120)의 경우 (item, cust) 순서로, 일 실시예에 따른 테이블(1130)의 경우 (item, cust, ticket) 순서로, 일 실시예에 따른 테이블(1140)의 경우 (item, cust, ticket)의 순서로 전역 조인 변수가 정렬될 수 있다.
도 14는 본 발명의 일 실시예에 따라 정렬 알고리즘 선택하고 정렬 연산을 수행하는 방법을 설명하기 위한 도면이다.
구체적으로 도 14는 테이블 R의 정렬을 위한 정렬 알고리즘 선택에 대한 흐름도이다. 이하 정렬 순서는 지정된 것을 가정하여 설명한다.
단계 S1211에서 일 실시예에 따른 쿼리 실행 장치는 단계 S1210에서 주어진 테이블 R의 정렬이 GPU에서 수행 가능한지의 여부를 확인할 수 있다.
일 실시예에서 쿼리 실행 장치는 GPU 사용이 가능한 경우 단계 S1212를 수행하고, 다른 실시예에서 쿼리 실행 장치에서 GPU 사용이 불가한 경우 단계 S1213를 수행할 수 있다.
일 실시예에서 쿼리 실행 장치에서 GPU 사용이 가능하지 않다면, 본 실시예에 따른 쿼리 실행 장치는 CPU를 사용하는 정렬 알고리즘을 획득할 수 있다. 보다 상세하게, 쿼리 실행 장치는 단계 S1213에서 정렬 대상 테이블 R의 조인 컬럼의 개수를 확인하여, 정렬 대상 컬럼이 하나인 경우 단계 S1270에서 CPU를 사용하는 비-비교(non-comparison) 기반 정렬 알고리즘을 획득할 수 있다.
다른 실시예에서 정렬 대상 컬럼의 개수가 두 개 이상인 경우, 쿼리 실행 장치는 단계 S1260에서 CPU를 사용하는 비교 기반 정렬 알고리즘을 선택한다.
또 다른 실시예에서 쿼리 실행 장치에서 GPU 사용이 가능하다면, 쿼리 실행단계 장치는 S1212에서 테이블 R의 크기가 가용 GPU 메모리 크기보다 작은지 확인할 수 있다. 일 실시예에서 쿼리 실행 장치는 테이블 R이 가용 GPU 메모리 크기보다 작은 경우 단계 S1215를 수행하고, 선택적 실시예에서 테이블 R이 가용 GPU 메모리 크기보다 큰 경우 단계 S1214를 수행할 수 있다.
단계 S1214에서 일 실시예에 따른 쿼리 실행 장치는 정렬 대상 컬럼의 개수를 기준으로, 테이블 R의 정렬 대상 컬럼의 개수가 하나인 경우 단계 S1230를 수행하여 GPU를 사용하는 비-비교(non-comparison) 기반 정렬 알고리즘을 선택할 수 있다. 선택적 실시예에서 쿼리 실행 장치는 테이블 R의 정렬 대상 컬럼의 개수가 두 개 이상인 경우 단계 S1220을 수행하여 GPU를 사용하는 비교 기반 정렬 알고리즘을 선택할 수 있다.
단계 S1215에서 일 실시예에 따른 쿼리 실행 장치는 정렬 대상 컬럼의 개수를 기준으로, 전술한 정렬 대상 컬럼의 개수가 하나인 경우 단계 S1250을 수행하여 이기종 정렬 알고리즘을 획득할 수 있다. 선택적 실시예에서 쿼리 실행 장치는 테이블 R의 정렬 대상 컬럼의 개수가 두 개 이상인 경우 단계 S1240을 수행하여 CPU응 이용하는 비교 기반 정렬 알고리즘을 획득할 수 있다. 이 경우, 이기종 정렬 알고리즘은 GPU를 이용하는 비교 기반 정렬 알고리즘 기반의 정렬을 수행할 때, 불필요한 처리 오버헤드가 발생할 수 있다. 이를 방지하기 위해 본 실시예에 따른 쿼리 실행 장치는 GPU를 사용하지 않고 CPU를 사용하는 정렬 알고리즘을 획득할 수 있다.
단계 S1280에서 일 실시예에 따른 쿼리 실행 장치는 획득한 정렬 알고리즘을 이용하여 테이블 R을 정렬할 수 있다. 이후 쿼리 실행 장치는 정렬된 테이블
Figure 112019117985544-pat00124
을 리턴하고 종료할 수 있다.
도 15는 도 16 및 도 17에 도시된 심볼의 의미를 설명하기 위한 표이다.
이하 도 16 내지 도 17을 참조하여 설명되는 심볼의 의미는 도 15에 따른 의미를 가질 수 있음에 유의한다.
도 16은 본 발명의 일 실시예에 따른 이항 조인 연산만을 포함한 쿼리 실행 계획의 처리 비용을 계산하는 방법의 순서도이다.
도 16을 참조하여 입력 쿼리 Q에 대해 이항 조인 연산자만을 포함한 쿼리 실행 계획의 처리 비용 계산 방법에 대하여 상세히 설명한다. 이하, 데이터베이스 쿼리 처리 장치는 입력 쿼리 Q 를 파이프라이닝 모델을 통해 처리한다고 가정한다.
일 실시예에 따른 쿼리 실행 장치가 수행하는 쿼리 실행 계획의 처리 비용 계산 방법은 입력 쿼리 Q 내에 포함된 조인 테이블 중 가장 큰 테이블 하나를 탐색(probe) 테이블로 가정하고, 나머지 테이블들은 모두 빌드(build) 테이블임을 가정한 후, 각각의 해시 테이블들을 빌드할 수 있다. 즉, 쿼리 실행 장치는 전술한 탐색 테이블의 각 튜플이 생성된 모든 해시 테이블에 대해 탐색을 수행할 수 있다. 일 실시예에서 탐색 결과가 없는 해시 테이블이 존재하는 경우, 쿼리 실행 장치는 해당 튜플에 대해 나머지 해시 테이블들에 대한 탐색을 수행하지 않을 수 있다.
단계 S1410에서 쿼리 실행 장치는 M개의 테이블 사이의 조인 연산들을 포함하는 입력 쿼리 Q를 획득할 수 있다. 이하, 테이블
Figure 112019117985544-pat00125
의 타입은 사실 테이블 타입이고 나머지 테이블들의 타입은 차원 테이블 타입임을 가정한다. 이 경우, 테이블
Figure 112019117985544-pat00126
의 크기가 가장 크다. 본 실시예에서 쿼리 실행 장치는 hash 조인 알고리즘을 이용하여 이항 조인 연산을 처리할 수 있고, 쿼리 실행 장치는 테이블
Figure 112019117985544-pat00127
을 이용하여 M-1개의 테이블
Figure 112019117985544-pat00128
들로부터 빌드한 해시 테이블들에 대해 탐색(probe)을 수행할 수 있다.
단계 S1411에서 일 실시예에 따른 쿼리 실행 장치는 입력 쿼리 Q를 이용하여 조인 그래프 G를 생성할 수 있다.
단계 S1412에서 일 실시예에 따른 쿼리 실행 장치는 조인 그래프 G를 이용하여 이항 조인 연산자만을 사용한 기존 데이터베이스 쿼리 처리 장치의 쿼리 실행 계획
Figure 112019117985544-pat00129
을 생성할 수 있다.
단계 S1413에서 일 실시예에 따른 쿼리 실행 장치는 쿼리 실행 계획
Figure 112019117985544-pat00130
의 처리 비용인
Figure 112019117985544-pat00131
를 초기화 할 수 있다.
단계 S1414에서 일 실시예에 따른 쿼리 실행 장치는 M-1개의 테이블
Figure 112019117985544-pat00132
의 해시 테이블을 생성하는 비용의 합(build)을 획득할 수 있다. 일 실시예에서
Figure 112019117985544-pat00133
는 테이블
Figure 112019117985544-pat00134
에 대해 쿼리 Q 내에 테이블
Figure 112019117985544-pat00135
에 대한 필터 술어(filter predicates) 들의 선택성(selectivity)을 적용한 후의 테이블 카디널리티를 의미할 수 있다.
예를 들어, 테이블
Figure 112019117985544-pat00136
의 카디널리티가 100 이고, 테이블
Figure 112019117985544-pat00137
에 대한 필터filter 술어(predicates)들의 선택성(selectivity)이 0.1 인 경우,
Figure 112019117985544-pat00138
이 될 수 있다. 일 실시예에서 상수
Figure 112019117985544-pat00139
는 해시 테이블을 생성할 때 테이블을 스캔 하는 횟수이다. 따라서, 빌드 비용은 해시 테이블 생성시 접근되는 튜플의 개수일 수 있다.
단계 S1415에서 일 실시예에 따른 쿼리 실행 장치는 쿼리 실행 계획
Figure 112019117985544-pat00140
에 포함된 M개의 테이블 중 가장 큰 테이블
Figure 112019117985544-pat00141
이 M-1 개의 해시 테이블들을 탐색하는 비용을 획득할 수 있다. 이 경우, 탐색 비용은 해시 테이블 탐색 시 접근되는 튜플의 개수일 수 있다.
일 실시예에서 i = 2 인 경우,
Figure 112019117985544-pat00142
의 상황을 의미하며, 쿼리 실행 장치는
Figure 112019117985544-pat00143
에 대한 필터 술어를 적용한 카디널리티인
Figure 112019117985544-pat00144
,
Figure 112019117985544-pat00145
만큼의 튜플을 이용하여
Figure 112019117985544-pat00146
의 해시 테이블에 대해 탐색을 수행한다. 이때,
Figure 112019117985544-pat00147
에도 필터 술어가 존재할 수 있기 때문에, 쿼리 실행 장치는
Figure 112019117985544-pat00148
Figure 112019117985544-pat00149
를 곱하는 연산을 더 수행할 수 있다. 이후 쿼리 실행 장치는
Figure 112019117985544-pat00150
의 해시 테이블의 각 해시 버킷에 포함된 평균 중복 키 값 개수인
Figure 112019117985544-pat00151
를 곱해 탐색 시 접근하는 튜플의 총 개수를 구할 수 있다. 결론적으로 i = 2 일 때의 탐색비용은
Figure 112019117985544-pat00152
가 된다.
일 실시예에서 i = 3의 경우, 쿼리 실행 장치는
Figure 112019117985544-pat00153
의 결과가
Figure 112019117985544-pat00154
의 해시 테이블을 탐색할 때 접근되는 튜플의 개수를 구할 수 있다. 이때,
Figure 112019117985544-pat00155
조인 처리 후 살아남은
Figure 112019117985544-pat00156
의 튜플 개수는
Figure 112019117985544-pat00157
가 된다. 즉,
Figure 112019117985544-pat00158
의 튜플이
Figure 112019117985544-pat00159
의 해시 테이블을 탐색하므로, 그 결과는
Figure 112019117985544-pat00160
가 가진 필터 술어에 영향을 받는다. 그리고, 쿼리 실행 장치는
Figure 112019117985544-pat00161
의 해시 테이블이 가진 중복 키 값 정도인
Figure 112019117985544-pat00162
를 이용하여 곱셈 연산을 더 수행함으로써 i = 3일 때 접근되는 총 튜플 개수를 획득할 수 있다.
일 실시예에서 i = 4 인 경우,
Figure 112019117985544-pat00163
의 튜플이
Figure 112019117985544-pat00164
Figure 112019117985544-pat00165
들이 가진 필터 술어에 영향을 받으므로
Figure 112019117985544-pat00166
조인 처리 후 살아남은
Figure 112019117985544-pat00167
의 튜플 개수는
Figure 112019117985544-pat00168
이 된다. 이 경우 쿼리 실행 장치는
Figure 112019117985544-pat00169
를 이용하여 곱셈 연산을 더 수행할 수 있다.
단계 S1416에서 쿼리 실행 장치는 단계 S1414에서 획득한 해시 테이블 빌드 비용(
Figure 112019117985544-pat00170
)과 단계 S1415에서 획득한 해시 테이블 탐색 비용(
Figure 112019117985544-pat00171
)을 더해
Figure 112019117985544-pat00172
를 입력 쿼리 Q에 대한 쿼리 처리 비용으로 연산할 수 있다.
도 17은 본 발명의 일 실시예에 따른 다항 조인연산을 포함한 쿼리 실행 계획의 처리 비용을 계산하는 방법의 순서도이다.
이하, 본 발명의 일 실시예에 따른 쿼리 실행 장치는 입력 쿼리 Q 에 대해 PK-FK 조인만을 포함한 비 핵심서브 그래프에 대해서는 파이프라이닝 모델을 통해 이항 조인 연산들을 처리하고, 다항 조인 연산자에 대해서는 기존 쿼리 처리 모델인 operator-at-a-time 모델을 통해 다항 조인 연산들을 처리 한다고 가정한다.
일 실시예에서 operator-at-a-time 모델은 파이프라인 모델과는 다르게 이전 조인의 전체 결과가 다음 조인 연산자의 입력이 될 수 있다. 이 경우, 하나의 튜플은 한번에 하나의 조인 연산만을 위해 접근 될 수 있다.
단계 S1510에서 일 실시예에 따른 쿼리 실행 장치는 M개의 테이블 사이의 조인 연산을 포함하는 입력 쿼리 Q를 획득할 수 있다.
단계 S1511에서 일 실시예에 따른 쿼리 실행 장치는 입력 쿼리 Q를 이용하여 조인 그래프 G를 생성할 수 있다. 이하, 조인 그래프 G는 n개의 비 핵심서브 그래프s
Figure 112019117985544-pat00173
Figure 112019117985544-pat00174
를 처리하기 위한 다항 조인 연산자
Figure 112019117985544-pat00175
를 포함함을 가정하여 설명한다.
단계 S1512에서 일 실시예에 따른 쿼리 실행 장치는 조인 그래프 G 를 이용하여 다항 조인 연산자가 포함된 쿼리 실행 계획
Figure 112019117985544-pat00176
를 생성할 수 있다.
단계 S1513에서 일 실시예에 따른 쿼리 실행 장치는 쿼리 실행 계획
Figure 112019117985544-pat00177
의 처리 비용인
Figure 112019117985544-pat00178
를 초기화 할 수 있다. 일 실시예에서
Figure 112019117985544-pat00179
의 처리 비용은 쿼리 실행 장치가 단계 S1514에서 획득한 n개의 비 핵심서브 그래프
Figure 112019117985544-pat00180
의 처리 비용인
Figure 112019117985544-pat00181
및 단계 S1516에서 획득한 다항 조인 연산자
Figure 112019117985544-pat00182
의 처리 비용
Figure 112019117985544-pat00183
를 합하여 획득할 수 있다. 따라서, 일 실시예에서 단계 S1514와 단계 S1516에서 병렬적으로 쿼리 처리 비용을 획득할 수도 있다.
일 실시예에 따른 쿼리 실행 장치는 단계 S1515에서 비 핵심서브 그래프 집합 S의 처리 비용을 획득할 수 있다. 상기 비 핵심서브 그래프 집합의 처리 비용은 도 16에서 전술한 방법을 통해 획득할 수 있다.
단계 S1517에서 일 실시예에 따른 쿼리 실행 장치는 다항 조인 연산자 처리를 위한 비 핵심서브 그래프에 대한 서브쿼리 결과를 정렬하는 비용
Figure 112019117985544-pat00184
을 계산할 수 있다. 구체적으로, 쿼리 실행 장치는 비 핵심서브 그래프(
Figure 112019117985544-pat00185
) 각각에 대해 도 14에서 전술한 방법을 통해 획득한 정렬 알고리즘의 정렬 비용의 합을 연산할 수 있다. 각 정렬 알고리즘의 비용 모델은 당해 분야에서 통상의 기술자가 채택할 수 있는 어떤 비용 모델을 채택하더라도 무방하다.
단계 S1518에서 일 실시예에 따른 쿼리 실행 장치는 정렬된 비 핵심서브 그래프들에 대한 다항 조인 연산자 처리 비용을 계산할 수 있다. 일 실시예에서 쿼리 실행 장치는 Tributary Join 알고리즘(TJ)을 통해 다항 조인 연산자를 연산할 수 있다. 본 실시예에서 쿼리 실행 장치는 TJ 조인 알고리즘을 이용하여 전역 조인 변수들에 대해 정렬 순서를 고려해 각 조인 변수마다 테이블들을 조인하고, 해당 조인 변수에서 조인 결과가 존재할 경우 다음 정렬 순서에 해당하는 조인 변수에 대한 조인 처리를 수행한다. 이후, 쿼리 실행 장치는 모든 전역 조인 변수에 대해 조건에 맞는 조인 결과가 존재하는 경우, 해당 조인 결과를 다항 조인 연산자의 결과로 포함시킬 수 있다.
구제적으로, 일 실시예에 따른 쿼리 실행 장치는 L개의 전역 조인 변수
Figure 112019117985544-pat00186
에 각 조인 변수 별 TJ 알고리즘 처리 비용을 구한 후, 각각의 처리 비용을 합산할 수 있다. 이 경우,
Figure 112019117985544-pat00187
의 의미는 전역 조인 변수
Figure 112019117985544-pat00188
중 첫번째 전역 조인 변수인
Figure 112019117985544-pat00189
을 의미하며,
Figure 112019117985544-pat00190
의 의미는 현재 다항 조인 연산자에 포함된 FK-FK 조인에서 전역 조인 변수
Figure 112019117985544-pat00191
를 조인 컬럼으로 포함한 테이블의 개수를 의미한다. 다시 도 13을 참조할 때,
Figure 112019117985544-pat00192
의 경우
Figure 112019117985544-pat00193
세 테이블에 전역 조인 변수
Figure 112019117985544-pat00194
이 포함되어 있으므로
Figure 112019117985544-pat00195
일 수 있다. 전역 조인 변수
Figure 112019117985544-pat00196
의 경우
Figure 112019117985544-pat00197
두 테이블에만 포함되어 있으므로
Figure 112019117985544-pat00198
일 수 있다.
이후, 단계 S1518에서 일 실시예에 따른 쿼리 실행 장치는 각 전역 조인 변수에 대해 정렬된 테이블의 조인 컬럼에 대해 탐색 비용인
Figure 112019117985544-pat00199
를 획득할 수 있다. 이 경우 전술한 탐색 비용은 이항 탐색(binary search) 횟수에 비례할 수 있다.
구체적으로, 쿼리 실행 장치는
Figure 112019117985544-pat00200
에 포함된 테이블 중 최소 카디널리티를 가진 테이블의 튜플 개수만큼 전역 조인 변수
Figure 112019117985544-pat00201
에 대한 조인 처리를 수행할 수 있다. 이 경우 쿼리 실행 장치는
Figure 112019117985544-pat00202
번의 이진 탐색을 수행할 수 있다. 그리고 각각의 이진 탐색에 대한 비용은
Figure 112019117985544-pat00203
인데 해당 비용은 이진 탐색을
Figure 112019117985544-pat00204
번 하였을 때의 분할 상환(Amortized) 비용이다.
단계 S1519에서 쿼리 실행 장치는 정렬 비용인
Figure 112019117985544-pat00205
와 조인 처리 비용인
Figure 112019117985544-pat00206
를 합한 비용
Figure 112019117985544-pat00207
를 획득할 수 있다.
단계 S1520에서 쿼리 실행 장치는 단계 S1515와 단계 S1519에서 획득한 비용의 합인
Figure 112019117985544-pat00208
를 이용하여 입력 쿼리
Figure 112019117985544-pat00209
에 대한 쿼리 실행 계획
Figure 112019117985544-pat00210
의 전체 처리 비용을 획득할 수 있다.
이상 설명된 본 발명에 따른 실시예는 컴퓨터 상에서 다양한 구성요소를 통하여 실행될 수 있는 컴퓨터 프로그램의 형태로 구현될 수 있으며, 이와 같은 컴퓨터 프로그램은 컴퓨터로 판독 가능한 매체에 기록될 수 있다. 이때, 매체는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM 및 DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical medium), 및 ROM, RAM, 플래시 메모리 등과 같은, 프로그램 명령어를 저장하고 실행하도록 특별히 구성된 하드웨어 장치를 포함할 수 있다.
한편, 상기 컴퓨터 프로그램은 본 발명을 위하여 특별히 설계되고 구성된 것이나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수 있다. 컴퓨터 프로그램의 예에는, 컴파일러에 의하여 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용하여 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함될 수 있다.
본 발명에서 설명하는 특정 실행들은 일 실시예들로서, 어떠한 방법으로도 본 발명의 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다. 또한, "필수적인", "중요하게" 등과 같이 구체적인 언급이 없다면 본 발명의 적용을 위하여 반드시 필요한 구성 요소가 아닐 수 있다.
이와 같이 본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 당해 기술분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 다른 실시예가 가능하다는 점을 이해할 것이다. 따라서 본 발명의 진정한 기술적 보호 범위는 첨부된 청구범위의 기술적 사상에 의하여 정해져야 할 것이다.

Claims (20)

  1. 컴퓨팅 장치에 의해 수행되는 쿼리 처리 방법에 있어서,
    데이터베이스의 입력 쿼리를 획득하는 단계;
    상기 데이터베이스의 테이블에 대응되는 정점 및 테이블간 조인 정보에 대응되는 간선으로 구성된 조인 그래프(join graph)를 생성하는 단계;
    상기 조인 그래프를 복수의 서브 그래프로 분할하는 단계;
    상기 입력 쿼리를 기초로 상기 복수의 서브 그래프를 이용하여 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성하는 단계;
    비용 모델을 기초로 상기 타겟 쿼리의 실행 계획을 최적화하는 단계;
    GPU 또는 CPU 메모리의 가용 크기를 기초로, 상기 타겟 쿼리에 포함된 다항 조인 연산자의 테이블 정렬 알고리즘을 획득하는 단계;
    상기 획득된 정렬 알고리즘에 따라 정렬된 다항 조인 연산자의 테이블에 포함된 하나 이상의 조인 컬럼의 정렬 순서를 결정하는 단계; 및
    상기 하나 이상의 조인 컬럼의 정렬 순서를 기초로, 상기 복수의 서브 그래프에 대한 연산을 수행하는 단계를 포함하는,
    쿼리 실행 방법.
  2. 제 1항에 있어서,
    상기 조인 그래프를 생성하는 단계는
    상기 입력 쿼리에 포함된 조인 술어 정보(join predicate)를 이용하여 상기 조인 그래프를 생성하는 단계를 포함하고,
    상기 조인 그래프는,
    상기 정점에 대한 테이블 타입 정보를 포함하고, 상기 간선에 대한 술어 정보 및 조인 타입 정보를 더 포함하는,
    쿼리 실행 방법.
  3. 제 1항에 있어서,
    상기 복수의 서브 그래프는,
    참조키-참조키 조인 타입과 대응되는 간선으로만 구성된 제1 서브 그래프 및 고유키-참조키 조인 타입과 대응되는 간선을 포함하는 제2 서브 그래프를 포함하는
    쿼리 실행 방법.
  4. 제 3항에 있어서,
    상기 제2 서브 그래프는,
    고유키-참조키 조인 타입과 대응되는 복수의 간선으로 구성되고, 상기 복수의 간선과 연결된 공통 정점은 사실 테이블(fact table) 타입의 테이블과 대응되는,
    쿼리 실행 방법.
  5. 제 4항에 있어서,
    상기 타겟 쿼리의 실행 계획을 생성하는 단계는,
    상기 제2 서브 그래프의 개수를 기초로 다항 조인 연산자를 포함하는 타겟 쿼리의 실행 계획을 생성하는 단계를 포함하는,
    쿼리 실행 방법.
  6. 제 3항에 있어서,
    상기 타겟 쿼리의 실행 계획을 생성하는 단계는
    상기 복수의 서브 그래프 중 상기 제1 서브 그래프가 하나인 경우, 복수의 제2 서브 그래프 각각을 이용하여 서브 쿼리를 생성하는 단계; 및
    상기 서브 쿼리가 제1 서브 그래프에 대응되는 다항 조인 연산자의 자식(child)으로 구성된 타겟 쿼리의 실행 계획을 생성하는 단계를 포함하는,
    쿼리 실행 방법.
  7. 제 6항에 있어서,
    상기 서브 쿼리는,
    상기 복수의 서브 그래프 중 상기 제1 서브 그래프가 복수인 경우 상기 제1 서브 그래프에 포함된 고유키-참조키 조인 타입에 대응되는 간선들의 집합을 기초로 생성된,
    쿼리 실행 방법.
  8. 제 7항에 있어서,
    상기 타겟 쿼리의 실행 계획을 생성하는 단계는,
    복수의 제1 서브 그래프에 대하여, i 번째 제1 서브 그래프내의 정점을 포함하는 j 번째 제1 서브 그래프에 대한 서브쿼리가 존재하는 경우, i 번째 제1 서브 그래프와 그 자식들에 대해 생성된 서브쿼리가 j 번째 제1 서브 그래프에 대한 서브쿼리의 자식으로 구성된 타겟 쿼리의 실행 계획을 생성하는 단계를 포함하는,
    쿼리 실행 방법.
  9. 제 6항에 있어서,
    상기 타겟 쿼리의 실행 계획을 생성하는 단계는,
    상기 입력 쿼리 중 상기 복수의 서브 그래프에 대응되는 서브 쿼리를 제외한 나머지 쿼리가 존재하는 경우, 상기 나머지 쿼리에 대응되는 추가 서브 쿼리를 생성하는 단계; 및
    제1 서브 그래프에 대한 서브 쿼리가 상기 추가 서브 쿼리의 자식으로 구성된 타겟 쿼리의 실행 계획을 생성하는 단계를 포함하는,
    쿼리 실행 방법.
  10. 제 1항에 있어서,
    상기 타겟 쿼리의 실행 계획을 최적화하는 단계는
    상기 타겟 쿼리에 대한 복수의 후보 쿼리 실행 계획을 생성하는 단계;
    지정된 비용 모델에 기초하여 상기 복수의 후보 쿼리 실행 계획 각각의 처리 비용을 연산하고, 최소 처리 비용의 후보 쿼리 실행 계획을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  11. 제 1항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는
    상기 다항 조인 연산자의 각 자식 테이블에 대해 테이블의 카디널리티(Cardinality), 조인 컬럼의 개수, GPU 장치 사용 가능 유무를 기초로 GPU 사용 가능 여부를 판단하는 단계;
    GPU 사용이 가능한 경우, 테이블의 카디널리티와 상기 테이블의 정렬 대상 컬럼 크기를 이용하여 테이블 정렬 시 필요한 최소 메모리 공간의 크기를 계산하는 단계; 및
    상기 최소 메모리 공간의 크기와 GPU 가용 크기를 비교하여 상기 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  12. 제 11항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는,
    GPU 가용 크기보다 상기 최소 메모리 공간의 크기가 크고 정렬 대상 컬럼이 하나인 경우, 이기종(Heterogeneous) 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  13. 제 11항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는,
    GPU 가용 크기보다 상기 최소 메모리 공간이 크고 정렬 대상 컬럼이 복수개인 경우 CPU 장치 기반의 비교(comparison) 기반 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  14. 제 11항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는,
    GPU 사용이 가능하고 모든 자식 테이블에 대해 GPU 가용 크기보다 상기 최소 메모리 공간이 작으며, 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 하나인 경우 GPU 장치 기반의 비-비교(non-comparison) 기반의 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  15. 제 11항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는,
    GPU 사용이 가능하고 모든 자식 테이블에 대해 GPU 가용 크기보다 상기 최소 메모리 공간이 작으며, 상기 정렬 대상 컬럼이 복수개인 경우 GPU 장치 기반의 비교 기반 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  16. 제 11항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는,
    GPU 사용이 불가능하고 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 하나인 경우 CPU 장치 기반의 비-비교(non-comparison) 기반의 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  17. 제 11항에 있어서,
    상기 정렬 알고리즘을 획득하는 단계는,
    GPU 사용이 불가능하고 각 자식 테이블에 대해 필요한 정렬 대상 컬럼이 복수개인 경우 CPU 장치 기반의 비교 기반 정렬 알고리즘을 획득하는 단계를 포함하는,
    쿼리 실행 방법.
  18. 제 1항에 있어서,
    상기 복수의 서브 그래프는,
    참조키-참조키 조인 타입과 대응되는 간선으로만 구성된 제1 서브 그래프 및 고유키-참조키 조인 타입과 대응되는 간선을 포함하는 제2 서브 그래프를 포함하고,
    상기 하나 이상의 조인 컬럼의 정렬 순서를 결정하는 단계는,
    상기 제1 서브 그래프에 대해 하나 이상의 전역 조인 변수를 추출 하는 단계;
    상기 추출된 하나 이상의 전역 조인 변수(
    Figure 112019117985544-pat00211
    ) 각각에 대하여, 상기 조인 그래프 에서 해당 전역 조인 변수를 조인 컬럼으로 포함하는 간선의 집합(
    Figure 112019117985544-pat00212
    ), 상기 전역 조인 변수를 포함하는 정점의 집합(
    Figure 112019117985544-pat00213
    ) 및 정점에 해당하는 데이터베이스 테이블들의 카디널리티의 합(
    Figure 112019117985544-pat00214
    ) 계산하는 단계;
    상기 하나 이상의 전역 조인 변수(
    Figure 112019117985544-pat00215
    ) 각각에 대응되는 튜플
    Figure 112019117985544-pat00216
    을 획득하고, 값을 기준으로 상기 획득된 하나 이상의 튜플을 정렬 하는 단계; 및
    상기 정렬된 튜플을 기초로, 각각의 튜플에 대응되는 전역 조인 변수간 정렬 순서를 결정하고, 상기 각각의 전역 조인 변수를 포함하는 하나 이상의 조인 컬럼의 정렬 순서를 결정하는 단계를 포함하는,
    쿼리 실행 방법.
  19. 제 18항에 있어서,
    상기 복수의 서브 그래프에 대한 연산을 수행하는 단계는,
    하나 이상의 제2 서브 그래프에 포함된 복수의 서브 쿼리 간 처리 순서를 결정하는 단계; 및
    상기 복수의 서브 쿼리 간 결정된 처리 순서에 따라, 상기 복수의 서브 쿼리의 실행 및 상기 복수의 서브 쿼리의 실행 결과의 정렬을 병렬적으로 수행하는 단계를 포함하는,
    쿼리 실행 방법.
  20. 제 19항에 있어서,
    상기 복수의 서브 쿼리 간 결정된 처리 순서에 따라, 상기 복수의 서브 쿼리의 실행 및 상기 복수의 서브 쿼리의 실행 결과의 정렬을 병렬적으로 수행하는 단계는,
    상기 서브 쿼리(
    Figure 112019117985544-pat00217
    )의 실행 결과 데이터의 크기가 GPU 메모리 크기보다 작은 경우, GPU를 이용하여 상기 서브 쿼리(
    Figure 112019117985544-pat00218
    )의 실행 결과 데이터의 정렬 및 다음 서브 쿼리(
    Figure 112019117985544-pat00219
    )의 실행을 병렬적으로 수행하는 단계; 및
    상기 서브 쿼리(
    Figure 112019117985544-pat00220
    ) 의 실행 결과 데이터의 크기가 GPU 메모리 크기보다 큰 경우, GPU를 이용하여 이기종 정렬 알고리즘의 정렬 단위(chunk)의 중간 결과 데이터의 정렬 및 서브 쿼리(
    Figure 112019117985544-pat00221
    )의 실행을 병렬적으로 수행하는 단계를 포함하는,
    쿼리 실행 방법.

KR1020190147583A 2019-11-18 2019-11-18 다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치 KR102177064B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020190147583A KR102177064B1 (ko) 2019-11-18 2019-11-18 다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치
US17/093,724 US11409746B2 (en) 2019-11-18 2020-11-10 Method and apparatus for processing query using N-ary join operators

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190147583A KR102177064B1 (ko) 2019-11-18 2019-11-18 다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치

Publications (1)

Publication Number Publication Date
KR102177064B1 true KR102177064B1 (ko) 2020-11-10

Family

ID=73548940

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190147583A KR102177064B1 (ko) 2019-11-18 2019-11-18 다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치

Country Status (2)

Country Link
US (1) US11409746B2 (ko)
KR (1) KR102177064B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090044463A (ko) * 2007-10-31 2009-05-07 한양대학교 산학협력단 최적화 변환 규칙을 적용하여 rdql 질의를 sql질의로 변환하는 rdql-to-sql 시스템 및 방법
KR101862779B1 (ko) 2016-11-01 2018-05-30 광운대학교 산학협력단 컬럼 수준 비정규화를 이용한 데이터 마이그레이션 장치 및 방법

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8676865B2 (en) * 2008-05-20 2014-03-18 International Business Machines Corporation Adaptive lazy merging
KR101296683B1 (ko) * 2011-03-23 2013-08-14 연세대학교 산학협력단 데이터 스트림에서의 다중 조인 질의 처리를 위한 2 페이즈 수행 방법
US9116955B2 (en) 2011-05-02 2015-08-25 Ab Initio Technology Llc Managing data queries
US11294900B2 (en) * 2014-03-28 2022-04-05 Micro Focus Llc Real-time monitoring and analysis of query execution
KR101955376B1 (ko) 2016-12-29 2019-03-08 서울대학교산학협력단 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치
US10452631B2 (en) * 2017-03-15 2019-10-22 International Business Machines Corporation Managing large scale association sets using optimized bit map representations
US11016974B2 (en) * 2017-12-22 2021-05-25 Microsoft Technology Licensing, Llc Program synthesis for query optimization
US11288270B2 (en) * 2018-05-11 2022-03-29 Qatar Foundation For Education, Science And Community Development Apparatus, system, and method for cross-platform data processing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090044463A (ko) * 2007-10-31 2009-05-07 한양대학교 산학협력단 최적화 변환 규칙을 적용하여 rdql 질의를 sql질의로 변환하는 rdql-to-sql 시스템 및 방법
KR101862779B1 (ko) 2016-11-01 2018-05-30 광운대학교 산학협력단 컬럼 수준 비정규화를 이용한 데이터 마이그레이션 장치 및 방법

Also Published As

Publication number Publication date
US11409746B2 (en) 2022-08-09
US20210149897A1 (en) 2021-05-20

Similar Documents

Publication Publication Date Title
Olston et al. Automatic optimization of parallel dataflow programs
US7565342B2 (en) Dynamic semi-join processing with runtime optimization
Bajda-Pawlikowski et al. Efficient processing of data warehousing queries in a split execution environment
US6026394A (en) System and method for implementing parallel operations in a database management system
US6556988B2 (en) Database management apparatus and query operation therefor, including processing plural database operation requests based on key range of hash code
US10726010B2 (en) Optimization technique of generalized disjunctive semi/anti join
US11468061B2 (en) Incremental simplification and optimization of complex queries using dynamic result feedback
US11423022B2 (en) Hybrid declarative query compiler and optimizer framework
Menon et al. Permutable compiled queries: dynamically adapting compiled queries without recompiling
EP3396542B1 (en) Database operating method and device
Werner et al. Hardware-accelerated join processing in large Semantic Web databases with FPGAs
Michiardi et al. In-memory caching for multi-query optimization of data-intensive scalable computing workloads
KR20160117691A (ko) 스토리지 시스템 및 그것의 동작 방법
Bondiombouy et al. Multistore big data integration with CloudMdsQL
Neumann Engineering high-performance database engines
KR102177064B1 (ko) 다항 조인 연산자를 이용한 쿼리 처리 방법 및 그 장치
Pigul Comparative Study parallel join algorithms for MapReduce environment
Roozmeh et al. Implementation of a performance optimized database join operation on FPGA-GPU platforms using OpenCL
US9934051B1 (en) Adaptive code generation with a cost model for JIT compiled execution in a database system
US11061901B2 (en) Influencing plan generation in the context of the two phase query optimization approach
CN102254034A (zh) 一种基于bide的olap查询日志挖掘及推荐方法
Werner et al. Accelerated join evaluation in Semantic Web databases by using FPGAs
Chen et al. Paralite: Supporting collective queries in database system to parallelize user-defined executable
Smith et al. Polar: An architecture for a parallel ODMG compliant object database
Pan et al. Parallelizing multiple group-by queries using MapReduce: optimization and cost estimation

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant