第一部分:编译TPC-DS生成测试数据
1、环境准备
(1)首先通过官网下载TPC-DS
下载地址:(http://www.tpc.org/tpc_documents_current_versions/current_specifications.asp)
(2)将下载的文件放到/usr/local/src目录底下
unzip 9b0e0c62-e2be-4183-9a51-de7de896b71d-tpc-ds-tool.zip
cd /usr/local/src/v2.11.0rc2
安装TPC-DS编译环境
yum -y install gcc gcc-c++ expect
2、编译TPC-DS
1、进入解压好的TPC-DS中tools目录底下
cd /usr/local/src/v2.11.0rc2/tools
执行以下语句:
make
编译完成
3、生成测试数据
在tools⽬录是通过dsdgen命令⽣成指定量级的测试数据,可以通过并⾏的⽅式⽣成数据,可以指定数据的分隔符等,具体参数可以使⽤dsdgen –h来查看。
(1)生成测试数据
创建一个目录
mkdir /root/tpcdsdata
cd /usr/local/src/v2.11.0rc2/tools
执行dsdgen命令来生成测试数据
./dsdgen -SCALE 1GB -DIR /root/tpcdsdata (指定了1GB)
SCALE:指定⽣成数据量⼤⼩如:100GB、200GB、1TB、100TB
(2)查看生成的表数据
ll /root/tpcdsdata
cd /root/tpcdsdata
du -sh
并行方式生成测试数据(并行产生1GB测试数据)
./dsdgen -SCALE 1GB -DIR /root/tpcdsdata -parallel 4 -child 4
4、根据模板生成查询语句
通过使用dsqgen命令根据TPC-DS提供的模板生成不同类型的SQL语句,TPC-DS默认支持以下模板:db2.tpl、netezza.tpl、oracle.tpl、sqlserver.tpl,如下使用方式:
使⽤click house来作为⽰例来⽣成CK的查询语句:
vim update_query.sh
#!/bin/bash
COUNTER=1
while [ $COUNTER -lt 100 ]
do
echo $COUNTER
echo "define _END = \"\";">>query$COUNTER.tpl
COUNTER=`expr $COUNTER + 1`
done
将update_query.sh复制到query_template⽬录下,并执⾏脚本./update_query.sh
cd /usr/local/src/v2.11.0rc2/tools
mkdir ../sql
vim gen_query.sh
for i in `seq 1 99`
do
./dsqgen -DIRECTORY ../query_templates/ -TEMPLATE "query${i}.tpl" -DIALECT netezza -FILTER Y > ../sql/query${i}.sql
done
./gen_query.sh
5、将数据导入clickhouse
(1)在/root/tpcdsdata⽬录下创建⽬录handled
(2)在/root/tpcddata⽬录下执⾏如下命令:
for i in `ls *.dat`
do
name="handled/$i"
echo $name
`touch $name`
`chmod 777 $name`
sed 's/|$//' $i >> $name;
done
(3)将数据加载到表中
导入表结构:
clickhouse-client -h 127.0.0.1 --password=password -u default --port 9000 -mn < /usr/local/src/v2.11.0rc2/tools/tpcds.sql
导入数据:
cd /usr/local/src/v2.11.0rc2/bin
./load-data.sh
vim load-data.sh
for file_name in `ls /home/tpcdsdata/handled/*.dat`;
do
table_file=$(echo "${file_name##*/}")
table_name=$(echo "${table_file%.*}" | tr '[:upper:]' '[:lower:]')
upload_data_sql="INSERT INTO $table_name FORMAT CSV"
echo "$upload_data_sql <-- $(du -h $file_name)"
cat $file_name | clickhouse-client --password=password --format_csv_delimiter="|" -- max_partitions_per_insert_block=100 --database="tpcd rm $file_name
sleep 2
done
(4)批量压测select语句
cd /usr/local/src/v2.11.0rc2/bin
vim tpc-ds-benchmark-olap.sh
#!/bin/bash
#exec 3>&1 4>&2 1>> tpc-ds-benchmark-olap-`date +'%Y%m%d%H%M%S'`.log 2>&1
N=1
T=100
while [ $N -lt $T ]
do
if [ $N -lt 10 ] ; then
NN='0'$N
else
NN=$N
fi
echo "query $NN starting"
time clickhouse-client -u default --password=password -d tpcds -mn < /usr/local/src/v2.11.0rc2/queries/query_$NN.sql
echo "query $NN ended!"
N=`expr $N + 1`
sleep 1
done
将queries⽂件夹放⼊cd /usr/local/src/v2.11.0rc2/下,执⾏压测脚本进⾏压测即可。
./tpc-ds-benchmark-olap.sh
第二部分:benchmark进行查询测试
首先将生成的数据导入到clickhouse-benchmark中
clickhouse-client -u user_name --password=passeord -h 127.0.0.1 --port 9000 -d database --multiquery < /usr/local/src/v2.11.0rc2/tools/tpcds.sql
然后进行查询
echo "select * from system.numbers limit 500"| clickhouse-benchmark -i 10
在结果报告中,可以找到:
-
查询数量:参见
Queries executed:
字段。 -
状态码(按顺序给出):
-
ClickHouse服务器的连接信息。
-
已处理的查询数。
-
QPS:服务端每秒处理的查询数量
-
RPS:服务器每秒读取多少行
-
MiB/s:服务器每秒读取多少字节的数据
-
结果RPS:服务端每秒生成多少行的结果集数据
-
结果MiB/s.服务端每秒生成多少字节的结果集数据
-
-
查询执行时间的百分比。
官网上给出的语法是
$ echo "single query" | clickhouse-benchmark [keys]
或
$ clickhouse-benchmark [keys] <<< "single query"
如果要发送一组查询,请创建一个文本文件,并将每个查询的字符串放在此文件中。 例如:
SELECT * FROM system.numbers LIMIT 10000000
SELECT 1
然后将此文件传递给标准输入 clickhouse-benchmark
.
clickhouse-benchmark [keys] < queries_file
keys参数
-
-c N
,--concurrency=N
— Number of queries thatclickhouse-benchmark
同时发送。 默认值:1。 -
-d N
,--delay=N
— Interval in seconds between intermediate reports (set 0 to disable reports). Default value: 1. -
-h WORD
,--host=WORD
— Server host. Default value:localhost
. 为 比较模式 您可以使用多个-h
参数 -
-p N
,--port=N
— Server port. Default value: 9000. For the 比较模式 您可以使用多个-p
钥匙 -
-i N
,--iterations=N
— 查询的总次数. Default value: 0. -
-r
,--randomize
— 有多个查询时,以随机顺序执行. -
-s
,--secure
— 使用TLS安全连接. -
-t N
,--timelimit=N
— Time limit in seconds.clickhouse-benchmark
达到指定的时间限制时停止发送查询。 默认值:0(禁用时间限制)。 -
--confidence=N
— Level of confidence for T-test. Possible values: 0 (80%), 1 (90%), 2 (95%), 3 (98%), 4 (99%), 5 (99.5%). Default value: 5. In the 比较模式clickhouse-benchmark
执行 独立双样本学生的t测试 测试以确定两个分布是否与所选置信水平没有不同。 -
--cumulative
— Printing cumulative data instead of data per interval. -
--database=DATABASE_NAME
— ClickHouse database name. Default value:default
. -
--json=FILEPATH
— JSON output. When the key is set,clickhouse-benchmark
将报告输出到指定的JSON文件。 -
--user=USERNAME
— ClickHouse user name. Default value:default
. -
--password=PSWD
— ClickHouse user password. Default value: empty string. -
--stacktrace
— Stack traces output. When the key is set,clickhouse-bencmark
输出异常的堆栈跟踪。 -
--stage=WORD
— 查询请求的服务端处理状态. 在特定阶段Clickhouse会停止查询处理,并返回结果给clickhouse-benchmark
。 可能的值:complete
,fetch_columns
,with_mergeable_state
. 默认值:complete
. -
--help
— Shows the help message.
如果你想在查询时应用上述的部分参数 设置 ,请将它们作为键传递 --<session setting name>= SETTING_VALUE
. 例如, --max_memory_usage=1048576
.