【sysbench】OLTP基准测试使用


MySQL版本:8.0.36

sysbench版本:1.0.20

操作的数据库名称:sysbench_test

1、创建sysbench oltp测试的基础配置文件

一般使用sysbench测试MySQL性能的命令会很长,如以下命令:

sysbench --threads=16 --time=60 --report-interval=1 oltp_common.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-db=sysbench_test --tables=4 --table-size=100000 prepare

需要指定很多参数。如果有配置文件的话可以简化操作。

创建基础配置文件my-sysbench.cnf,并写入一些内容(仅供参考):

threads=160
time=120

db-driver=mysql
mysql-host=localhost
mysql-port=3306
mysql-socket=/home/czhang/mysql-8.0.36/mysql.sock
mysql-user=root
mysql-db=sysbench_test

注意:在配置文件中不要指定 tables 等选项,因为这个参数时Lua脚本的参数,不是sysbench可执行文件的参数,所以该参数要在命令行中指定。

使用sysbench测试MySQL主要有三步:
准备测试数据—>运行测试—>测试数据清理

2、准备测试数据

我使用8张表,每张表包含10000条数据,表名使用默认值。命令执行目录是sysbench的Lua脚本所在目录。

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_common.lua prepare

终端显示如下:
prepare结果显示

3、运行测试

1)oltp_read_write

建议先对支持 prewarm 选项的 Lua 脚本使用 prewarm 选项,以预热数据到内存,提高性能。

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_read_write.lua prewarm

预热后再运行该脚本

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_read_write.lua run

2)oltp_point_select

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_point_select.lua run

3)oltp_write_only

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_write_only.lua run

4)oltp_read_only

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_read_only.lua run

……

还有一些脚本没有运行,把命令行中的脚本名称替换即可。

4、清理数据

sysbench --config-file=/home/czhang/mysql-8.0.36/my-sysbench.cnf --tables=8 --table-size=10000 oltp_common.lua cleanup

注意:清理数据时除了将prepare改成cleanup,其他全都得一样

5、常用MySQL命令

使用sysbench对MySQL进行基准测试时可能用得上的MySQL命令:

5.1 查看指定数据库的容量大小

SELECT SUM(data_length + index_length) AS total_size_bytes,CONCAT(ROUND(SUM(data_length + index_length) / 1024 / 1024, 2), ' MB') AS total_size_mb FROM information_schema.TABLES WHERE table_schema = 'sysbench_test';

显示结果示例如下:

5.2 查看指定数据库中各表的大小

SELECT table_name,data_length + index_length AS size_bytes,CONCAT(ROUND((data_length + index_length) / 1024 / 1024, 2), ' MB') AS size_mb FROM information_schema.TABLES WHERE table_schema = 'sysbench_test' ORDER BY size_bytes DESC;

显示结果示例如下:

数据库各表大小

5.3 查看数据库各表中的记录数量

SELECT 
     t1.table_name, 
     COALESCE(t2.row_count, 0) AS record_count
FROM 
     information_schema.tables t1
LEFT JOIN (
    SELECT 
        table_name, 
        table_rows AS row_count
    FROM 
        information_schema.tables 
    WHERE 
        table_schema = 'sysbench_test' AND table_type = 'BASE TABLE'
) t2 ON t1.table_name = t2.table_name
WHERE 
     t1.table_schema = 'sysbench_test' AND t1.table_type = 'BASE TABLE';

显示结果示例如下:

6、常用cmd命令

显示包含“mysql”的进程

ps -eo pid,psr,user,cmd | grep mysql

Reference:

sysbench oltp测试示例


文章作者: Antonio
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Antonio !
  目录