그래서 TPC가 먼데 X덕새기야

Sibeet·2020년 5월 22일
0

Query processing

목록 보기
2/2

대뜸 나타나서 TPC가 먼지 설명도 안하고 쿼리 플랜 얘기나 주절대서 미안합니다...

DB업계에서는 TPC라는 게 있다.
Transaction Processing Counsel의 약자인데 트랜잭션 처리 위원회? 뭐 원로들 모여서 응 이거 DB아냐~ 하고 돌려보내는 역할이라도 한단 말인가?

원로들[?]의 면면을 모아보면 다음과 같다.

IT밥 먹고 사는 사람들이라면 모를 수가 없는 거대기업들이 많이들 참여하고있다.(심지어 한국 TTA도 있네...)
자세한 건 TPC 홈페이지를 참조하면 된다.

그래서 TPC가 무엇을 하느냐면...
쉽게 말해서 표준화된 벤치마킹 테스트 셋을 제공하는 단체이다.

몇개의 테이블과 Query로 이루어진 거대 온라인 쇼핑몰을 기반으로 simulation한 테스트 셋
이란 말이 정확하겠다.

TPC-A부터(지금은 deprecate 된것으로 암) 시작해서 TPC-H도 있고 이것저것 있는데 해당 이미지는 TPC-H 기준이다.
대충 쭉 훑어보면 공급자, 아이템, 주문 등 나름대로 익숙한 듯하기도 한 이름들이 많다.
각 테이블은 첫 글자를 딴 Column들로 이루어진다. 예를 들어, L_suppkey와 같은 식으로. 조인쿼리를 작성할 때 from nation n, region r처럼 쓰는 경우가 많은데 n.column처럼 쓰는 경우를 방지하기 위한 것으로 보인다.

다이어그램에서 테이블 이름 바로 밑에 SF*200000과 같은 식으로 적혀 있는데, SF는 Scale Factor를 뜻한다. SF가 10이면 2백만 row가 된다. 10sf만 해도 용량이 16G 정도 나오기 때문에 꽤 큰 데이터셋이다. '초거대 쇼핑몰'의 기준을 충족하려면 1000SF정도 된다. 데이터만 1.6T가 되는 셈...상용 대규모 엔터프라이즈 DB들은 1000SF기준으로 테스트를 진행한다고 한다. 우리 제품은 100SF 정도?

근데 데이터셋만 있으면 좀 이상하다. 이걸로 뭘 어떻게 벤치마킹을 하란 말인지?
물론 해당 데이터셋에 맞춤제작된 쿼리도 있다.


TPC에서 mysql을 지원안해서 mssql문법으로 출력된 쿼리라서 좀 생소한 문법이 보이는데... 실제 운영 사항에서 발생할 수 있는 OLAP성 쿼리들을 22가지 지원하고 있다. 쿼리들을 살펴보면 Join, Subquery, group by, order by 등을 매우 다채롭게 사용하고 있으며 이로 인해 생성되는 plan들도 복잡다변하다.

Database를 설계하거나 만들 때(그럴 일이 얼마냐 있겠냐만은...) 혹은 벤치마킹 테스트를 할 때 유용하게 사용할 수 있는 것이다.
나같은 허접들은 이 데이터셋을 바탕으로 플랜을 공부하고 Query processing에 대한 실마리를 잡을 수 있다. 수많은 상황을 대비한 쿼리기 때문에 DB에서 사용하는 대다수의 기법이 해당 데이터셋에 포함되게 된다.

특히, DB 튜닝시 가장 유용하게 쓰인다. 모든 쿼리의 성능을 잡을 순 없기 때문에 업무 시에 많이 사용하는 형식의 쿼리 위주로 성능을 튜닝한다거나 하는 식으로 활용할 수 있는 것이다.

앞으로 Query processing 관련 포스팅은 모두 TPC-H 기반으로 진행할 예정이다. TPC 홈페이지에서 데이터셋 생성 프로그램 등을 제공하고 있으니 궁금하신 분들은 SQL 연습에 사용해도 될 듯.

0개의 댓글