ClickHouse 엔지니어링팀은 NVIDIA의 차세대 Vera CPU 서버에서 ClickBench를 실행해 해당 하드웨어가 ClickBench 하드웨어 순위에서 큰 차이로 1위에 올랐다고 밝혔다. 이어 메모리에 저장한 1TB 데이터로 필터·집계·조인 마이크로벤치마크를 수행했고, 쿼리 종류와 스레드 수에 따라 성능 확장 양상이 달라지는 점을 설명했다.
ClickHouse는 NVIDIA가 제공한 Vera 서버에서 웹사이트의 표준 바이너리를 사용했으며, Vera에 맞춘 데이터베이스 최적화나 사용자 지정은 하지 않았다고 밝혔다. 테스트 장비는 88개의 NVIDIA Olympus 코어를 갖췄고, 2소켓 구성에서는 총 176개 코어와 NVIDIA Spatial Multithreading에 따른 352개 하드웨어 스레드를 제공한다. 메모리 대역폭은 DRAM 용량에 따라 초당 1.0~1.2TB다.
ClickHouse팀은 디스크 입출력의 영향을 배제하기 위해 5~10자의 무작위 ASCII 문자열 625억 개를 압축하지 않은 채 메모리 테이블에 저장했다. 전체 크기는 1TB다. 메모리 테이블에서 얻은 결과는 저장장치 대역폭이 충분하다는 조건에서 ClickHouse Cloud나 오픈소스 ClickHouse의 MergeTree 테이블에도 적용될 수 있다고 설명했다.
첫 번째 필터 테스트에서 단순 부분 문자열 검색은 스레드 수를 64개까지 늘릴 때 속도가 빨라졌지만, 256개로 늘려도 개선 폭은 작았다. 64개 스레드에서 처리량은 초당 813GB, 256개에서는 초당 900.90GB였다. ClickHouse팀은 이 결과가 Vera 시스템의 물리 메모리 대역폭에 가까워 메모리 입출력이 병목이 된 상황이라고 해석했다. 코어를 더 늘려도 이 쿼리의 속도를 더 높이기 어려운 이유다.
각 문자열에 비용이 큰 정규식을 적용한 필터에서는 결과가 달랐다. ClickHouse팀이 측정한 실행 시간은 176개 스레드까지 코어 수에 거의 비례해 줄었다. 176개를 넘으면 물리 코어가 아닌 논리 하드웨어 스레드도 사용하면서 효율이 낮아지기 시작했다. 논리 스레드는 캐시 미스나 분기 예측 실패 같은 대기 시간을 줄이는 데 도움을 주지만, 연산량이 큰 작업에서는 성능 향상이 제한적이라고 설명했다.
집계 테스트는 문자열의 첫 문자를 기준으로 그룹을 만들고 각 그룹의 개수와 SipHash 값의 합을 계산했다. 255개 그룹을 만드는 낮은 카디널리티 집계로, 메모리 병목을 피하려고 해시 계산을 추가해 연산량을 높였다. 조인 테스트에서는 1TB 테이블에서 추출한 62만5000행의 작은 테이블을 사용했다. 두 테스트 모두 실행 시간은 물리 코어 수까지 대체로 비례해 감소했고, 물리 코어를 넘어서는 구간부터 효율이 떨어졌다.
조인에는 ClickHouse의 parallel_hash 알고리즘과 런타임 필터가 사용됐다. 팀은 실제 환경에서는 조인 열이 팩트 테이블의 기본 키에 포함되는 경우가 많고, 그런 경우 추가 성능 최적화를 적용할 수 있다고 덧붙였다.
ClickHouse팀은 멀티스레딩과 별도로 SIMD 벡터화도 시험했다. 스레드를 하나만 사용한 비교 쿼리는 자동 벡터화를 켰을 때 0.42초, 컴파일러의 자동 벡터화를 끈 뒤에는 1.48초가 걸렸다. 팀은 Vera의 128비트 NEON 명령어가 32비트 정수 네 개를 동시에 비교할 수 있다고 설명했다. Vera의 SVE2 명령어 지원은 오픈소스 커뮤니티와 함께 ClickHouse에 추가하고 있다고 밝혔다.
ClickHouse CTO 알렉세이 밀로비도프(Alexey Milovidov)는 Vera를 지금까지 본 서버 플랫폼 가운데 가장 빠르다고 평가하며, 하드웨어의 잠재력을 분석 성능으로 이어가겠다고 말했다. ClickHouse는 쿼리 실행 과정의 비효율, 병렬 처리, 데이터 구조와 캐시 효율, 압축·비동기 처리·배치·캐싱 개선 가능성도 계속 살펴볼 계획이라고 밝혔다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요