小女巫 发表于 2015-1-16 22:38:07

MSSQL网页编程之磁盘I/O测试工具Bonnie++的专题

两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。


关于磁盘I/O测试工具Bonnie++的专题



作者简介:

张乐奕,一般利用的网名为kamus,也曾用过seraphim,如今任职于北京某年夜型软件公司,Oracle数据库DBA,次要卖力证券行业的中心买卖体系数据库办理及保护事情。

热切存眷Oracle手艺和相干操纵体系手艺,出没于各年夜数据库手艺论坛,今朝是中国最年夜的Oracle手艺论坛www.itpub.net的数据库办理版版主。

浏览更多手艺文章和漫笔能够登录我的团体blog,http://blog.cdsn.net/kamus



目次

媒介....1

安装....2

利用...4

评测...7

相干链接....8


媒介
最早是eygle在itpub上保举这个工具,原因是我关于Sun的软RAID功能提出的置疑,厥后eygle连续用这个工具作了一些盘阵IO的测试,包含EMC和T3的一些对照。

这些测试了局都宣布在eygle的团体站点上,见本文最初相干链接部分。



可是我却一向没有本人用Bonnie++测试过IO功能,比来一个客户要修正本人盘阵的RAID设置,原本就是利用D2的阵列,只能撑持软RAID的一本性能对照差的陈旧东东了,在我们的测试过程当中溘然又发明12块盘的盘阵设置的是RAID10,可是同时只要2块盘在作读写,也就是stripe设置只是2,这个成绩在一年多之前刚上体系的时分就是如许,竟然一向没有发明用了这么长工夫。

客户终极决意从头设置一下RAID的设置,起首将redo和datafile分隔,redo地点的盘用4块作RAID10,剩下8块再作RAID10,供数据文件利用,而且从头设置stripe,redo地点的lun设置为2,datafile地点的lun设置为4。

从实际上看,如许的修正应当会年夜幅度提到全部数据库的I/O效力,可是客户请求可以有一个实践的修正效果呈报,也就是必要作修正前和修正后的对照。

如许,因而决意利用bonnie++来作磁盘级的修正效果呈报。至于数据库级的修正效果天然有压力测试程序能够完成,此处不表。



既然决意利用,那末天然要揣摩一下该怎样用了。方才bonnie++已入手下手运转了,因而闲上去,写了这篇文章。


安装
实在明天年夜部分的工夫是耗在怎样让bonnie++运转起来下面了。



从bonnie++的主页高低载了最新的source,bonnie++1.03a.tgz。

gunzipbonnie++-1.03a.tgz

天生bonnie++-1.03a.tar文件,然后解包

tarxvfbonnie++-1.03a.tar

天生bonnie++-1.03a文件夹

cdbonnie++-1.03a

make

报错。

/usr/ucb/cc:languageoptionalsoftwarepackagenotinstalled



本来编译器就基本没装。

先先容一下主机情形,一台SunFirev480,两块73G内置硬盘,4个UltraSPARC-III+的CPU,8G内存,安装的是Solaris8,因为必要摹拟实在情况,以是安装的是对照老的02.2版本,并且没有打任何patch。



在Sun给的安装光盘中竟然没有找到CompanionCD,编译器应当是在这张盘上,没举措只好上彀本人找,还好,很快就找到一个很棒的站点blastwave,包含了Solaris8,9的sparc和x86版本的一切必要的package。



依据gcc包下载页面中的申明,发明必要下载上面四个package。

common-1.3.3-SunOS5.8-sparc-CSW.pkg.gz

gcc3rt-3.3.3,REV=2004.04.23-SunOS5.8-sparc-CSW.pkg.gz

libiconv-1.8,REV=2003.01.12-SunOS5.8-sparc-CSW.pkg.gz

gcc3-3.3.3,REV=2004.03.22-SunOS5.8-sparc-CSW.pkg.gz



后面三个包是最初gcc3包的条件前提,必需安装。全体下载终了,入手下手安装第一个包,也就是common谁人包,报错。

提醒操纵体系的110934补钉版本太低,必要晋级。



OK,再上彀找,间接用google查,关头字是“110934soalris”,一般后面几个link就会指向SunSolve站点的下载页面,patch一般不年夜,很快就下载完了。



入手下手打补钉,patchadd110934-21。

体系运转半天,报错。

说要安装这个补钉就必要先安装110380-04的补钉。我倒。

再上彀找,下载完110380-04,先patchadd110380-04,统统一般。

再从头patchadd110934-21,统统一般。



打完补钉今后,从头安装common包,OK,统统一般。

pkgadd-dcommon-1.3.3-SunOS5.8-sparc-CSW.pkg.gz



然后顺次安装别的的包,统统一般。



