您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 使用Sysbench测试PostgreSQLOracleMySQL
使用Sysbench测试PostgreSQL/Oracle/MySQL唐成@2015.09.19为什么使用Sysbench?2为什么使用Sysbench?简单性实时显示支持多种数据库可扩展03.简单性只有一个sysbench可执行文件,简单易用04.实时显示可以象iostat等工具一样每秒显示一次结果01.多种数据库02.可扩展可以用lua脚本灵活写不同的测试用例少有的能同时支持PostgreSQL/MySQL/Oracle的测试工具3Sysbench的编译4在PostgreSQL下的编译•安装依赖包–yuminstallautomake–yuminstalllibtool.x86_64•编译命令./autogen.sh./configure--without-mysql\--without-drizzle\--with-pgsql\--with-pgsql-includes=/usr/local/pgsql/include\--with-pgsql-libs=/usr/local/pgsql/libmakePGSQL_LIBS=-L/usr/local/pgsql/lib-lpqPGSQL_CFLAGS=-I/usr/local/pgsql/include”在Oracle下的编译•安装依赖包–yuminstallautomake–yuminstalllibtool.x86_64•编译命令./autogen.sh./configure--with-oracle--without-mysql--without-drizzlemakeORA_LIBS=-L$ORACLE_HOME/lib-lclntshORA_CFLAGS=-I$ORACLE_HOME/rdbms/demo-I$ORACLE_HOME/rdbms/publicSysbench的基本使用方法7运行Sysbench一般方法•Prepare命令–用于生成测试数据–命令行格式为sysbenchoptionsprepare•Run命令–运行测试的命令–命令行格式为sysbenchoptionsrun•Cleanup命令–清除测试数据–命令行格式为sysbenchoptionscleanup指定测试所用的lua脚本的路径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指定如何连接到PostgreSQL数据库指定建多少张测试表。本例子中建10张测试表。每张测试表的结构及数据量完全相同。指定每表测试表中生成多少行测试数据,本例子生成1千万行测试数据。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\--num-threads=32\--max-requests=100000000\--max-time=300\--report-interval=1\run指定启动多少线程进行并发测试,线程数越多,压力越大指定最多发送多少个请求后退出指定运行多久退出,本例中运行300秒退出。多长时间输出一次测试结果,本用例中1秒打印一次测试结果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=100000000\--num-threads=32\--report-interval=1\prepare这个名称是$ORACLE_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=100000000\--num-threads=32\--report-interval=1\run我对Sysbench做的一点改进13改进说明•在githua上放了三个工程–放了原先的源代码–把lua脚本分离出来,这部分脚本针对PostgreSQL和Oracle有一些改进–放了在Redhat6.X下编译好的二进制可执行文件•sysbench_pg:对应PostgreSQL的版本•sysbench_ora:对应Oracle的版本•sysbench_mysql:对应MySQL的版本使用我的Sysbench•从githua上把我的sysbench拉下来–gitclone–gitclone–mkdirsysbench–cdsysbench–cp../sysbench_bin/*.–cp-r../sysbench_lua/lua.使用我的Sysbench•在githua上放了三个工程–gitclone–gitclone–mkdirsysbench–cdsysbench–cp../sysbench_bin/bin/*.–cp-r../sysbench_lua/lua.使用我的Sysbench•因为命令较长,写一个测试脚本test.sh:#!/bin/bash./sysbench_pg--test=lua/oltp.lua\--db-driver=pgsql\--pgsql-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•准备测试数据[postgres@pg01sysbench]$./test.shpreparesysbench0.5:multi-threadedsystemevaluationbenchmarkCreatingtable'sbtest1'...Inserting100000recordsinto'sbtest1’使用我的Sysbench•开始测试数据[postgres@pg01sysbench]$./test.shrunsysbench0.5:multi-threadedsystemevaluationbenchmarkRunningthetestwithfollowingoptions:Numberofthreads:32Reportintermediateresultsevery1second(s)Randomnumbergeneratorseedis0andwillbeignoredThreadsstarted![1s]threads:32,tps:179.45,reads/s:2864.73,writes/s:756.65,responsetime:296.61ms(95%)[2s]threads:32,tps:290.98,reads/s:4080.77,writes/s:1167.93,responsetime:149.80ms(95%)[3s]threads:32,tps:303.67,reads/s:4248.45,writes/s:1223.69,responsetime:152.02ms(95%)[4s]threads:32,tps:319.15,reads/s:4481.10,writes/s:1274.60,responsetime:131.83ms(95%)使用我的Sysbench•测试结果lua脚本的修改说明•脚本关系说明–oltp.lua脚本使用dofile包含了common.lua•dofile(pathtest..common.lua)–common.lua脚本主要负责生成测试数据•主要修改–common.lua:原来的脚本没有支持Oracle数据库–oltp.lua:原来的脚本PostgreSQL下不能正确运行测试lua脚本的修改说明•update_index.lua=update_index_with_commit.lua–原先的脚本中每次操作没有commit语句,这样在测试的输出中tps值为零。tps全是零lua脚本的修改说明•直接使用sysbench的接口db_prepare函数时不能正确运行–问题原因:•sysbench中代码有问题–解决办法:•PREPAREtestplan(text,int)ASUPDATEsysbench1SETc=$1WHEREid=$2;•EXECUTEtestplan(‘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);而多线程下这两个函数的调用会导致了强烈的锁竞争。–解决办法:使用绑定变量,但使用绑定变量也有一些问题,问题描述见下一页lua脚本的其它改进•Oracle中直接使用Sysbech提供的绑定变量函数db_prepare的问题–直接报错,不能正常运行–原因是代码有BUG,但可以绕过去。–解决方法是另加一个无用的字符串类型的绑定变量–具体代码见下一页:lua脚本的其
本文标题:使用Sysbench测试PostgreSQLOracleMySQL
链接地址:https://www.777doc.com/doc-2687133 .html