热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sysbench0.5初体验

最近工作中需要测试数据库的OLTP的性能,参考了下MariaDB的benchmark中的测试脚本,发现脚本中已经使用了Sysbench-0.5ÿ

最近工作中需要测试数据库的OLTP的性能,参考了下MariaDB的benchmark中的测试脚本,发现脚本中已经使用了Sysbench-0.5,可以在这里https://launchpad.net/sysbench 拉下来trunk,这就是传说中的0.5版本。

 

1. 编译安装

1 Shell>pwd
2
3 /home/nocode
4
5 Shell> bzr branch lp:~sysbench-developers/sysbench/0.5 sysbench
6
7 Shell> cd sysbench
8
9 Shell> ./autogen.sh
10
11 Shell> ./configure
12
13 Shell> make
14
15 Shell> sudo make install

 

2. 使用

1 Shell>pwd
2
3 /home/nocode/sysbench/sysbench
4
5 Shell>./sysbench --num-threads=1 --test=./tests/db/oltp.lua --oltp-table-size=1000 --oltp-tables-count=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password= --mysql-db=test prepare
6
7 Shell>./sysbench --num-threads=1 --test=./tests/db/oltp.lua --oltp-table-size=1000 --oltp-tables-count=1 --report-interval=5 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password= --mysql-db=test run
8
9 Shell>./sysbench --num-threads=1 --test=./tests/db/oltp.lua --oltp-table-size=1000 --oltp-tables-count=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password= --mysql-db=test cleanup

 

3. Sysbench分析

这里可以看出来--test参数的值有所变化,在之前的版本,--test取值如下

Compiled-in tests:
fileio
- File I/O test
cpu
- CPU performance test
memory
- Memory functions speed test
threads
- Threads subsystem performance test
mutex
- Mutex performance test
oltp
- OLTP test

 

新版本的test的取值是lua脚本,我们看下test/db/下都有哪些脚本:

Shell>ls
common.lua Makefile.am parallel_prepare.lua update_index.lua
delete.lua Makefile.
in select.lua update_non_index.lua
insert.lua oltp.lua select_random_points.lua
Makefile oltp_simple.lua select_random_ranges.lua

 

这些脚本大部分都是可以作为test的取值的,这就是新版本有别于之前版本的最大区别,我们可以自己定义lua脚本,

进行定制化的测试,而不需要去修改sysbench的代码,重新编译再进行测试。

我们首先看下common.lua,这个文件并非是测试文件,而是用于prepare和cleanup,当然还包括参数的读取。

先看下一下这个脚本里面的prepare:

1 function prepare()
2 local query
3 local i
4 local j
5
6 set_vars()
7
8 db_connect()
9 for i = 1,oltp_tables_count do
10 create_insert(i)
11 end
12
13 return 0
14 end

 

prepare函数调用create_insert函数来创建表并插入数据。cleanup函数用来DROP TABLE,如下所示。

function cleanup()
local iset_vars()for i = 1,oltp_tables_count do
print("Dropping table 'sbtest" .. i .. "'...")
db_query(
"DROP TABLE sbtest".. i )
end
end

 

下面我们看下oltp.lua文件,这里面有两个函数,一个初始化函数:thread_init,用于初始化每个线程的参数

function thread_init(thread_id)
set_vars()
if (db_driver == "mysql" and mysql_table_engine == "myisam") then
begin_query
= "LOCK TABLES sbtest WRITE"
commit_query
= "UNLOCK TABLES"
else
begin_query
= "BEGIN"
commit_query
= "COMMIT"
endend

 

这个初始化函数主要是调用了common.lua里面的set_vars函数,来初始化oltp相关的参数,如oltp_range_size,oltp_sum_ranges等等,

这些参数都是用来控制一个T(Transaction)里面语句的类型和个数的。所谓的TPS值的高低也和这些值有关系,一个T的语句越少,越简单,

TPS的值就会越高,相反,如果一个T里面语句多,语句复杂,那么TPS必然降低。我们来具体看下每个事务执行哪些语句,这就是函数event做的事情。

我们看下这个函数里面的典型代码:

if not oltp_skip_trx then
db_query(begin_query)
endfor i=1, oltp_point_selects do
rs
= db_query("SELECT c FROM ".. table_name .." WHERE id=" .. sb_rand(1, o ltp_table_size))
endfor i=1, oltp_simple_ranges do
range_start
= sb_rand(1, oltp_table_size)
rs
= db_query("SELECT c FROM ".. table_name .." WHERE id BETWEEN " .. rang e_start .. " AND " .. range_start .. "+" .. oltp_range_size - 1)
end

 

根据oltp_skip_trx来决定是否启用事务,然后根据oltp_point_selects来决定点查询语句的个数,oltp_simple_rannges来确定范围查询语句的个数。

4. 定制脚本

默认的sysbench在prepare的时候是使用的多行插入,而我的测试需要使用单行插入来完成初始化。

故这里需要对common.lua中的create_insert函数进行修改。需要添加一个参数oltp_bulk_insert来决定是否使用多行插入,

同时需要修改相应的INSERT语句,看下面的patch就一目了然了。

