Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91763231
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-05-09 13:37:28

   来源:赛迪网    作者:Blithe

这篇文章主要讲解了测试SQL Anywhere数据库性能的具体方法,详细内容请参考下文。

很多人都抱怨说不知道SQL Anywhere的性能如何。我使用了很久了,只是想告诉大家,可能大家不知道SQL Anywhere提供了几个工具,可以很方便地测试数据库的性能。本人感觉主要有以下几个目的:

1、SQL Anywhere的支持平台非常广泛,在版本9还支持Windows 95/98和486 芯片,当然,虽然SQL Anywhere版本10已经去掉了对Windows 95/98和486的支持(他们真的太老了),但是在各种硬件条件不同的平台上,尤其是硬件条件比较差的平台上测试一下性能也是完全必要的。

2、SQL Anywhere自带的测试工具包括查询、插入、并发性能测试。这样可以很好地针对POC的环境进行。因为有一些SQL Anywhere的应用是单机版的、有的是网络服务器版本的,所以各个侧重点不同。

3、在真正进行POC测试的时候,往往很难控制并发,除非使用比如loadrunner之类的工具,SQL Anywhere提供了控制并发,甚至强到控制多台计算机并发的情况。

在版本10中,提供了应用分析工具。将测试工具和应用分析工具合并使用,能达到更好的效果。

还有林林总总,欢迎大家查缺补漏。

以下,我将使用查询性能测试工具来演示一下。

首先,测试工具的位置。根据版本不同,测试工具的位置也不一样。在版本9(含)及之前的版本中,测试工具都在安装SQL Anywhere的目录下。

如果使用版本10,测试工具则在C:\Documents and Settings\All Users\Documents\SQL Anywhere 10\Samples\SQLAnywhere\目录下(缺省情况下),分别是PerformanceFetch、PerformanceInsert、PerformanceTraceTime和PerformanceTransaction。

大概用途应该通过名字能辨别了吧。

然后,我用PerformanceFetch。这个比较简单,也容易上手,关键是写下来不需要太多时间,因为老板还在逼活呢!

打开这个文件夹,有几个exe文件,都是C++写的。怎么使用呢?

1、FETCHTST是比较完整功能的测试工具,可以测试很多内容。

2、ODBCFET是专门用作测试使用ODBC环境的,功能较少。

3、OLEDBFET是专门用作测试使用OLEDB环境的,功能相对RETCHTST少。

FETCHTST也可以使用ODBC连接的。

我将使用FETCHTST。FETCHTST的用法是FETCHTST [options] [ [.. ]]。

跟在这个文件名后的是一些选项,再后面就是想要执行的SQL语句或者是存储过程。如果测试多个文件或多个SQL,工具将把各个语句的结果分别呈现,或者你也可以在最后要求做一个总结。

我们先来准备SQL文件。

呜,写了一个长的SQL,有很多JOIN,故意复杂一点,是针对SQL Anywhere的Demo数据库写的。将这个SQL语句保存,与工具同目录,名字为sql.txt。注意注意,一定要在后面回车加一个go。

所以,整个文件的内容是这样:

SELECT employees.surname, employees.givenname,

salesorders.orderdate,

SUM(products.unitprice *

salesorderitems.quantity) AS TotalSales,

SUM(salesorderitems.quantity) AS NumberOfSales

FROM (((salesorders JOIN employees ON

salesorders.salesrepresentative =

employees.employeeid ) JOIN salesorderitems ON

salesorders.id = salesorderitems.id) JOIN

products ON products.id =

salesorderitems.productid)

GROUP BY employees.surname,

employees.givenname,salesorders.orderdate;

go

然后,打开命令行工具,切换到工具所在目录,我用的版本10,就是C:\Documents and Settings\All Users\Documents\SQL Anywhere 10\Samples\SQLAnywhere\PerformanceFetch下。

执行以下命令:

FETCHTST -c "DSN=SQL Anywhere 10 Demo;UID=DBAWD=sql" -gc -g sql.txt

其中,-c选项是如何连接SQL Anywhere的。我用的自带的ODBC。-gc选项是打印每个语句使用的CPU情况,-g是生成总结,最后接着我想要测试的文件。

结果如下:

Statement 1 (line 1): SELECT employees.surname, employees.givenname...

PREPARE: 0.000 seconds

DESCRIBE: 0.000 seconds

OPEN: 0.008 seconds

FETCH first row: 0.022 seconds, 0 I/Os, 0 per second

FETCH remaining rows: 0.024 seconds

CLOSE: 0.000 seconds

DROP: 0.000 seconds

Total: 0.056 seconds, 0 I/Os, 0 per second, SELECT employees.surname,

Engine CPU usage: 0.040 seconds, usr: 0.040, sys: 0.000

Fetch rate: 632 rows in 0.046 seconds, 13616.909 per second

哎,费了好长时间编出来的SQL,执行的非常快,我还没有反映过来就执行完了。

不过需要提醒一点的是,我的SQL Anywhere Demo 10数据库是已经打开的,如果没有打开的话,估计OPEN那一项的时间会长。如果需要正式测试,请一定要注意以下几点:

1、最好备一下数据库,以免麻烦

2、一定要重启数据库服务器,让缓存清空,这样的结果才是数据库引擎的真实情况

3、仔细做好测试计划,把关心的内容想周全

4、测试中间一定做好记录,好多次就是因为我记录不全,所以来回来去折腾

5、测试完一定要清理!清理!!!曾经吃过大亏。

阅读(504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~