4核mysql事务sysbench_sysbench的实现原理

本文详细介绍了sysbench工具的用途、安装步骤以及如何对MySQL进行CPU、IO和OLTP事务的测试。sysbench可以评估数据库在不同场景下的性能,通过模拟多种操作来测试CPU、磁盘IO、数据库事务处理能力等。在测试数据库性能时,sysbench会创建并填充sbtest表,执行一系列查询、更新和插入操作,并提供详细的统计结果。
摘要由CSDN通过智能技术生成

1简介

SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:

1、cpu性能

2、磁盘io性能

3、调度程序性能

4、内存分配及传输速度

5、POSIX线程性能

6、数据库性能(OLTP基准测试)

目前sysbench主要支持MySQL,pgsql,oracle这3种数据库。

测试mysql时,sysbench按照指定的数量开启线程,每个线程与MySQL建立一个连接,每个线程不停地进行事务操作,打开事务,然后进行一些查询、更新、插入操作,提交事务,再开始新的事务;所有的SQL只访问一个表-sbtest,是由sysbench的prepare命令建好的。其中的记录数,也是在prepare时指定好并创建的。测试结束,会有一个统计结果,包括例如每秒事务数、平均响应时间等等。

2安装

1.下载sysbench:http://sourceforge.net/projects/sysbench/

2.解压安装包:sysbench-0.4.12.tar.gz出现sysbench-0.4.12文件

tar zxvf sysbench-0.4.12.tar.gz

3.安装:

A.cdsysbench-0.4.12

B.运行autogen.sh

./autogen.sh

C.安装

./configure –prefix=/home/mysql/sysbench–with-mysql-includes=/u01/mysql/include/mysql–with-mysql-libs=/u01/mysql/lib/mysql–with-mysql

D.make

E.make install

说明:

–prefix=/home/mysql/sysbench:指定sysbench的bin目录;

–with-mysql-includes=/u01/mysql/include/mysql:指定安装mysql时候的includes目录;

–with-mysql-libs=/u01/mysql/lib/mysql:指定装mysql时候的lib目录;

–with-mysql:sysbench默认支持mysql,如果需要测试oracle或者pgsql则需要制定–with-oracle或者–with-pgsql

3实现

1 cpu

常用选项—cpu-max-prime=N,用于计算素数;--test=cpu;

2 io

模拟了很多innodb特性;--test=fileio;

分为prepare,run和cleanup,分别为生成数据,运行测试和清理数据;

--file-test-mode,分为seqrd/rndrd/seqwr/seqrewr/rndwr/rndrw,可进行顺序读写,随机读写以及混合随机读写;

输出结果显示调用fsync()频率以及使用sync或者async IO模式;

3 oltp

测试mysql,也分为三步:

3.1prepare创建表并填充数据(数据库需要手工创建),表名默认sbtest;

CREATE TABLE `sbtest` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`k` int(10) unsigned NOT NULL DEFAULT '0',

`c` char(120) NOT NULL DEFAULT '',

`pad` char(60) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

KEY `k` (`k`));

3.2run进行测试;

有3种模式:

Simple:每个线程只运行SELECT c FROM sbtest WHERE id=N

Advanced transactional:执行事务,包含查询和DML(保证数据记录不变)

Non-transactional:可自主选择要运行的query,DML会影响表记录,多次测试需要相应的cleanup/prepare;--oltp-nontrx-mode可指定测试用的sql类型

3.3 cleanup清空创建的表和数据

重要选项

--oltp-test-mode=STRINGtest type to use {simple,complex,nontrx,sp} [complex]

--oltp-reconnect-mode=STRINGreconnect mode {session,transaction,query,random} [session]

--oltp-sp-name=STRINGname of store procedure to call in SP test mode []

--oltp-read-only=[on|off]generate only 'read' queries (do not modify database) [off]

--oltp-skip-trx=[on|off]skip BEGIN/COMMIT statements [off]

--oltp-range-size=Nrange size for range queries [100]

--oltp-point-selects=Nnumber of point selects [10]

--oltp-simple-ranges=Nnumber of simple ranges [1]

--oltp-sum-ranges=Nnumber of sum ranges [1]

--oltp-order-ranges=Nnumber of ordered ranges [1]

--oltp-distinct-ranges=Nnumber of distinct ranges [1]

--oltp-index-updates=Nnumber of index update [1]

--oltp-non-index-updates=Nnumber of non-index updates [1]

--oltp-nontrx-mode=STRINGmode for non-transactional test {select, update_key, update_nokey, insert, delete} [select]

--oltp-auto-inc=[on|off]whether AUTO_INCREMENT (or equivalent) should be used on id column [on]

--oltp-connect-delay=Ntime in microseconds to sleep after connection to database [10000]

--oltp-user-delay-min=Nminimum time in microseconds to sleep after each request [0]

--oltp-user-delay-max=Nmaximum time in microseconds to sleep after each request [0]

--oltp-table-name=STRINGname of test table [sbtest]

--oltp-table-size=Nnumber of records in test table [10000]

--oltp-dist-type=STRINGrandom numbers distribution {uniform,gaussian,special} [special]

--oltp-dist-iter=Nnumber of iterations used for numbers generation [12]

--oltp-dist-pct=Npercentage of values to be treated as 'special' (for special distribution) [1]

--oltp-dist-res=Npercentage of 'special' values to use (for special distribution) [75]

附录

1 高级事务模式下执行的query列表

Point queries:

SELECT c FROM sbtest WHERE id=N

Range queries:

SELECT c FROM sbtest WHERE id BETWEEN N AND M

Range SUM() queries:

SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and M

Range ORDER BY queries:

SELECT c FROM sbtest WHERE id between N and M ORDER BY c

Range DISTINCT queries:

SELECT DISTINCT c FROM sbtest WHERE id BETWEEN N and M ORDER BY c

UPDATEs on index column:

UPDATE sbtest SET k=k+1 WHERE id=N

UPDATEs on non-index column:

UPDATE sbtest SET c=N WHERE id=M

DELETE queries:

DELETE FROM sbtest WHERE id=N

INSERT queries:

INSERT INTO sbtest VALUES (...)

2 非事务模式下执行的query列表

Point queries:

SELECT pad FROM sbtest WHERE id=N

UPDATEs on index column:

UPDATE sbtest SET k=k+1 WHERE id=N

UPDATEs on non-index column:

UPDATE sbtest SET c=N WHERE id=M

DELETE queries:

DELETE FROM sbtest WHERE id=N

The generated row IDs are unique over each test run, so no row is deleted twice.

INSERT queries:

INSERT INTO sbtest (k, c, pad) VALUES(N, M, S)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值