Shell>bzr diff
=== modified file 'sysbench/tests/db/common.lua'
--- sysbench/tests/db/common.lua 2011-12-01 19:43:29 +0000
+++ sysbench/tests/db/common.lua 2013-09-12 06:51:41 +0000
@@
-25,7 +25,7 @@
CREATE TABLE sbtest]] .. i ..
[[ (
id INTEGER UNSIGNED NOT NULL
]] ..
((oltp_auto_inc
and "AUTO_INCREMENT") or "") .. [[,
-k INTEGER UNSIGNED DEFAULT '0' NOT NULL,
+k INTEGER UNSIGNED DEFAULT '0' NOT NULL, KEY(k),
c CHAR(120) DEFAULT '' NOT NULL,
pad CHAR(60) DEFAULT '' NOT NULL,
]] .. index_name .. [[ (id)
@@ -58,14 +58,18 @@db_query(query)- db_query("CREATE INDEX k_" .. i .. " on sbtest" .. i .. "(k)")
+ if (db_driver ~= "mysql") then
+ db_query("CREATE INDEX k_" .. i .. " on sbtest" .. i .. "(k)")
+ endprint("Inserting " .. oltp_table_size .. " records into 'sbtest" .. i .. "'")- if (oltp_auto_inc) then
- db_bulk_insert_init("INSERT INTO sbtest" .. i .. "(k, c, pad) VALUES")
- else
- db_bulk_insert_init("INSERT INTO sbtest" .. i .. "(id, k, c, pad) VALUES")
+ if (oltp_bulk_insert) then
+ if (oltp_auto_inc) then
+ db_bulk_insert_init("INSERT INTO sbtest" .. i .. "(k, c, pad) VALUES")
+ else
+ db_bulk_insert_init("INSERT INTO sbtest" .. i .. "(id, k, c, pad) VALUES")
+ end
endlocal c_val
@@ -79,13 +83,21 @@
pad_val = sb_rand_str([[
###########-###########-###########-###########-###########
]])- if (oltp_auto_inc) then
- db_bulk_insert_next("(" .. sb_rand(1, oltp_table_size) .. ", '".. c_val .."', '" .. pad_val .. "')")
+ if (oltp_bulk_insert) then
+ if (oltp_auto_inc) then
+ db_bulk_insert_next("(" .. sb_rand(1, oltp_table_size) .. ", '".. c_val .."', '" .. pad_val .. "')")
+ else
+ db_bulk_insert_next("("..j.."," .. sb_rand(1, oltp_table_size) .. ",'".. c_val .."', '" .. pad_val .. "' )")
+ end
else
- db_bulk_insert_next("("..j.."," .. sb_rand(1, oltp_table_size) .. ",'".. c_val .."', '" .. pad_val .. "' )")
+ if (oltp_auto_inc) then
+ db_query("INSERT INTO sbtest" .. i .. "(k, c, pad) VALUES(" .. sb_rand(1, oltp_table_size) .. ", '".. c_val .."', '" .. pad_val .. "')")
+ else
+ db_query("INSERT INTO sbtest" .. i .. "(id, k, c, pad) VALUES(" ..j.."," .. sb_rand(1, oltp_table_size) .. ", '".. c_val .."', '" .. pad_val .. "')")
+ end
end
+
end
-
db_bulk_insert_done()
@@
-150,4 +162,10 @@
oltp_skip_trx
= false
end+ if (oltp_bulk_insert == 'off') then
+ oltp_bulk_insert = false
+ else
+ oltp_bulk_insert = true
+ end
+
end

 

5. 小结

sysbench-0.5使用脚本来决定测试语句,比之前在代码里写死测试更加方便用户修改和使用,不需要去修改源程序,只需要修改相应的lua脚本,

即可定制不同的测试用例,真心不错。

 

转:https://www.cnblogs.com/nocode/p/3338287.html



推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 如何在Linux系统上部署MySQL 5.7.28
    本文详细介绍了在Linux系统上部署MySQL 5.7.28的具体步骤。通过官方下载页面获取最新安装包后,按照提供的指南进行配置和安装。文章内容实用性强,适合初学者和有经验的管理员参考。 ... [详细]
  • 阿里云服务器搭建详解——Ubuntu
    由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器。听朋友说,学生买的话是非常便宜 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 在重新安装Ubuntu并配置Django和PyCharm后,忘记测试MySQL连接,导致在后续配置过程中遇到错误:ERROR 2003 (HY000) - 无法连接到本地服务器 ‘127.0.0.1’ (111)。本文将详细介绍该错误的原因及解决步骤,帮助用户快速恢复MySQL服务的正常运行。我们将从检查网络配置、验证MySQL服务状态、配置防火墙规则等方面入手,提供全面的故障排除指南。 ... [详细]
  • 简书: https:www.jianshu.comp5c3938ce2cf61.官网下载https:nginx.orgendownload.html  2.上传CentOS服务略3 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了实现MySQL半同步架构相关的知识,希望对你有一定的参考价值。默认情况下,MySQL的复制功能是异步的, ... [详细]
  • mysql--mariadb--postgresql官网简介https:www.postgresql.org使用的镜像名称centospostgresql-96-centos7 ... [详细]
author-avatar
开发者小白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有