Clickbench Benchmark tool details: Its benchmark tool which runs 43 queries single threaded and also runs multi-threaded ( default: 10 client threads) test. It runs single threaded all 43 for 3 iterations and note down timing in results.csv and I have tweaked to add load timing ( of hits file-csv/tsv/parquet) Clickbench setup locally and running the test: * Clone locally clickbench: https://github.com/ClickHouse/ClickBench * #cd ClickBench * Download locally parquet format file of hits: https://datasets.clickhouse.com/hits_compatible/hits.parquet (wget --continue --progress=dot:giga 'https://datasets.clickhouse.com/hits_compatible/athena/hits.parquet') and copy to data-dir of mariadb ( cp hits.parquet /var/lib/mysql/) with all access like 777 (chmod 777 hits.parquet) or change ownership to mysql (chown mysql:mysql hits.parquet) Note: I had issue in ingestion of hits.csv/hits.tsv so I selected hits.parquet * Create database clickbench with utf8mb4 format like below CREATE DATABASE clickhouse character set utf8mb4; or you can set utf8mb4 in config like below: character_set_server=utf8mb4 collation_server=utf8mb4_general_ci Note: duckdb doesnot work with latin * I repo of rename mariadb-columnstore to mariad-duckdb or create a folder mariad-duckdb in root clickbench folder and copy all contents of mariadb. ClickBench>mkdir mariad-duckdb ClickBench>cp -r mariadb-columnstore/* mariad-duckdb/ * You need to do many hacks and I am listing below and reason for that: 1. Comment-out 43 line or delete so that 43th query do not run since duckdb has an issue in running query with datetime 2. Add these to benchmark.sh export BENCH_DOWNLOAD_SCRIPT="" # BENCH_DURABLE means whether you want to load data for each test or not export BENCH_DURABLE="yes" export BENCH_RESTARTABLE="no" #concurrent threads to do concuurent test export BENCH_CONCURRENT_CONNECTIONS=10 export machine="48-core-ubuntu24" export PASSWORD="" #export BENCH_CONCURRENT_DURATION=600 #export BENCH_TRIES=2 #More details , you can find in ../lib/benchmark-common.sh I created make-json.sh to create a json file and the end of the test with load, query-time details. Example root@hz-duckdb-bench /test-data/clones/ClickBench/mariadb-duck # more benchmark.sh #!/bin/bash # Thin shim — actual flow is in lib/benchmark-common.sh. #we already downloaded hits.parquet export BENCH_DOWNLOAD_SCRIPT="" export BENCH_DURABLE="yes" export BENCH_RESTARTABLE="no" export BENCH_CONCURRENT_CONNECTIONS=5 #export BENCH_CONCURRENT_DURATION=10 #export BENCH_TRIES=2 export machine="48-core-ubuntu24" export PASSWORD="" ../lib/benchmark-common.sh #make-json.sh is new file, I have created so that we get results in results//.json ./make-json.sh 3. The following content of files which changed to run the test: check, data-size,load and ../lib/benchmark-common.sh 4. In order to run the test , go to ClickBench/mariadb-duck folder and bash -x ./benchmark.sh 2>&1 >test-memory-running-server-12-th-5users.log Monitoring: 1. I monitored 2 things -a) using top memory of mariadb process b) duckdb memory using udf COLUMNS=500 top -b -d 10 | grep -w --line-buffered -E "mariadbd" | awk '{ cmd = "date \"+%Y-%m-%d %H:%M:%S\""; cmd | getline dt; close(cmd); print dt "\t" $0; fflush(); }' and mariadb -N -e "select id,user,host,db,command,time from INFORMATION_SCHEMA.PROCESSLIST;show processlist;SELECT duckdb_query_udf('FROM duckdb_memory()')\G " 2. You can you Easystat of dim_stat to monitor system and mysql but mysql counters has nothing because duckdb exposes counters through udf only. show global status like '%duck%' example: Variable_name Value Duckdb_commit 80037 Duckdb_rollback 0 Duckdb_rows_delete 0 Duckdb_rows_delete_in_batch 0 Duckdb_rows_insert 0 Duckdb_rows_insert_in_batch 79841109 Duckdb_rows_update 0 Duckdb_rows_update_in_batch 0