04.04.07

Sybase IQ测试小记

Posted in Sybase at 4:53 pm by David.Guo

因为某个项目的原因,要对sybase的iq进行一些性能的测试.邀请到sybase公司的人来我们这一起进行测试,我要准备的,就是一个机器,然后一些测试数据.

ok,还是先说说我们的测试环境吧.

硬件环境  :HP DL 380 G4 3.0GHz CPU1颗,内存3GB(但是上面还挂了3个oracle的instance,大概占用了偶1.8GB的内存,可以给IQ试用的内存不足1.2GB),硬盘为本机上的SCSI硬盘两块.

软件环境:windows 2000 server ,Sybase Iq 12.6

测试的第一个事情,是创建数据库,写好脚本,创建了一个初始大小为4GB的数据库,用时在5分钟左右,就创建成功了.

然后是给数据库增加一个10GB的数据文件,居然只用了不到5秒.

然后是加载数据,第一个测试是加载用bcp out出来的文本文件.加载的表上已经建好了三个单列索引.还是看看下面加载log中的前100万记录的信息吧

I. 04/03 11:52:07. 0000000002 [20897]:  100000 Rows, 4 Seconds
I. 04/03 11:52:10. 0000000002 [20897]:  200000 Rows, 3 Seconds
I. 04/03 11:52:14. 0000000002 [20897]:  300000 Rows, 4 Seconds
I. 04/03 11:52:17. 0000000002 [20897]:  400000 Rows, 3 Seconds
I. 04/03 11:52:20. 0000000002 [20897]:  500000 Rows, 3 Seconds
I. 04/03 11:52:24. 0000000002 [20897]:  600000 Rows, 4 Seconds
I. 04/03 11:52:27. 0000000002 [20897]:  700000 Rows, 3 Seconds
I. 04/03 11:52:31. 0000000002 [20897]:  800000 Rows, 4 Seconds
I. 04/03 11:52:34. 0000000002 [20897]:  900000 Rows, 3 Seconds
I. 04/03 11:52:38. 0000000002 [20897]:  1000000 Rows, 4 Seconds

在数据加载完成后,会自动维护这个表上的三个索引,用了多久列,还是看log

I. 04/03 12:42:36. 0000000002 [20895]: Insert Pass 1 completed in 3033 seconds.
I. 04/03 12:44:20. 0000000002 [20895]: Insert Pass 2 completed in 104 seconds.
I. 04/03 12:44:20. 0000000002 [20834]:
 70146239 records were inserted into ‘DATA_DLSD’.

也就是说,我加载70146239条记录(文本文件大小为12517567kb),总共用了3033秒,维护索引,用了104秒.

数据进来以后,我们就是要作查询了.

首先作个count(*),在oracle上以及sybase的ase中,这个查询是比较慢的,要作全表,可是在iq上,应该是用了不同的处理机制,我笑称为所见即所得,立刻就有了结果.

然后是作带索引的查询,具体速度要比ase中要快最少5-10倍,和ase比较后,我们和oracle比,因为我们的应用大体相似,在oracle上,即便是走了组合索引,有些以前开发人员想写,但是不敢写的sql,也基本上能很短时间跑出来.

然后,作了一个比较变态的测试,对导入的这个表中的某个列的所有值作sum,7kw记录作sum,在ase和oracle上,是不可想像的操作.我们一堆人,掐着表,开始记数,110多秒,不到2分钟就sum出来了.

后面还作了一个1.4亿记录的表的加载,这个表的加载,就看看加载的最后的log吧.

I. 04/03 22:38:07. 0000000002 [20897]:  138000000 Rows, 36 Seconds
I. 04/03 22:38:43. 0000000002 [20897]:  139000000 Rows, 36 Seconds
I. 04/03 22:38:55. 0000000002 [20895]: Insert Pass 1 completed in 5158 seconds.
I. 04/03 22:42:06. 0000000002 [20895]: Insert Pass 2 completed in 191 seconds.
I. 04/03 22:42:06. 0000000002 [20834]:
 139343615 records were inserted into ‘DATA_SSLSD’.

据说,因为偶的IO很烂,所以这个速度还不算惊人的.据说如果是用光纤阵列(也就是我现场用的玩意),记载速度还可以提高3倍左右.

看过了加载,再看看压缩,IQ的一个很重要的特性,就是数据压缩.

偶的第一个表,文本文件12517567kb的,进去后,占用了数据库的空间为6753840kb,这是包含了三个索引的大小

另外一个表,文本文件20309704kb的,进去后,包含了5个索引,占用的数据库空间为8425600kb

上面的文本文件,都是直接用bcp抽取出来的,抽取的语句类似于:

bcp GRDATA.dbo.DATA_DLSD out D:sybase_backFriDATA_DLSD -Usa -Pjmgrdb -Ssybase -c -t “|”

由此看来,sybase iq的压缩存储确实还不错,作数据仓库还是非常适合的,比较适合作DW系统,但是切记,这玩意很快,能压缩存储,可是,凡是更新就锁表,也就是说,作OLTP,那是会死人的.

 

3 Comments »

  1. Flybean said,

    April 4, 2007 at 5:01 pm

    IQ本就是为OLAP设计的,SYBASE认为OLAP与OLTP的应用要分开,虽然ASE15也为OLAP应用做了一些优化,但在底层存贮上,IQ的优势太大了。

  2. yuxuan said,

    June 4, 2007 at 12:36 pm

    可能在数据仓库方面IQ确实有它的优势

  3. Eric said,

    January 10, 2008 at 11:19 am

    我在测试Oracle压缩,很多时候都能压缩到原来的40%左右。这要看你的数据分布情况。

Leave a Comment