使用Sysbench测试PostgreSQL、Oracle、MySQL.pptx_第1页
使用Sysbench测试PostgreSQL、Oracle、MySQL.pptx_第2页
使用Sysbench测试PostgreSQL、Oracle、MySQL.pptx_第3页
使用Sysbench测试PostgreSQL、Oracle、MySQL.pptx_第4页
使用Sysbench测试PostgreSQL、Oracle、MySQL.pptx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用Sysbench测试PostgreSQL/Oracle/MySQL,唐成2015.09.19,为什么使用Sysbench?,2,为什么使用Sysbench?,简单性,实时显示,支持多种数据库,可扩展,03.简单性,只有一个sysbench可执行文件,简单易用,04.实时显示,可以象iostat等工具一样每秒显示一次结果,01.多种数据库,02.可扩展,可以用lua脚本灵活写不同的测试用例,少有的能同时支持PostgreSQL/MySQL/Oracle的测试工具,3,Sysbench的编译,4,在PostgreSQL下的编译,安装依赖包 yum install automake yum in

2、stall libtool.x86_64 编译命令,./autogen.sh ./configure -without-mysql -without-drizzle -with-pgsql -with-pgsql-includes=/usr/local/pgsql/include -with-pgsql-libs=/usr/local/pgsql/lib make PGSQL_LIBS=-L/usr/local/pgsql/lib -lpq PGSQL_CFLAGS=-I/usr/local/pgsql/include”,在Oracle下的编译,安装依赖包 yum install automa

3、ke yum install libtool.x86_64 编译命令,./autogen.sh ./configure -with-oracle -without-mysql -without-drizzle make ORA_LIBS=-L$ORACLE_HOME/lib -lclntsh ORA_CFLAGS=-I$ORACLE_HOME/rdbms/demo -I$ORACLE_HOME/rdbms/public,Sysbench的基本使用方法,7,运行Sysbench一般方法,Prepare命令 用于生成测试数据 命令行格式为sysbench prepare Run命令 运行测试的命令

4、 命令行格式为sysbench run Cleanup命令 清除测试数据 命令行格式为sysbench cleanup,Sysbench测试PG,准备测试数据的命令,sysbench -test=sysbench_lua/oltp_pg.lua -db-driver=pgsql -pgsql-host=127.0.0.1 -pgsql-port=5432 -pgsql-user=osdba -pgsql-password=sysbench -pgsql-db=testdb -oltp-tables-count=10 -oltp-table-size=10000000 prepare,Sysbe

5、nch测试PG,运行测试,sysbench -test=sysbench_lua/oltp_pg.lua -db-driver=pgsql -pgsql-host=127.0.0.1 -pgsql-port=5432 -pgsql-user=osdba -pgsql-password=sysbench -pgsql-db=testdb -oltp-tables-count=10 -oltp-table-size=10000000 -num-threads=32 -max-requests=100000000 -max-time=300 -report-interval=1 run,Sysben

6、ch测试Oracle,生成测试数据,./sysbench -test=tests/db/oltp.lua -db-driver=oracle -oltp-table-name=sysbench -oltp-table-size=10000000 -oltp-tables-count=10 -oracle-db=testdb -oracle-user=sysbench -oracle-password=sysbench -max-time=300 -max-requests=100000000 -num-threads=32 -report-interval=1 prepare,这个名称是$OR

7、ACLE_HOME/network/admin/tnsnames.ora中配置的服务名,不是实例名称,Sysbench测试Oracle,运行测试,./sysbench -test=tests/db/oltp.lua -db-driver=oracle -oltp-table-name=sysbench -oltp-table-size=10000000 -oltp-tables-count=10 -oracle-db=testdb -oracle-user=sysbench -oracle-password=sysbench -max-time=300 -max-requests=100000

8、000 -num-threads=32 -report-interval=1 run,我对Sysbench做的一点改进,13,改进说明,在githua上放了三个工程 放了原先的源代码 把lua脚本分离出来,这部分脚本针对PostgreSQL和Oracle有一些改进 放了在Redhat 6.X下编译好的二进制可执行文件 sysbench_pg:对应PostgreSQL的版本 sysbench_ora:对应Oracle的版本 sysbench_mysql:对应MySQL的版本,使用我的Sysbench,从githua上把我的sysbench拉下来 git clone git clone mkdir

