You need to enable JavaScript to run this app.
文档中心
云服务器

云服务器

复制全文
下载 pdf
性能测试
使用Sysbench测试MySQL应用性能
复制全文
下载 pdf
使用Sysbench测试MySQL应用性能
本文为您介绍使用Sysbench工具测试云服务器MySQL应用性能的方法。​
背景信息​
  • MySQL简介​
  • MySQL是一个关系型数据库管理系统(Relational Database Management System,RDBMS),使用最常用的结构式查询语言SQL进行数据库管理。在web应用方面,MySQL在高负载的情况下对虚拟机的CPU算力、网络和存储等性能要求很高,经常被用作衡量虚拟机整体性能的应用软件之一。​
  • Sysbench工具​
  • Sysbench是一个模块化的、跨平台、开源的多线程基准测试工具,可以执行数据库、CPU、内存、线程、IO等方面的性能测试,主要用于评估测试各种不同系统参数下的数据库负载情况。对于如何使用Sysbench测试CPU、内存、IO等,请参考使用Sysbench测试云服务器性能。​
测试指标​
  • TPS(Transactions Per Second):每秒事务数,即数据库每秒执行的事务数。​
  • QPS(Queries Per Second):每秒接收的请求查询次数,数据库每秒执行的 SQL 数,包含INSERT、SELECT、UPDATE、DELETE等。​
软件版本​
  • MySQL/MariaDB:本文以MariaDB 10.6.12为例。​
  • Sysbench:本文以Sysbench 1.0.19为例。​
测试环境​
两台相同规格的ECS实例,分别作为服务端(Sever)和客户端(Client),具体配置如下表所示。​
创建实例请参见通过向导购买实例。​
​
测试示例​
Sever端​
Client端​
实例规格​
ecs.g3i.2xlarge​
ecs.g3i.2xlarge​
镜像类型​
Ubuntu 22.04​
Ubuntu 22.04​
数据盘规格​
数据盘:1000GiB * 1​
-​
实例数量​
1​
1​
​
请在Sever端、Client端(按需)参考下表优化实例配置以获得最佳的 MySQL 应用性能体验。​
​
优化项​
具体配置​
云盘分区​
在进行云盘分区时,建议设置起始磁柱值 ≥ 2048,且为8的倍数。详细分区操作见分区格式化云盘。​
说明​
本文会在步骤一中将云盘分区并挂载至文件系统,您可跳过此项操作。​
安装irqbalance-ng​
参考网卡中断绑定安装irqbalance-ng自动配置物理网卡中断,提升网络性能。​
关闭napi_tx​
该特性仅在 Linux内核版本 ≥ 5.3 时默认开启,您可以执行uname -r命令查看内核版本并按以下方式关闭napi_tx。​
  • Ubuntu​
​
# 关闭napi_tx:​
rmmod virtio_net && modprobe virtio_net napi_tx=0 && systemctl restart systemd-networkd.service​
# 打开napi_tx:​
rmmod virtio_net && modprobe virtio_net napi_tx=1 && systemctl restart systemd-networkd.service​
​
  • Debian​
​
# 关闭napi_tx:​
rmmod virtio_net && modprobe virtio_net napi_tx=0 && systemctl restart networking.service​
# 打开napi_tx:​
rmmod virtio_net && modprobe virtio_net napi_tx=1 && systemctl restart networking.service​
​
  • CentOS​
​
# 关闭napi_tx:​
rmmod virtio_net && modprobe virtio_net napi_tx=0 && systemctl restart nmcli c reload​
# 打开napi_tx:​
rmmod virtio_net && modprobe virtio_net napi_tx=1 && systemctl restart nmcli c reload​
​
执行cat /sys/module/virtio_net/parameters/napi_tx,返回N代表napi_tx关闭成功。​
​alt​​
​
操作步骤​
说明​
  • 本文的测试结果仅作为参考,不代表云服务器的真实最优性能。​
  • 为避免数据丢失,建议您在新创建的无数据的实例上参考本文进行性能测试。​
