Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
131 lines (73 sloc) 6.21 KB

POLARDB for MySQL性能白皮书 {#task_1580301 .task}

本文档介绍如何使用Sysbench 0.5测试POLARDB for MySQL集群的最大性能。

SysBench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。SysBench的目的是为了绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。

准备工作 {#section_ocn_nrq_tdb .section}

  • 三台ECS实例:

    • 每台有32个vCPU,例如规格ecs.sn1ne.8xlarge。
    • ECS实例与POLARDB for MySQL集群位于同一个地域的同一个可用区。
    • 已设置ECS实例的账号密码。
    • 操作系统为CentOS 7.4 64位。
  • 一个POLARDB for MySQL集群:

    • 其中包含一个主实例和一个只读实例。(测试多只读实例时,需要多个只读实例。)
    • 已设置集群的账号和密码。
    • 已在白名单中添加ECS实例的内网IP地址。 说明: 2核4GB的集群为入门级,用于测试、体验和极小负载的场景,高负载的生产环境不建议使用。生产环境推荐使用8核32GB或以上规格的集群。

安装测试工具 {#section_w3b_lrq_tdb .section}

  1. 在ECS中执行如下命令安装sysbench 0.5。

    yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql

    git clone https://github.com/akopytov/sysbench.git

    cd sysbench

    git checkout 0.5

    ./autogen.sh

    ./configure --prefix=/usr --mandir=/usr/share/man

    make

    make install

  2. 执行如下命令配置Sysbench client,使内核可以使用所有的CPU核处理数据包(默认设置为使用2个核),同时减少CPU核之间的上下文切换。

    sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'

    注:ffffffff表示使用32个核。请根据实际配置修改,例如,如果ECS为8核,则输入ff。

    sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"

    sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"

    sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"

测试方法 {#section_e3b_zxd_l2b .section}

  1. 获取POLARDB for MySQL集群的主地址和端口。

    1. 登录POLARDB控制台,进入集群列表页面。
    2. 单击集群ID。
    3. 在基本信息页面的访问信息中找到集群的主地址和端口,如下图所示。基本信息
  2. 在ECS上执行如下命令,以在POLARDB集群中创建数据库sbtest。

    mysql -h XXX -P XXX -u XXX -p XXX -e 'create database sbtest'

    说明: 请将本命令和后续步骤的命令中的XXX替换为POLARDB集群的主地址、端口号、用户名和密码。

  3. 准备测试数据:用Sysbench在数据库上创建表并插入数据。

    sysbench --test=sysbench/tests/db/oltp.lua --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --mysql-table-engine=innodb --oltp-table-size=25000 --oltp-tables-count=250 --db-driver=mysql prepare
    
  4. 使用sysbench测试数据库的读性能,将持续10分钟。

    sysbench --test=sysbench/tests/db/oltp.lua --mysql-host=XXX --oltp-tables-count=250 --mysql-user=XXX --mysql-password=XXX --mysql-port=XXX --db-driver=mysql --oltp-tablesize=25000 --mysql-db=sbtest --max-requests=0 --oltp_simple_ranges=0 --oltp-distinct-ranges=0 --oltp-sum-ranges=0 --oltp-order-ranges=0 --max-time=600 --oltp-read-only=on --num-threads=500 run
    
  5. 使用sysbench测试数据库的写性能,将持续10分钟。

    sysbench --test=sysbench/tests/db/oltp.lua --mysql-host=XXX --oltp-tables-count=250 --mysql-user=XXX --mysql-password=XXX --mysql-port=XXX --db-driver=mysql --oltp-tablesize=25000 --mysql-db=sbtest --max-requests=0 --max-time=600 --oltp_simple_ranges=0 --oltp-distinct-ranges=0 --oltp-sum-ranges=0 --oltp-order-ranges=0 --oltp-point-selects=0 --num-threads=128 --randtype=uniform run
    
  6. 在以上测试的过程中,您可以另外打开一个会话窗口,连接该ECS实例,并使用htop查看sysbench client的CPU使用率是否正常。

    yum install htop

    htop

    说明:

    • 执行htop后,可以按Q键退出。
    • 关于htop详解,请参见Htop官网CPU使用率

    CPU使用率

使用三台ECS进行数据库性能测试,从log中取测试结果中的QPS和TPS,如下图所示。

说明: QPS(Queries Per Second)表示数据库每秒执行的SQL数(含INSERT、SELECT、UPDATE、DELETE等)。

单台ECS的log结果如下:

单台ECS的log结果

三台ECS实例通过集群连接串连接一个POLARDB for MySQL集群时,总QPS如下。

说明: 集群连接串总是连接到主实例,所以以下QPS为主实例的性能。

QPS

三台ECS实例通过集群连接串连接一个POLARDB for MySQL集群时,总TPS如下。

说明: 集群连接串总是连接到主实例,所以以下TPS为主实例的性能。

TPS

五台ECS实例通过只读实例连接串连接到一个POLARDB for MySQL集群中各个只读实例时,聚合QPS如下。

说明:

  • 该集群中包含五个只读实例,每个实例的规格为4C 32G。
  • 每台ECS连接到一个只读实例。

聚合QPS

You can’t perform that action at this time.