- 데이터베이스 선택에서 원시 쿼리 속도와 범용 벤치마크만 보면 사용자가 질문에서 답까지 도달하는 전체 시간을 놓치기 쉬움
- 2019년 GigaOm 벤치마크는 Azure Data Warehouse와 Redshift를 앞세웠지만, 실제 시장에서는 Snowflake와 BigQuery가 더 잘 팔리며 성능 외 요소의 힘을 보여줌
- 서버 실행 시간을 줄여도 JDBC 드라이버, 결과 다운로드, CSV 파싱, SQL 작성 난이도 같은 주변 경로가 더 큰 병목이 될 수 있음
- ClickBench, TPC-H, TPC-DS는 유용하지만 JOIN 유무, 단일 테이블 스캔, 스키마 튜닝, 정확성·ACID 보장 조건에 따라 결론이 달라짐
- 데이터베이스 엔진 성능은 시간이 지나며 수렴하므로, 장기 선택 기준은 현재 순위보다 아이디어에서 답까지의 속도와 워크플로 통합성이어야 함
벤치마크가 놓치는 실제 대기 시간
- 시애틀 집에서 샌프란시스코 사무실까지 4.5시간 걸리는 여정에서 비행기 순항 속도를 10배 높여도, 공항 이동·보안 검색·탑승·활주로 대기·수하물·도착지 이동 때문에 전체 시간은 약 20%만 줄어들 수 있음
- 데이터베이스도 비슷함
- 엔진이 빨라져도 사용자는 이상한 CSV 파일, SQL로 질문을 표현하기 어려운 문제, 도구 연결 문제를 함께 겪음
- 벤치마크 전쟁에서 이긴 제품은 홍보하기 쉽지만, 그것이 사용자의 문제 해결 시간을 곧바로 줄인다는 뜻은 아님
- 데이터베이스 선택에는 사용 편의성, 생태계, 업데이트 속도, 워크플로 통합성이 더 나은 판단 기준이 될 수 있음
- 성능은 특정 시점의 특정 작업 시간만 보여주며, 잘못 잡은 병목을 열심히 최적화하게 만들 수 있음
2019년 GigaOm 결과와 시장의 엇갈림
- 2019년 GigaOm은 클라우드 데이터 웨어하우스를 대상으로 TPC-H와 TPC-DS 벤치마크를 실행함
- 대상은 3대 클라우드 벤더와 Snowflake였음
- 결과는 Azure Data Warehouse가 가장 빨랐고 Redshift가 뒤를 이었으며, Snowflake와 BigQuery는 크게 뒤처졌음
- 당시 BigQuery 사용자 평가에서는 Azure와 직접 비교한 고객들이 BigQuery를 선택하는 경우가 많았음
- 시장 결과는 벤치마크 순위와 거의 반대였음
- Snowflake와 BigQuery가 Redshift보다 많이 팔렸음
- Redshift는 Azure보다 더 잘 팔렸음
- TPC-H와 TPC-DS는 업계 표준이고 내부 성능 판단에도 쓰이던 테스트였지만, 좋은 성능 벤치마크에서 낮은 순위를 받은 시스템을 고객이 더 많이 샀다면 성능보다 중요한 요소가 있었다고 볼 수 있음
사용자가 체감하는 빠름은 서버 시간이 아님
- 데이터베이스를 만드는 사람들은 사용자가 “run” 버튼을 누른 뒤 결과가 준비될 때까지의 서버 실행 시간에 집중하는 경향이 있음
- 사용자에게 중요한 시간은 작업을 끝내는 데 걸리는 전체 시간이며, 이는 데이터베이스 서버가 쿼리를 실행하는 시간과 다름
- BigQuery의 JDBC 드라이버 사례가 이 차이를 잘 보여줌
- JDBC 드라이버는 프로그래머와 BI 도구가 데이터베이스에 연결할 때 쓰는 범용 인터페이스였음
- BigQuery 쿼리는 1~2초 만에 실행됐지만, 드라이버의 완료 폴링과 결과 다운로드 방식 때문에 사용자에게는 몇 초 또는 몇 분 더 느리게 보였음
- 결과가 많을 때 드라이버가 사용자가 필요로 하지 않는 데이터까지 페이지 단위로 모두 가져오며 지연이 커졌고, 메모리 부족으로 충돌하기도 했음
- 엔지니어들은 쿼리 시간을 몇 분의 1초 줄이는 데 많은 시간을 썼지만, 실제 사용자가 많이 쓰던 커넥터가 더 큰 지연을 만들었음
- 내부 벤치마크는 매일 돌았지만, 엔드투엔드 성능과 사용자 체감 시간은 보이지 않았음
성능은 단일 숫자로 고정되지 않음
- 성능은 데이터베이스 관점이 아니라 사용자 관점에서 측정되어야 하며, UX처럼 하나의 숫자로 완전히 설명하기 어려움
- 어떤 데이터베이스가 더 빠른지는 실제 워크로드에 따라 달라짐
- Lamborghini가 Prius보다 빠르더라도 교통 체증에서는 출근 시간이 달라지지 않을 수 있음
- ClickHouse와 Redshift의 성능 차이도 사용 방식에 따라 달라짐
- ClickHouse의 ClickBench는 ClickHouse가 여러 데이터베이스보다 빠르다는 결과를 보였음
- 벤치마크는 JOIN 없이 단일 테이블에서 동작했고, distinct 카운트에 많이 의존했음
- 로그 분석이나 웹사이트 고유 사용자 계산에는 좋은 대리 지표가 될 수 있음
- 전통적인 데이터 웨어하우스의 스타 스키마 워크로드에는 오해를 만들 수 있음
- 벤더 벤치마크는 보통 벤더가 잘하는 부분에 초점을 맞춤
- BigQuery는 벤치마크에서 낮게 보일 수 있지만, 노브가 거의 없고 대체로 자체 튜닝되기 때문에 실제 사용자 경험에서는 좋게 느껴질 수 있음
- 고도로 튜닝된 SingleStore 인스턴스는 많은 작업에서 BigQuery를 압도할 수 있지만, 스키마 튜닝 시간과 새 워크로드 추가 시 대응이 필요함
- 성능을 높이기 위해 안전장치나 정확성을 줄일 수도 있음
- overflow check 제거
- write flush 생략
- 일부 연산에 근사 결과 제공
- ACID 보장 미제공
- 이런 단축은 통제된 환경을 제외하면 사용하고 싶지 않은 선택지가 될 수 있음
지금의 순위보다 개선 속도가 더 오래 감
- DuckDB 기반 회사를 만들 때, DuckDB가 h2o.ai 벤치마크에서 크게 밀린다는 지적이 있었음
- 우려하지 않은 이유는 두 가지였음
- 성능은 2차적 요소였음
- DuckDB는 매우 빠른 속도로 개선되고 있었음
- DuckDB의 빠른 개선에는 일부 아키텍처 결정, 비교적 새롭고 깨끗한 코드베이스, 뛰어난 엔지니어들이 영향을 줌
- 같은 벤치마크의 최신 DuckDB 릴리스 대상 공개 결과에서는 DuckDB가 중위권에서 큰 차이로 선두권으로 이동함
- 데이터베이스 선택은 여러 해 지속되는 결정이므로 현재 성능과 기능만이 아니라 1년 뒤 가능한 능력도 중요함
- 두 데이터베이스가 서로 다른 속도로 개선된다면, 더 빠르게 움직이는 쪽을 선택하는 편이 나을 가능성이 큼
성능 격차는 시간이 지나며 좁혀짐
- 적극적으로 유지보수되는 여러 데이터베이스를 몇 년 반복 개선하면 성능은 수렴하는 경향이 있음
- 한 제품의 성능 기법은 시간이 지나며 다른 제품에도 구현될 수 있음
- ClickHouse가 스캔 속도에서 유리한 기법을 쓰면 Snowflake도 1~2년 안에 비슷한 기능을 가질 수 있음
- Snowflake가 점진적 materialized view를 추가하면 BigQuery도 곧 따라올 수 있음
- 데이터베이스마다 성능을 내는 기법은 다름
- 쿼리를 머신 코드로 컴파일
- 데이터를 로컬 SSD에 캐싱
- 특수 네트워크 하드웨어로 shuffle 처리
- 효과적인 기법은 시간이 주어지면 누구나 구현할 수 있고, 잘 작동하면 여러 시스템에 퍼질 가능성이 큼
- Fivetran CEO George Fraser의 데이터 웨어하우스 성능 비교에서는 2020년 가장 빠른 시간이 8초, 가장 느린 시간이 18초였지만 2022년에는 세 벤더가 약 7초, 가장 느린 벤더가 9초로 가까워졌음
- 단, 아키텍처 차이는 극복하기 어려움
- shared nothing 데이터베이스는 shared disk 대비 불리할 수 있음
- Redshift는 주로 shared disk 아키텍처로 전환하는 데 여러 해가 걸렸음
- 오브젝트 스토어에 메타데이터를 저장하는 lakehouse는 빠른 업데이트에 어려움을 가질 수 있음
- 이런 차이는 주로 경계 조건에서 나타나며, 장기적으로 Redshift가 Snowflake보다 본질적으로 빠르거나 느려야 할 이유는 없음
질문에서 답까지의 시간을 줄이는 기능들
- 사용자에게 중요한 성능은 질문이 생긴 시점부터 답을 얻는 시점까지의 시간임
- 이 시간을 줄이는 방법은 쿼리 계획 개선만이 아님
- 질문을 더 쉽게 표현하게 만들 수 있음
- 쿼리 결과를 이해하기 쉽게 바꿀 수 있음
- 잘못된 질문을 할 때 피드백을 줄 수 있음
- 데이터 문제를 이해하게 도울 수 있음
- 필요한 데이터를 올바른 위치와 형태로 준비하게 만들 수 있음
- Snowflake는 사용자가 SQL을 입력했을 때 “그냥 동작”하게 만드는 데 강점이 있었음
- 날짜 차이를 계산할 때 DATEDIFF와 TIMEDIFF를 모두 사용할 수 있음
- 합리적인 타입이면 둘 다 동작함
- granularity를 지정하거나 생략할 수 있음
- granularity에 따옴표를 쓰거나 쓰지 않아도 됨
- DuckDB도 Friendlier SQL로 쿼리 작성과 유지보수를 쉽게 하는 기능을 추가함
GROUP BY ALL은 집계 쿼리에서 GROUP BY 절 필드 누락을 줄임- SELECT 목록만 바꾸면 되므로 쿼리 진화 시 여러 위치를 수정할 필요가 줄어듦
- 이 기능이 유용해지자 여러 데이터베이스 벤더가 유사 기능을 추가했음
- CSV 파일은 세계의 많은 데이터가 담긴 형식이지만, 많은 파일이 잘못 구성되어 있고 파싱은 실제로 어려움
- BigQuery의 초기 CSV splitter는 inference를 하지 못했고, 파일 간 스키마가 조금 다르면 혼란을 겪었음
- CSV 파싱은 생각보다 까다로운 문제임
- 두 엔지니어가 CSV 데이터를 읽어 같은 결과를 계산해야 한다면, CSV를 더 쉽게 올바르게 ingest하는 쪽이 쿼리 엔진 속도와 무관하게 먼저 답을 얻을 수 있음
- 결과 처리 방식도 사용자 경험에 큰 영향을 줌
SELECT *가 MySQL처럼 첫 페이지와 cursor를 반환하면 즉시 보일 수 있음- BigQuery처럼 서버 측에서 테이블 복사본을 만들어야 하면 큰 테이블에서 몇 시간이 걸릴 수 있음
- 클라이언트가 모든 데이터를 내려받으려 하면 메모리 부족이 날 수 있음
- 긴 연결은 네트워크 문제에 취약하고, 폴링은 쿼리가 폴링 간격 사이에 끝날 때 더 느려 보일 수 있음
DuckDB 벤치마크를 볼 때의 단서
- DuckDB는 빠르며, 일부 machine size의 ClickBench에서 최상위권에 있음
- 예시로 c6a.4xlarge 결과가 제시됨
- DuckDB는 대부분의 h2o.ai 벤치마크에서도 좋은 성능을 보이며, TPC-H와 TPC-DS에서도 나쁘지 않음
- 어떤 데이터베이스가 빠르다고 가정하기 전에는 자신의 워크로드에서 직접 시험해야 함
빠른 쿼리보다 빠른 문제 해결
- 가장 성공적인 데이터베이스 회사들이 경쟁사보다 빠르다는 이유만으로 성공한 것은 아님
- Redshift가 한동안 강했지만, Snowflake가 진입할 수 있었던 이유는 벤치마크 성능이 아니라 유지보수성이었음
- 성능을 주요 판매 포인트로 삼은 데이터베이스는 시장에서 좋은 성과를 내지 못했고, 작업을 쉽게 끝내게 해준 데이터베이스가 더 잘 버텼음
- 데이터베이스 선택에서 봐야 할 축은 더 넓음
- 마법 같은 비밀 기법은 없으며, 아키텍처 차이를 제외하면 성능은 시간이 지나며 수렴함
- 데이터베이스 엔진의 개선 속도는 크게 다르고, 빠르게 움직이는 쪽이 장기적으로 유리함
- 성능에 가장 집착하는 데이터베이스 벤더는 장기적으로 느려질 수 있음
- 데이터베이스 성능에는 단일 지표가 없고, 빠른 데이터베이스도 특정 워크로드에서는 나쁠 수 있음
- 중요한 기능은 쿼리에서 결과까지가 아니라 아이디어에서 답까지 얼마나 빨리 갈 수 있느냐임
- 느린 쿼리보다 빠른 쿼리가 낫지만, 데이터베이스 선택은 원시 속도 외의 요소를 기준으로 해야 함