【数据库测试】【shell脚本】查询同一个SQL执行多次,并统计每次耗时

场景说明

在数据库查询中会常见cold run与hot run,hot run是指将同一个SQL连续运行多遍。

运行脚本

创建一个run.sh直接复制如下脚本

  • 注意修改数据库的连接IP与密码等
  • queries2.sql 存放查询的SQL,请将queries2.sql 文件与run.sh放在同一个目录下,若不在同一个目录,注意改SQL的文件路径
#!/bin/bash
  
TRIES=3
QUERY_NUM=1
touch result.csv
truncate -s0 result.csv

# Record start time
echo "Start time: $(date +%F\ %T)" | tee result.csv

first_query=true
while read -r query; do
    sync

    if ! $first_query; then
        echo "" | tee -a result.csv
    fi
    first_query=false

    echo -n "query${QUERY_NUM}," | tee -a result.csv
    for i in $(seq 1 $TRIES); do
        { time mysql -h192.168.32.40 -P3001 -uroot -pAa123456 clickbench -e "${query}" ; }  2>&1 | grep real > a.txt
        grep -oP 'real.*\K\d+\.\d+' a.txt | awk '{print $1}' | tr '\n' ',' | tee -a result.csv
    done

    QUERY_NUM=$((QUERY_NUM + 1))

done <queries2.sql

# Record end time
echo "" | tee -a result.csv
echo "End time: $(date +%F\ %T)" | tee -a result.csv

代码实现原理解读

  1. 将尝试次数(TRIES)设置为 3,并将查询编号(QUERY_NUM)初始化为 1。
  2. 创建一个空的 result.csv 文件,并将其截断为 0 字节。
  3. 进入一个循环,每次迭代从 queries.sql 文件中读取一个 SQL 查询。
  4. 对于每个查询,它打印查询编号和逗号(,),然后进入另一个循环,执行查询 TRIES 次。
  5. 对于每次查询的执行,它使用适当的命令行选项运行 mysql 来执行 MySQL 数据库中的查询。然后将 time 命令的输出重定向到名为 a.txt 的文件中,并使用 grepawksed 从输出中提取执行时间并将其格式化为 CSV 行。
  6. 对于每次查询的执行,它使用 tee 命令将 CSV 行附加到 result.csv 文件中,以同时打印到控制台和附加到文件。
  7. 在每次查询执行之间,它打印逗号(,)以分隔 CSV 列。
  8. 在查询的所有执行完成后,它打印一个换行符(\n),以移动到 CSV 文件中的下一行。
  9. 在记录了所有查询的执行时间并将其记录在 CSV 文件中之后,脚本终止执行。

结果显示截图

image.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值