步骤一:Server端部署MySQL应用​
  1. 执行如下命令创建install_mysql.sh脚本。​
  • vim install_mysql.sh​
  1. 按i进入编辑模式,并输入以下文件中的内容。​
该文件用于安装 MySQL 应用,将云盘进行分区并挂载至文件系统,并指定 MySQL 持久化存储路径到该文件系统。​
  • ​
    ​
    install_mysql.sh
    ​
    ​
  1. 按Esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。​
  1. 执行如下命令运行脚本。​
  • bash install_mysql.sh >> install_mysql.log​
步骤二:Client端安装Sysbench工具并创建测试脚本​
  1. 安装 Sysbench 工具。​
  1. 执行如下命令创建install_sysbench.sh文件。​
  • vim install_sysbench.sh​
  1. 按i进入编辑模式,输入以下内容。​
  • ​
    #!/bin/bash​
    ​
    if which apt;then​
    apt update​
    apt-get install -y automake libtool pkg-config default-libmysqlclient-dev:amd64 ​
    elif which yum;then​
    yum install -y libtool mysql-devel automake​
    fi​
    ​
    wget https://github.com/akopytov/sysbench/archive/1.0.19/sysbench-1.0.19.tar.gz​
    tar xzvf sysbench-1.0.19.tar.gz​
    ​
    cd sysbench-1.0.19/​
    ./autogen.sh​
    ./configure --with-mysql​
    make -j8​
    make install​
    ​
  1. 按Esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。​
  1. 执行如下命令,安装 Sysbench 工具。​
  • bash install_sysbench.sh​
  1. 创建测试时的运行脚本mysql_test_run.sh。​
  1. 执行如下命令创建一个测试时的运行脚本。​
  • vim mysql_test_run.sh​
  1. 按i进入编辑模式,输入以下内容,此处暂不执行该脚本。​
  • ​
    #!/bin/bash​
    ​
    dest_host=$serverIP​
    thread_count=128​
    ​
    VIRT_BENCHMARCK_TARGET=/usr/local​
    VIRT_BENCHMARCK_OUTPUT=$(pwd)​
    ​
    echo "------------------------------------------------"​
    date​
    echo "BENCHMARK PREPARE sysbench mysql ${dest_host} ${thread_count}"​
    ​
    for MYSQLTEST in oltp_read_only oltp_write_only​
    do​
    $VIRT_BENCHMARCK_TARGET/bin/sysbench --mysql-host=${dest_host} --mysql-port=3306 --mysql-user=sbtest --mysql-password=sbpasswd $VIRT_BENCHMARCK_TARGET/share/sysbench/oltp_common.lua --tables=10 --table_size=100000 prepare > $VIRT_BENCHMARCK_OUTPUT/oltp_prepare.log​
    echo "------------------------------------------------"​
    ​
    echo "BENCHMARK STATR [$MYSQLTEST] ${dest_host} ${thread_count}"​
    $VIRT_BENCHMARCK_TARGET/bin/sysbench --threads=${thread_count} --time=120 --report-interval=1 --mysql-host=${dest_host} --mysql-port=3306 --mysql-user=sbtest --mysql-password=sbpasswd $VIRT_BENCHMARCK_TARGET/share/sysbench/$MYSQLTEST.lua --tables=10 --table_size=100000 run > $VIRT_BENCHMARCK_OUTPUT/$MYSQLTEST.log​
    ​
    echo "BENCHMARK RESULT [$MYSQLTEST] ${dest_host} ${thread_count}"​
    grep -E "transactions:|queries:" $VIRT_BENCHMARCK_OUTPUT/$MYSQLTEST.log​
    $VIRT_BENCHMARCK_TARGET/bin/sysbench --mysql-host=${dest_host} --mysql-port=3306 --mysql-user=sbtest --mysql-password=sbpasswd $VIRT_BENCHMARCK_TARGET/share/sysbench/oltp_common.lua --tables=10 --table_size=100000 cleanup > $VIRT_BENCHMARCK_OUTPUT/oltp_cleanup.log​
    ​
    sleep 300s # Avoid MySQL's WAL mechanism affecting QPS test​
    done​
    ​
  1. 按Esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。​
  1. 创建获取结果的脚本mysql_test_result.sh。​
  1. 执行如下命令创建一个获取结果的脚本。​
  • vim mysql_test_result.sh​
  1. 按i进入编辑模式,输入以下内容,此处暂不执行该脚本。​
  • ​
    #!/bin/bash​
    VIRT_BENCHMARCK_OUTPUT=$(pwd)​
    ​
    write_tps=$(grep -E "transactions:" $VIRT_BENCHMARCK_OUTPUT/oltp_write_only.log |awk '{print $3}')​
    read_qps=$(grep -E "queries:" $VIRT_BENCHMARCK_OUTPUT/oltp_read_only.log |awk '{print $3}')​
    ​
    echo "{\"mysql_write_tps\":"${write_tps:1}",\"mysql_read_qps\":"${read_qps:1}"}"​
    ​
  1. 按Esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。​