9、 sysbench cd sysbench cp ./sysbench_bin/* . cp -r ./sysbench_lua/lua .,使用我的Sysbench,在githua上放了三个工程 git clone git clone mkdir sysbench cd sysbench cp ./sysbench_bin/bin/* . cp -r ./sysbench_lua/lua .,使用我的Sysbench,因为命令较长,写一个测试脚本test.sh:,#!/bin/bash ./sysbench_pg -test=lua/oltp.lua -db-driver=pgsql -pg

10、sql-host=127.0.0.1 -pgsql-port=5432 -pgsql-user=postgres -pgsql-password=sysbench -pgsql-db=postgres -oltp-tables-count=1 -oltp-table-size=100000 -num-threads=32 -max-requests=100000000 -max-time=300 -report-interval=1 $*,使用我的Sysbench,准备测试数据,postgrespg01 sysbench$ ./test.sh prepare sysbench 0.5: mul

11、ti-threaded system evaluation benchmark Creating table sbtest1. Inserting 100000 records into sbtest1,使用我的Sysbench,开始测试数据,postgrespg01 sysbench$ ./test.sh run sysbench 0.5: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 32 Report intermediate r

12、esults every 1 second(s) Random number generator seed is 0 and will be ignored Threads started! 1s threads: 32, tps: 179.45, reads/s: 2864.73, writes/s: 756.65, response time: 296.61ms (95%) 2s threads: 32, tps: 290.98, reads/s: 4080.77, writes/s: 1167.93, response time: 149.80ms (95%) 3s threads: 3

13、2, tps: 303.67, reads/s: 4248.45, writes/s: 1223.69, response time: 152.02ms (95%) 4s threads: 32, tps: 319.15, reads/s: 4481.10, writes/s: 1274.60, response time: 131.83ms (95%),使用我的Sysbench,测试结果,lua脚本的修改说明,脚本关系说明 oltp.lua脚本使用dofile包含了common.lua dofile(pathtest . common.lua) common.lua脚本主要负责生成测试数据

14、主要修改 common.lua:原来的脚本没有支持Oracle数据库 oltp.lua:原来的脚本PostgreSQL下不能正确运行测试,lua脚本的修改说明,update_index.lua=update_index_with_commit.lua 原先的脚本中每次操作没有commit语句,这样在测试的输出中tps值为零。,tps全是零,lua脚本的修改说明,直接使用sysbench的接口db_prepare函数时不能正确运行 问题原因: sysbench中代码有问题 解决办法: PREPARE testplan (text, int) AS UPDATE sysbench1 SET c=$

15、1 WHERE id=$2; EXECUTE testplan(xxxx,1);,lua脚本的其它改进,update_index.lua = update_index_ora.lua 原先的脚本测试Oracle时,Sysbench本身会占用大量的CPU,导致数据库本身的压力上不去。 原因是Sysbench中原先的drv_oracle.c代码中访问Oracle的部分不够优化,每次执行时都会调用rc = OCIHandleAlloc(ora_env,.)和OCIHandleFree(stmt, OCI_HTYPE_STMT);而多线程下这两个函数的调用会导致了强烈的锁竞争。 解决办法:使用绑定变量

16、,但使用绑定变量也有一些问题,问题描述见下一页,lua脚本的其它改进,Oracle中直接使用Sysbech提供的绑定变量函数db_prepare的问题 直接报错,不能正常运行 原因是代码有BUG,但可以绕过去。 解决方法是另加一个无用的字符串类型的绑定变量 具体代码见下一页:,lua脚本的其它改进,Sysbech测试Oracle绕过绑定变量bug的方法:,function thread_init(thread_id) local table_name set_vars() table_name = sbtest. (thread_id+1) stmt = db_prepare(UPDATE .

17、 table_name . SET k=k+1 WHERE id=to_number(:x) and a = :y) params = params1 = 444 params2 = a db_bind_param(stmt, params) end function event(thread_id) local table_name params1 = string.format(%d, sb_rand(1, oltp_table_size) params2 = a db_execute(stmt) db_query(COMMIT) end,增加了一个无用的绑定变量:y,其它一些问题的解决,在某此机器上sysb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论