通过编译TPC-DS生成测试数据并发送到benchmark进行查询测试

第一部分:编译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 that clickhouse-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.

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值