步骤三:Client端执行脚本测试并获取结果​
  1. 获取 Server端的私网IP地址,然后登录Client端云服务器,执行如下命令进行测试。​
您可在云服务器控制台实例列表页的“主IPv4地址”列查看Sever端云服务器的私网IP地址。​
  • serverIP=192.168.x.xx bash mysql_test_result.sh​
  1. 待上述命令运行结束后,执行如下命令获取测试结果。​
  • bash mysql_test_result.sh​
  • 回显如下所示,其中“mysql_write_tps”表示此次测得的 MySQL 的 TPS 指标,“mysql_read_qps”表示 MySQL 的 QPS 指标。​
  • ​alt​​
  • Client端测试结束后,您也可以执行如下命令查看更详细的测试结果。​
  • 查看 QPS 指标:cat oltp_read_only.log​
  • 查看 TPS 指标:cat oltp_write_only.log​
  • 下文以查看oltp_read_only(QPS)为例,对相关指标说明如下。​
  • ​alt​​
  • ​
    SQL statistics:​
    queries performed:​
    read: 49552244 // 执行读请求的总数,如SELECT操作​
    write: 0 // 执行写请求的总数,如UPDATE、INSERT和DELETE操作​
    other: 7078892 // 执行其他请求总数,如CREATE、DROP和COMMIT等操作​
    total: 56631136 // 执行所有请求操作的总数​
    transactions: 3539446 (29492.41 per sec.) // 前者表示总共完成的事务数,后者表示TPS​
    queries: 56631136 (471878.50 per sec.) // 前者表示总共完成的查询次数,后者表示QPS​
    ignored errors: 0 (0.00 per sec.) // 出现且已经忽略的错误数​
    reconnects: 0 (0.00 per sec.) // 请求重连次数​
    ​
    General statistics:​
    total time: 120.0110s // 测试时长​
    total number of events: 3539446 // 总共完成的event数量​
    ​
    Latency (ms):​
    min: 1.48 // 表示完成1个event的最短耗时​
    avg: 4.34 // 表示完成所有event的平均耗时​
    max: 210.23 // 表示完成1个event的最长耗时​
    95th percentile: 6.79 // 表示95%的event耗时在这个时间完成​
    sum: 15356801.48 // 表示所有线程测试期间的总耗时​
    ​
    Threads fairness:​
    events (avg/stddev): 27651.9219/929.10 // 前者表示平均每个线程完成的event数量,后者表示标准差​
    execution time (avg/stddev): 119.9750/0.00 // 前者表示平均每个线程执行的时间,后者表示标准差​
    ​
​
最近更新时间:2025.10.09 16:18:29
这个页面对您有帮助吗?
有用
有用
无用
无用