Interbase 千万级数据量性能测试报告 (100分)

  • 主题发起人 主题发起人 redchild
  • 开始时间 开始时间
R

redchild

Unregistered / Unconfirmed
GUEST, unregistred user!
Interbase 千万级数据量性能测试报告


测试环境:AMD DURON 1G CPU
WD 5400RPM 40G
SIS735
384MB SDRAM
Windows 2000 Professional on NTFS
Interbase 6.5 local(即联接字用的是D:/TRY.GDB格式)
Win9x环境下请不要试,可能造成系统崩溃!

新建数据文件 TRY.GDB
page size 4k
dialect 3
sweep interval 20000
forced writed disabled
建立测试表
CREATE TABLE T1 (
ID INTEGER NOT NULL UNIQUE
)

建立存储过程
CREATE PROCEDURE PROD1 (
MAXID INTEGER
) RETURNS (
AAA INTEGER
) AS
begin
aaa=1;
while (aaa<maxid) do
begin
insert into t1(id) values(:aaa);
aaa=aaa+1;
end
suspend;
end

插入一千万条记录
SELECT * FROM PROD1(10000001)

用时约12分钟(没有准确测试)
TRY.GDB 大小: 568MB

select max(id) from t1

用时10多分钟
查看系统信息中可用物理内存为6xxxKB(注意:在任务管理器中可查看物理内存的可用数)

重启Interbase 后
查看系统信息中可用物理内存为30xxxxKB

select * from t1 where id=9999999
感觉不到迁时

删除t1的主索引
select * from t1 where id=9999999
用时与前面的select max(id) from t1基本相同

由此可见max()函数本身存在缺陷,可能没有使用索引并可能存在内存泄露,大数据量环境下对系统性能造成致命伤害,

不知哪位高手有可解决的方案(指用Interbase)
 
联接字用远程方式,会提高系统效率。
 
KAO ~~

索引都不建。。能快吗!![:(]
 
对呀,建个主索引吧
 
支持使用interbase!!!!!!
 
现在用IB的不多了吧
 
关注FB~免费的InterBase。。

性能其实不错的。。。比MySQL好。。。
 
TO CJF
你不认识UNIQUE吗?这就是非重复结构,等效于PRIMARY KEY OR CREATE UNIQUE INDEX的
建库方式,请在试过之后再发言,我提此问题的目的是要初用INTERBASE的朋友小心点用
MAX,然后大家找出解决的方法!
另外,三代坦克订了邮件,干吗不来说一句呢,Redchild正在找法子呢
另外IB好像不能把两个索引联合起来用,比如,我在ID和GTID上建了各建了一个索引但
我ORDER BY GTID,ID时没起效果,一定要我建成CREATE INDEX GOODSIDX ON TABLE1(GTID,ID)
的样子才对ORDER BY GTID,id有效,不知其它数据库服务器有没有多索引同时用的功能
 
缓存太小了,怎么也不会快的。把Page size设大一点试试看
 
不知道有没有关于FireBird的评测报告?
最近想使用InterBase, FireBird是基于IB6 Open source的,
就是不知道性能等如何?
 
TO RedChild~

呵呵~我的确没有注意看这个字段的地方,SORRY先~

不过我这边没有发现内存泄露问题。。。
 
TO CJF:请注意上面的每一细节,首先是"一千万",
"TRY.GDB 大小: 568MB

select max(id) from t1

用时10多分钟
查看系统信息中可用物理内存为6xxxKB(注意:在[red]任务管理器中可查看'物理内存(K)'的'可用数'[/red]"
 
李维的分布式多层系统里第八章里很详细地介绍如何提高InterBase数据库的性能的
 
1千万 数据 的应用就别指望IB了

我试验的结果是:
硬件:Piii 667/512M/5400rpm DMA33/
OS : Win2K Server
DB : IB6.01 /Pagesize 8192 其他缺省 IB设置:ClientMapsize 8192 pages
Database Cache Size 16192 pages
系统可用物理内存,170M左右。
使用Ibconsole 1.0.0.339

procedure 改为 no return sand suspend
EXECUTE PROCEDURE , 27分钟
系统可用物理内存,170M左右。
selecct Max(ID) 3分钟
系统可用物理内存,50M左右。
disconnect db
系统可用物理内存,170M左右。

关闭数据库 IBconsole,重新进入IBconsole,再执行,select max()....
先plan 一下,时间是 1分多。

完毕。

 
To:三代坦克
1. 我认为,MAX在如果用到了索引的话,反应时间应是非常快的,在一秒左右.
2. 我认为,IB在其它情况下,一千万是可以承受的,不过,MAX可能不行,比如
select * from t1 where id=9999999就感觉不到延时
并且我有五百万记录的应用,主表明细表的方式,在CII366,128M的LOCATE上都流畅.
我想要的是MAX为何如此慢,这里面一定有问题,不知IB开发组有没有意识到,至于COUNT(*)
那就是真没办法,只有遍历才行,但MAX不一定要遍历呀!
 
http://community.borland.com/article/0,1410,25549,00.html

这里说得很清楚 ,min用asc 索引,max用desc索引,
如果用max的话,建立desc的索引就行了。

我没有试验,不过我想borland 社区的文章不会骗人吧?

 
TO:三代坦克
谢谢了!我去试试!祝国庆愉快!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部