这个包将gcc安装到/opt/csw/gcc3目次下。

申明文件指出安装完gcc将创立/opt/csw/bin下的gcc实行程序,以是请求将这个路径到场用户的PATH变量中,可是实践上安装完gcc3.3的版本今后,并没有在下面的路径中天生任何文件。

厥后我再安装gcc2.95版本的时分发明这个版本的安装才是将gcc天生到/opt/csw/bin中。

以是假如我们在Solaris8中即安装了gcc2.95又安装了gcc3.3,那末要注重这两个版本的gcc文件在分歧的路径下,实在这也是应当的,不然新版本会掩盖旧版本,常常是良多人不肯意的。



回到下面,安装完gcc3今后,再次运转make,仍旧报错。

/usr/ucb/cc:languageoptionalsoftwarepackagenotinstalled



反省PATH情况变量,已将/opt/csw/gcc3/bin目次到场了。

想了一下,感到应当是体系还在利用本来的/usr/ucb/cc。因而将cc链接到新安装的gcc上,如许不管甚么时分挪用cc实在都是间接利用gcc了。

whereiscc

cd/usr/ucb

mvcccc.org

ln-s/opt/csw/gcc3/bin/gcc/usr/ucb/cc



备注:假如要安装gcc2的包,那末必要下载上面两个package。

gcc2rt-2.95.3,REV=2003.03.01-SunOS5.8-sparc-CSW.pkg.gz

gcc2-2.95.3-SunOS5.8-sparc-CSW.pkg.gz

安装终了今后,一样是将cc链接到这个版本的gcc上。

whereiscc

cd/usr/ucb

mvcccc.org

ln-s/opt/csw/bin/gcc/usr/ucb/cc



修正终了今后编译乐成。



运转bonnie++,报错。

libstdc++.so.5:cannotopensharedobjectfile:Nosuchfileordirectory.



持续查材料,发明bonnie++寻觅的lib路径是情况变量LD_LIBRARY_PATH指定的路径,可是这个路径下并没有libstdc++.so.5文件,因而手工将libstdc++.so.5文件从gcc3的安装路径中ln到/usr/lib上面。

#ln-s/opt/csw/gcc3/lib/libstdc++.so.5/usr/lib/libstdc++.so.5

再次运转,仍旧报错。

libgcc_s.so.1:cannotopensharedobjectfile:Nosuchfileordirectory.

此次就得心应手了,间接再作一次link。

#ln-s/opt/csw/gcc3/lib/libgcc_s.so.1/usr/lib/libgcc_s.so.1



终究,bonnie++能够一般运转了。



我们能够不必要本人编译,在eygle的站点上有Solaris8下载编译好的bonnie++。间接可使用,固然假如运转报libstdc++.so.5找不到的成绩,还必要依照下面的办法办理。
利用.
接上去持续先容bonnie++(Version:1.03)的利用办法和了局的寄义。

usage:bonnie++[-dscratch-dir][-ssize(Mb)[:chunk-size(b)]]

[-nnumber-to-stat[:max-size[:min-size][:num-directories]]]

[-mmachine-name]

[-rram-size-in-Mb]

[-xnumber-of-tests][-uuid-to-use:gid-to-use][-ggid-to-use]

[-q][-f][-b][-pprocesses|-y]



起首申明一下命令中经常使用的参数。

-d天生测试文件的路径

-s天生测试文件的巨细,以M为单元(假如不利用-r参数,则请求文件巨细最少是体系物理内存的2倍)

-m呆板名,实践上我们能够以为是本次测试的计划名,能够任意界说。默许是本机的hostname。

-r内存巨细,指定内存巨细,如许能够经由过程-s参数创立r*2巨细的文件,一般用于延长测试工夫,可是必要注重如许因为内存的cache大概招致测试了局的禁绝确

-x测试的次数

-u测试文件的属主和组,默许是实行bonnie++确当前用户和以后组

-g测试文件的组,默许是实行bonnie++确当前用组

-b在每次写文件时挪用fsync()函数,关于测试邮件服务器大概数据库服务器这类一般必要同步操纵的情形对照合适,而不利用该参数则对照合适测试copy文件大概编译等操纵的效力。



一般我们能够复杂地运转以下命令举行磁盘功能测试:

bonnie++-d/global/oradata–msun3510

如许将会在指定的目次下(一般我们会指定一个盘阵上卷的挂载点),天生相称于主机物理内存两倍的文件,假如总量年夜于1G,则天生多个巨细为1G的文件。假定主机内存为4G,那末在测试中就会天生8个1G的文件,到测试停止,这些文件会被主动删除。



假如我们的主机内存是4G,可是我们想延长测试的工夫,好比说只写2G的文件,就应当实行上面的命令:

