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
终端显示如下:
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: