当前位置:首页 » 编程语言 » sqlbenchmark测试
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlbenchmark测试

发布时间: 2022-06-08 15:30:18

‘壹’ 怎么用benchmarksql测试oracle

1、确定是否在主机的每台虚拟机上均安装了VMware Tools。
2、通过主机上或资源池中其他虚拟机的CPU使用情况与此虚拟机的CPU使用情况值进行比较。主机的虚拟机视图上的堆栈条形图显示主机上所有虚拟机的CPU使用情况。
3、验证虚拟机就绪时间过长是否由其CPU使用情况时间达到CPU限制设置所致。如果出现这种情况,请增加虚拟机上的 CPU 限制。
4、提升CPU份额以给予虚拟机更多机会运行。如果主机系统受到CPU约束,则主机上的总就绪时间可能仍维持在相同级别。如果主机就绪时间没有减少,则为高优先级虚拟机设置CPU预留,保证它们收到所需要的CPU周期。
5、提升分配给虚拟机的内存量。此操作会减少所缓存应用程序的磁盘和 / 或网络活动。这可能会降低磁盘I/O ,并减少主机对虚拟化硬件的需求。具有较少资源分配的虚拟机通常可累积更多的 CPU 就绪时间。
6、将虚拟机上的虚拟 CPU 数量减少到执行工作负载所需要的数量。(如:四路虚拟机上的单线程应用程序只能从单个vCPU中受益。而管理程序还需维护三个空闲vCPU,占用本可用来处理其他工作的CPU周期。)
7、如果主机不在DRS群集中,则将它添加到一个群集中。如果主机在DRS群集中,则增加主机数,并将一个或多个虚拟机迁移到新主机上。
8、在允许的情况下,在主机上升级物理CPU或内核。
9、采用最新版本的管理程序软件并启用CPU节省功能(例如TCP分段卸载、较大内存页面和巨型帧)。

‘贰’ 在BenchmarkSQL执行以下哪个脚本,可以对表中写入数据

选择一个数据库,点击“查询”,在右侧点击“创建查询”,输入SQL语句,点击“执行”就可以了,示专例SQL:
CREATE TABLE `属test`.`users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

‘叁’ 为什么增大benchmarksql执行时间,tpmc降低

说到benchmaeksql,其实很多人并不陌生

因为它确实在对数据库的测试过程中起到了一定的作用。现在很多数据库用户也会将这个测试的结果作为衡量数据库好坏的一个因素之一。

但是我相信,很多人在使用的过程中,也应该发现了benchmarksql的一些不足之处。

下面我将说一下个人的愚见,也许是自己操作过程中的问题,毕竟才踏入数据库开发的行列,还是一个菜鸟,在不停的学习中。

首先,个人呢觉得在数据加载这一块,做的不是很好,查看了一下load那一块的代码,发现对所有的数据都是insert进去的,这样的效率应该是相对于来说是慢很多的。

其次在最后进行数据测试的时候,如果设置为1个terminals的时候,可能看不出什么问题。但是当设置较大的时候,例如测试100个warehouse,根据测试规则,100个warehouse的时候,最多可以有1000个terminals,这个时候,就会发现经常回出现键值唯一的错误,出现这个错误应该是正常的,但是不应该在这个错误出现之后,报出java堆栈的错误,这个应该是一个bug吧

并且我查看了源代码之后,也发现了一个问题,就是在事物提交更新的那个模块,并没有做到一个sql语句进行一次事物提交,而是在两个或者更多的sql处理之后才进行提交操作。这个在做数据更新的时候可能会出错。具体网上应该有很多这样的文章,如果第一个错误,第二个提交事务的时候会报错,这个觉得应该需要修正一下。

另外在配置方面,在网上查了很久都没有说一个具体的配置之间的关联和最有配置。

这个目前根据自身的经验,我觉得和机子的配置有关,不同的配置,我们可以设置共享内存和存储方面

在每分钟执行事务数的那个配置,我们可以根据配置慢慢调整。我的做法是:设定好运行10分钟,1个terminals,100个warehouse,然后从1000开始,每次上涨10000,然后运行完之后看吞吐量,如果到达一个值之后,有所降低,然后在每次减1000或2000,直到找到最优值。

然后每分钟执行事务数设置找到的最优值,在调试terminals。从1000开始,往回每次减100,按照找limitTxnsPerMin的方法找出最优值即可。

当然这种方式找出的值,对不同主机和不同配置都是有所不同的。同时需要注意的是当terminals越大的时候,你会发现在执行的过程中,出现违反键值唯一约束的问题也就越多。不过我认为这个是正常的。

‘肆’ 如何测试mysql的性能和稳定性

有一些有用的工具可以测试MySQL 和基于MySQL 的系统的性能。这里将演示如何利用这些工具进行测试。

mysqlslap

mysqlslap可以模拟服务器的负载,并输出计时信息。它包含在MySQL 5.1 的发行包中,应该在MySQL 4.1或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL 语句(可以在命令行上执行,也可以把SQL 语句写入到参数文件中)。如果没有指定SQL 语句,mysqlslap 会自动生成查询schema 的SELECT 语句。

MySQL Benchmark Suite (sql-bench)

在MySQL 的发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的操作在服务器上执行得更快。

这个测试套件的主要好处是包含了大量预定义的测试,容易使用,所以可以很轻松地用于比较不同存储引擎或者不同配置的性能测试。其也可以用于高层次测试,比较两个服务器的总体性能。当然也可以只执行预定义测试的子集(例如只测试UPDATE 的性能)。这些测试大部分是CPU 密集型的,但也有些短时间的测试需要大量的磁盘I/O 操作。

这个套件的最大缺点主要有:它是单用户模式的,测试的数据集很小且用户无法使用指定的数据,并且同一个测试多次运行的结果可能会相差很大。因为是单线程且串行执行的,所以无法测试多CPU 的能力,只能用于比较单CPU 服务器的性能差别。使用这个套件测试数据库服务器还需要Perl 和BDB 的支持,相关文档请参考.

Super Smack

Super Smack是一款用于MySQL 和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。这是一个复杂而强大的工具,可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。测试定义在"smack"文件中,smack 文件使用一种简单的语法定义测试的客户端、表、查询等测试要素。

Database Test Suite

Database Test Suite 是由开源软件开发实验室(OSDL,Open Source DevelopmentLabs)设计的,发布在SourceForge 网站上,这是一款类似某些工业标准测试的测试工具集,例如由事务处理性能委员会(TPC,Transaction Processing Performance Council)制定的各种标准。特别值得一提的是,其中的dbt2 就是一款免费的TPC-C OLTP 测试工具(未认证)。之前本书作者经常使用该工具,不过现在已经使用自己研发的专用于MySQL 的测试工具替代了。

Percona's TPCC-MySQL Tool

我们开发了一个类似TPC-C 的基准测试工具集,其中有部分是专门为MySQL 测试开发的。在评估大压力下MySQL 的一些行为时,我们经常会利用这个工具进行测试(简单的测试,一般会采用sysbench 替代),在源码库中有一个简单的文档说明。

sysbench

sysbench是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件I/O、操作系统调度器、内存分配和传输速度、POSIX 线程,以及数据库服务器等。sysbench 支持Lua 脚本语言,Lua 对于各种测试场景的设置可以非常灵活。sysbench 是我们非常喜欢的一种全能测试工具,支持MySQL、操作系统和硬件的硬件测试。(节选自《高性能MySQL》)

‘伍’ BenchmarkSQL都测试了数据库的什么

数据库的吞吐率和性能

‘陆’ mysql 性能测试报告怎么写

给你看个范例:


测试环境:
DELL2.4Gmemory512M
RH9.0MySQL3.23.54
测试使用的是mysql缺省参数,用mysql提供的API用C编写测试程序
测试程序共启动40个线程进行数据库操作,查找、插入、修改、删除各10个,每个线程独立与SqlServer连接。
数据库结构,单表,表结构如下:
toheader100byte主键
contactheader100byte
called50byte
cseq100byte
hashvalint
timestampint次键
对主次键分别建了索引。分别在5万、10万、50万用户环境做测试,结果如下:


查找100次

插入100次

修改100次

删除100次

5万

100-300ms

100-300ms

100-300ms

100-300ms

10万

500ms-1s

500ms-1s

500ms-1s

500ms-1s

50万

3s-5s

3s-5s

3s-5s

3s-5s

从此数据看性能是很不错的,因为mysql能保证每个操作是原子的,所以不用考虑线程间的同步。

但有一个问题:即mysql的每个操作是原子的,所以做每个操作时,其它线程是阻塞的,在大数据量查询时,花的时间较长,会对其它线程有影响。我在保持其它线程工作不变的情况下,将每个查找线程改为做一次对所有记录的查询,在5万和10万记录时表现不错,分别为250ms和450ms,但在50万记录时,这个数值达到了22秒。而且在50万用户时,通过条件查找部分数据也很慢,如查询结果为10万记录时用11秒。
怀疑是sqlserver的参数影响,按数据库说明修改了几个缓冲区的参数,但没有效果。
由于首次同步发生的频率很低,象250ms和450ms这样的数据还是可以接受的,但22秒太离谱了。支持50万用户在线,需要考虑一个解决办法,现在有一个办法是建一个备份表,写备份表的请求放到一个队列里由一个单独线程处理,这样阻塞不会影响正常业务处理了。但这个线程的缓冲区要足够容纳30秒内发生的操作。

本来担心数据量大了mysql的缓冲区不够会出错或丢数据,但测试发现,一次查询最多读了50M数据,没有出现问题,经测算我们首次同步的数据不会超过10M。

在MySQL中启动了innoDB引擎后,可以实现真正的行级锁,select和update操作可以并发,这样在全表查询进行中间可以进行其它的select和update操作,但insert和delete不行。
性能也有很大提高,50万记录时100次操作300ms,全表查询11秒多


常用参数[options]详细说明:--auto-generate-sql,
-a自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-load-type=type测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--auto-generate-sql-add-auto-increment代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。--number-char-cols=N,
-xN自动生成的测试表中包含多少个字符类型的列,默认1--number-int-cols=N,-yN自动生成的测试表中包含多少个数字类型的列,默认1--number-of-queries=N总的测试查询次数(并发客户数×每客户查询次数)
--query=name,-q使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。--create-schema代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。--commint=N多少条DML后提交一次。
--compress,-C如果服务器和客户端支持都压缩,则压缩信息传递。--concurrency=N,-cN表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:
--concurrency=100,200,500。
--engine=engine_name,-eengine_name代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。--iterations=N,-iN测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
--only-print只打印测试语句而不实际执行。--detach=N执行N条语句后断开重连。--debug-info,-T打印内存和CPU的相关信息。说明:测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。各种测试参数实例(-p后面跟的是mysql的root密码):单线程测试。测试做了什么。
#mysqlslap-a-uroot-p123456多线程测试。使用–concurrency来模拟并发连接。#mysqlslap-a-c100-uroot-p123456迭代测试。用于需要多次执行测试得到平均值。#mysqlslap-a-i10-uroot-p123456#mysqlslap---auto-generate-sql-add-autoincrement-a-uroot-p123456#mysqlslap-a--auto-generate-sql-load-type=read-uroot-p123456#mysqlslap-a--auto-generate-secondary-indexes=3-uroot-p123456#mysqlslap-a--auto-generate-sql-write-number=1000-uroot-p123456#mysqlslap--create-schemaworld-q"selectcount(*)fromCity"-uroot-p123456#mysqlslap-a-einnodb-uroot-p123456#mysqlslap-a--number-of-queries=10-uroot-p123456测试同时不同的存储引擎的性能进行对比:#mysqlslap-a--concurrency=50,100--number-of-queries1000--iterations=5--engine=myisam,innodb--debug-info-uroot-p123456执行一次测试,分别50和100个并发,执行1000次总查询:#mysqlslap-a--concurrency=50,100--number-of-queries1000--debug-info-uroot-p12345650和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:#mysqlslap-a--concurrency=50,100--number-of-queries1000--iterations=5--debug-info-uroot-p123456

‘柒’ 如何实施Benchmark测试

这个主要是你的电脑是SATA2.O的接口,而说明书中所列的测试是最佳状态,是SATA3.0的电脑硬盘接口与SATA 3.0的硬盘相连接,在实际应用中SATA2.O的电脑接口与SATA3.0的硬盘,虽然是兼容的,但速度就会大大下降,这就是你测试的数据与说明书中的差异所在。

‘捌’ 如何实施Benchmark标准测试

关于Benchmark测试,最有名的就是TPC(Transaction Processing Performance Council,事务处理性能委员会)组织了.你可以在其官方站点获得更为详细的信息.TPC组织成立于1988年,由一些在计算机领域提供软硬件系统或者相关解决方案的原厂商组成,会员从成立之初的8家公司发展到目前的50余家,IBM、NCR、HP、Oracle、Microsoft等国际着名公司均是其会员。总部设在美国,并对全世界开放。

‘玖’ 几个常用的MySQL性能测试工具

1、mysqlslap
安装:简单,装了mysql就有了

作用:模拟并发测试数据库性能。

优点:简单,容易使用。

不足:不能指定生成的数据规模,测试过程不清楚针对十万级还是百万级数据做的测试,感觉不太适合做综合测试,比较适合针对既有数据库,对单个sql进行优化的测试。

使用方法:
可以使用mysqlslap --help来显示使用方法:

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

--concurrency代表并发数量,多个可以用逗号隔开,concurrency=10,50,100, 并发连接线程数分别是10、50、100个并发。

--engines代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。
--debug-info 代表要额外输出CPU以及内存的相关信息。
--number-int-cols :创建测试表的 int 型字段数量
--auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始
--number-char-cols 创建测试表的 char 型字段数量。
--create-schema 测试的schema,MySQL中schema也就是database。
--query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。

mysqlslap -umysql -p123 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10 --debug-info

或:

指定数据库和sql语句:

mysqlslap -h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select * from test;' --number-of-queries=10 --debug-info -umysql -p123

要是看到底做了什么可以加上:--only-print

Benchmark
Average number of seconds to run all queries: 25.225 seconds
Minimum number of seconds to run all queries: 25.225 seconds
Maximum number of seconds to run all queries: 25.225 seconds
Number of clients running queries: 100
Average number of queries per client: 0

以上表明100个客户端同时运行要25秒

2、sysbench
安装:
可以从http://sourceforge.net/projects/sysbench/ 下载
tar zxf sysbench-0.4.12.tar.gz
cd sysbench-0.4.12
./autogen.sh
./configure && make && make install
strip /usr/local/bin/sysbench

安装时候可能会报错,后来发现个好文 http://blog.csdn.net/icelemon1314/article/details/7004955 怕以后找不到,也贴过来吧

1.如果mysql不是默认路径安装,那么需要通过指定--with-mysql-includes和--with-mysql-libs参数来加载mysql安装路径
2.如果报错:
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
那么执行下根目录的:autogen.sh文件,然后重新configure && make && make install
3.如果报错:
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
那么执行下:
n -s /usr/local/mysql5.5/mysql/lib/libmysqlclient.so.18 /usr/lib64/
4.如果执行autogen.sh时,报如下错误:
./autogen.sh: line 3: aclocal: command not found
那么需要安装一个软件:
yum install automake
然后需要增加一个参数:查找: AC_PROG_LIBTOOL 将其注释,然后增加AC_PROG_RANLIB

作用:模拟并发,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL

优点:可以指定测试数据的规模,可以单独测试读、写的性能,也可以测试读写混合的性能。

不足:测试的时候,由于网络原因,测试的非常慢,但是最终给的结果却很好,并发支持很高,所以给我的感觉是并不太准确。当然也可能我没搞明白原理

使用方法:

准备数据
sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=400000 --mysql-db=dbtest2 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd prepare
执行测试
sysbench --num-threads=100 --max-requests=4000 --test=oltp --mysql-table-engine=innodb --oltp-table-size=400000 --mysql-db=dbtest1 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd run

sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 100

Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Maximum number of requests for OLTP test is limited to 4000
Threads started!
Done.

OLTP test statistics:
queries performed:
read: 56014
write: 20005
other: 8002
total: 84021
transactions: 4001 (259.14 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 76019 (4923.75 per sec.)
other operations: 8002 (518.29 per sec.)

Test execution summary:
total time: 15.4393s
total number of events: 4001
total time taken by event execution: 1504.7744
per-request statistics:
min: 33.45ms
avg: 376.10ms
max: 861.53ms
approx. 95 percentile: 505.65ms

Threads fairness:
events (avg/stddev): 40.0100/0.67
execution time (avg/stddev): 15.0477/0.22

3、tpcc-mysql
安装:
如果从原网站上下载源码比较麻烦,需要工具、注册、生成证书等。这里提供一个下载包http://blog.chinaunix.net/blog/downLoad/fileid/8532.html
export C_INCLUDE_PATH=/usr/include/mysql
export PATH=/usr/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/mysql
cd /tmp/tpcc/src
make
然后就会在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start

作用:测试mysql数据库的整体性能

优点:符合tpcc标准,有标准的方法,模拟真实的交易活动,结果比较可靠。

不足:不能单独测试读或者写的性能,对于一些以查询为主或者只写的应用,就没有这么大的意义了。

使用方法:

加载数据
创建库
mysql>create database tpcc10;
创建表:
shell>mysql tpcc10 < create_table.sql
添加外键:
shell>mysql tpcc10 < add_fkey_idx.sql

加载数据:
1、单进程加载:
shell>./tpcc_load 192.168.11.172 tpcc10 root pwd 300
|主机||数据库||用户||密码||warehouse|
2、并发加载:(推荐,但需要修改一下)
shell>./load.sh tpcc300 300
|数据库||warehouse|
3、测试
./tpcc_start -h192.168.11.172 -d tpcc -u root -p 'pwd' -w 10 -c 10 -r 10 -l 60 -i 10 -f /mnt/hgfs/mysql/tpcc100_2013522.txt
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '192.168.11.172'
option d with value 'tpcc'
option u with value 'root'
option p with value 'pwd'
option w with value '1'
option c with value '100'
option r with value '120'
option l with value '60'
option i with value '10'
option f with value '/mnt/hgfs/mysql/tpcc100_2013522.txt'
<Parameters>
[server]: 192.168.11.172
[port]: 3306
[DBname]: tpcc
[user]: root
[pass]: pwd
[warehouse]: 1
[connection]: 100
[rampup]: 120 (sec.)
[measure]: 60 (sec.)

RAMP-UP TIME.(120 sec.)

MEASURING START.

‘拾’ mysql中benchmark()函数是什么意思

用来测试MySQL函数性能的。
benchmark函数有两个参数,第一个是执行次数,第二个是要测试的函数或者表达式,
返回的结果始终是0,
你可以看到执行时间用于评估mysql的性能