bonnie++-d/global/oradata–msun3510–s2048–r1024



bonnie++的在测试的时分一般会占用大批的IO和CPU,以是请不要在临盆情况的营业岑岭期举行测试。



上面看一个测试了局,经由过程这个了局我们注释一下究竟bonnie++在测试过程当中都作了甚么,而每个输入的了局又暗示了甚么。

这个测试了局是在一台SunFireV880+D2阵列长进行的,主机设置是2个UltraSparc-III+900MHz的CPU,4G内存,而D2阵列是满配的12块36GSCSI磁盘,分别了两个LUN,我们的测试目标地/global/oradata创建在个中的一个LUN上,利用了8块磁盘,用VeritasVolumManager作了RAID10,stripe(也就是ncol)设置为4。

bonnie++-d/global/oradata-s8192-md2new-uoracle

Usinguid:1001,gid:101.

Writingwithputc()...done

Writingintelligently...done

Rewriting...done

Readingwithgetc()...done

Readingintelligently...done

startem...done...done...done...

Createfilesinsequentialorder...done.

Statfilesinsequentialorder...done.

Deletefilesinsequentialorder...done.

Createfilesinrandomorder...done.

Statfilesinrandomorder...done.

Deletefilesinrandomorder...done.

Version1.03------SequentialOutput--------SequentialInput---Random-

-PerChr---Block---Rewrite--PerChr---Block----Seeks--

MachineSizeK/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP

d2new8G182756232832262542355274449410684260549.97

------SequentialCreate--------------RandomCreate--------

-Create----Read----Delete---Create----Read----Delete--

files/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP

16172315++++++++505940482137++++++++6535



顺次解读一下,从Writingwithputc()入手下手到Deletefilesinrandomorder…停止,这是bonnie++作的12项测试,这12项测试顺次对应12项了局,而这12项了局又被分为了5年夜类,分离是SequentialOutput(写测试),SequentialInput(读测试),RandomSeeks(读写测试),SequentialCreate(按次读写文件测试)和RandomCreate(随便读写文件测试)。

那末测试步骤和测试了局顺次对应的按次就是:

Writingwithputc()->SequentialOutput的PerChr

Writingintelligently->SequentialOutput的Block

Rewriting->SequentialOutput的Rewrite

Readingwithgetc()->SequentialInput的PerChr

Readingintelligently->SequentialInput的Block

startem->RandomSeeks

Createfilesinsequentialorder->SequentialCreate的Create

Statfilesinsequentialorder->SequentialCreate的Read

Deletefilesinsequentialorder->SequentialCreate的Delete

Createfilesinrandomorder->RandomCreate的Create

Statfilesinrandomorder->RandomCreate的Read

Deletefilesinrandomorder->RandomCreate的Delete

每一个了局中又包含了2项数值,一个是K字节数大概文件数,另外一个是%CP,就是实行这项测试时CPU的均匀占用率。



关于输入了局的评价,我们以为在相称CPU的占用率情形下,存取字节数越高暗示该存储设备的吞吐量越年夜,天然功能也就越好。

值得注重的是,在测试RAID的时分,关于多CPU的体系,bonnie++并没有发扬CPU的最年夜潜力,也就是说bonnie++收回的I/O哀求一般不敷到达CPU和磁盘的最年夜压力,这时候候显现的吞吐量就不是这个存储设备可以到达的最年夜值。我们能够在测试的同时经由过程iostat,mpstat,sar等命令监控体系情况,假如没有分明的I/O守候,一般暗示测试软件的压力不敷。在bonnie++的主页上也暗示关于多CPU多历程的撑持将放到2.0版本中往完成。



分明了测试步骤和测试了局以后,我们再来进一步看看每一个测试了局都是甚么寄义。



SequentialOutput

1.PerChar

就是Per-Character的寄义。利用putc()函数举行轮回写进,每次写进的字节很小,基础上能够放进恣意一种I-Cache中,这类情形下的CPU损耗在处置putc()代码和分派磁盘文件空间上。

2.Block

利用write(2)函数创立文件。这类情形下的CPU损耗只是在分派磁盘文件空间上。

3.Rewrite

利用read(2)函数读取文件,然后修正再用write(2)函数写回。因为文件的空间已分派好,以是这类体例能够很无效地测试文件体系缓存和数据传输的速率。



SequentialInput

1.PerChar

利用getc()函数轮回读取文件内容

2.Block

利用read(2)函数轮回读取文件内容,无效测试磁盘读取的效力。



RandomSeek

默许3个历程作8000次的测试。用read(2)函数读取文件的block,同时有10%的操纵是用write(2)函数将block修正今后写回文件中。在这个测试中,假如内存容量年夜于创立的文件巨细,那末将会呈现对照高的数值,而这个数值大概其实不能正确反应磁盘自己的I/O效力。



SequentialCreate和RadomCreate

这两年夜类测试均是用创立,读取,删除大批的小文件来测试磁盘效力。文件名用7位数字和恣意个数(0-12)的恣意英笔墨母来构成。在Sequential部分,字母在数字以后,而Random部分则是字母在数字之前。

创立文件的最小值和最年夜值等参数能够在bonnie++命令行顶用-n参数来把持。


评测.
我们经由过程bonnie++来测试各类磁盘设置,大概测试各类RAID设置下的磁盘效力,能够有助于我们关于各个产物大概各个计划的磁盘吞吐效力有个大致熟悉。

在测试了局的最初一行是用逗号离隔的一列数字,第一个地位是我们在运转bonnie++时用-m参数指定的呆板名,第二个地位是测试时天生的文件巨细,前面顺次是各种测试的了局。我们将多个测试的最初一行粘贴到Excel中,然后用图表功效天生柱状图,就能够对多项测试有一个极其直不雅的评测对照。

上面列出了几种评测的了局,今后也会连续增加更多的评测,同时接待人人将本人的评测了局mail给我,我会到场到这篇文章中。我的邮件地点是kamus@itpub.net。



SunFirev4804*(UltraSparc-III+1050MHz)8GRAM当地光纤硬盘

>bonnie++-d.-s16384-mreport-uoracle:dba

Version1.03------SequentialOutput--------SequentialInput---Random-

-PerChr---Block---Rewrite--PerChr---Block----Seeks--

MachineSizeK/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP

report16G18703522881217108001233700986817232260.12

------SequentialCreate--------------RandomCreate--------

-Create----Read----Delete---Create----Read----Delete--

files/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP

16990++++++++16611010++++++++2051

report,16G,18703,52,28812,17,10800,12,33700,98,68172,32,260.1,2,16,99,0,+++++,+++,166,1,101,0,+++++,+++,205,1



SunFirev8802*(UltraSparc-III+900MHz)4GRAMD2阵列(36G*12,RAID10,2stripe)

>bonnie++-d/global/oradata-s8192-md2org-uoracle

Version1.03------SequentialOutput--------SequentialInput---Random-

-PerChr---Block---Rewrite--PerChr---Block----Seeks--

MachineSizeK/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP

d2org8G15681552630223138773126420918821549462.65

------SequentialCreate--------------RandomCreate--------

-Create----Read----Delete---Create----Read----Delete--

files/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP

16124510++++++++354127283721++++++++3853

d2org,8G,15681,55,26302,23,13877,31,26420,91,88215,49,462.6,5,16,1245,10,+++++,+++,3541,27,2837,21,+++++,+++,385,3



SunFirev8802*(UltraSparc-III+900MHz)4GRAMD2阵列(36G*8,RAID10,4stripe)

>bonnie++-d/global/oradata-s8192-md2new-uoracle

Version1.03------SequentialOutput--------SequentialInput---Random-

-PerChr---Block---Rewrite--PerChr---Block----Seeks--

MachineSizeK/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP

d2new8G182756232832262542355274449410684260549.97

------SequentialCreate--------------RandomCreate--------

-Create----Read----Delete---Create----Read----Delete--

files/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP

16172315++++++++505940482137++++++++6535

d2new,8G,18275,62,32832,26,25423,55,27444,94,106842,60,549.9,7,16,1723,15,+++++,+++,5059,40,4821,37,+++++,+++,653,5
相干链接
bonnie++主页

http://www.coker.com.au/bonnie++/



对各类操纵体系下磁盘I/O测试软件的专题站点

http://www.acnc.com/04_02_01.html



该站中另有各类范例RAID的观点形貌,优弱点,包含图示,值得一看

http://www.acnc.com/04_00.html



关于磁盘I/O测试的专题会商

http://www.itpub.net/266416.html



eygle团体站点上有关bonnie++的文章

http://www.eygle.com/unix/Use.Bonnie++.To.Test.IO.speed.htm
这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。如果你想要检查一张表,你通常应该没有选项地运行myisamchk或用-s或--silent选项的任何一个。

透明 发表于 2015-1-19 19:49:53

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

第二个灵魂 发表于 2015-1-28 10:10:29

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

老尸 发表于 2015-2-13 13:15:50

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

不帅 发表于 2015-3-3 21:49:54

换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的

兰色精灵 发表于 2015-3-11 14:03:54

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

小妖女 发表于 2015-3-18 22:14:17

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

灵魂腐蚀 发表于 2015-3-26 19:42:45

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
页: [1]
查看完整版本: MSSQL网页编程之磁盘I/O测试东西Bonnie++的专题