• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 数据库 >> Firebird >> 详细内容
 

推荐文章

 
 

热点文章

  • Firebird v2.1.0.17798-0 - 开源数据库
  • firebird database (快速入門)
  • Windows平台上Firebird数据库的安装
  • FireBird数据库安装以及其可视化管理软件(图形管理器)
  • 在ubuntu linux上安装设置firebird
  • Firebird 数据库安装
  • InterBase/FireBird和Microsoft SQL Server之技术比较
  • 用IBExpert优化Firebird/Interbase技巧集1
  • firebird数据库介绍
  • Firebird/InterBase内置函数使用说明
  • Firebird常用SQL
  • firebird数据库的修复
 
 

相关文章

  • 用了下firebird,发现真的不错哦
  • MSSQL数据库转到Firebird数据库的问题
  • 一个关于firebird数据库的sql查询方法
  • 用IBExpert进行Firebird数据库的跨库操作
  • firebird如何提取从n开始的m条记录(数据分页)
  • Firebird/Interbse SQL语言疑难解答
  • Firebird的备份工具(nbackup)介绍
  • firebird数据库的修复
  • Firebird常用SQL
  • Firebird/InterBase内置函数使用说明
  • firebird数据库介绍
  • 用IBExpert优化Firebird/Interbase技巧集1
 
 

百度搜索

 
 

Firebird数据库文件大小增长很快的原因

  • 阅览次数:
  • 文章来源: CodePub整理
  • 原文作者:
  • 整理日期: 2008-05-03
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

jingzu:
FB数据库文件大小增长很快,经过试验,是由于插入、删除操作引起,而我的数据库每天需要几个笔数据插入或删除,这样半年数据库文件就有500多M大了,速度变得很慢,而备份恢复后变30M左右,为什么会这样?有什么办法不让增长这么快。
我做个这样的试验,不断的插入1000条记录,然后全部删除空,这样不断的循环,数据库大小很快增长,按道理插入了再删空,数据库应该不会增长的,怎么还是会增长?是不是FB有问题?如何解决些问题?

channon:
你的问题我也碰到,我理解是删除操作不会减少数据空间,新的数据也不会覆盖被删除的数据空间。
我是这样解决的:
使用一个字段表示该记录是否删除。当insert数据时,先看有没有标记为删除的记录,有的话在该记录位置update,并标注为未删除。没有可用的已删除记录时才真的insert记录。
这样虽然在性能上会有一点损失,但数据文件到一定程度后就很少会增长了。

softfan:
其实不光是FB,大多少数据库都是这样的,如果删除记录后立即整理文件,那样就根本无法使用数据库了.比如说Access,是增长很快的.但文件的大小实际上不会影响数据库的效率,只要建立好索引就行,楼主的问题估计是在查询语句中引用了没有建索引的字段.如果没有建立索引,只要达到一定的数量级,即便是整理的很勤快,也不会解决问题.
channon的做法很有意思,也是值得借鉴的一种办法了.
为什么库文件的增长不会影响效率呢?我想是这样的,建立索引后,第一条记录和第100000条记录的查询速度是一样的,索引记录了记录行所在文件的偏移位置,因此,在查询时,先从索引中检索满足条件的记录,返回一个记录偏移地址列表,真正的记录再从这个列表中读取.这也许是数据库中都有一个页面大小的设置的缘故吧,偏移地址应该就是每一个页面的首地址,如果页面大小设置的很大,那样数据库增长的就快,如果小点,那么就会慢点,这个根据实际需求来定.比如整个数据库中所有表的记录最大尺寸不会超过1024个字节,那可以将page大小设置为1024,如果里面保存二进制文件或则大的文本,可以设置大点的page.假如有word这样的文件或者图片要保存,建议单独分离一个数据库用来保存文件,这样可以区别一下,业务数据库增长就不会太快.
我的一个产品里面要保存图片,几天就会达到一个G,如果不分开,我想业务数据库就危险了,一旦出现问题,处理上就会麻烦.而且分开有一个好处,即便文件库损害或者太大想整理,也只要替换一个空的文件库就可以了,不影响业务数据的正常运行,那个大的数据库也可以闲置,或者建立文件库列表,以便重新检索这个数据库.

lmf:
Firebird是多代结构,这样大量插入然后删除不好。不过因为你半年才500M还没有关系,不过变慢是肯定的,如果你每天晚上进行整理,速度就不会慢下来。

jingzu:
谢谢您提供这个方法,由于插入数据一天也就1000多条,且是分开时间的,所以我不用考虑性能,这个方法很好。
以前我记得看过一种数据库,可以先插入到原来删除的位置,现在怎么找也不到,我也以为删除数据时,新插入的会先插入到原来删除的空间。看来FB数据库不是这样的,删除的数据会占用空间,就象回收站一样,这样看来删除的数据有恢复的可能,是吗?

lmf:
如果刚被删除,立即交给人去恢复的话,还是有人能恢复的。俄罗斯人还专门编写了这方面的工具。删除数据时间长了的话,也不容易的。

jingzu:
我按您的方法做了,加入新数据奇慢无比,原来加入1000条数据只要5秒左右,现在要几分钟,您是怎么弄的?

lmf:
一定得加索引,否则数据操作会越来越慢

raintip:
我的数据库超过1G了(一年四个月),性能没什么变化,lmf说的对,主要是索引问题。

channon:
索引很重要!
其次用些小技巧,以较少查询次数。其实时间主要浪费在查询上了。
首先要有一个主键。
比如要插入5条记录,如果每条记录都查询一遍已删除记录的主键,就要查询5次。我是在第一次插入时把所有已删除记录的主键取出来放在stringlist里,以后要插入记录时就看stringlist有没有内容,有的话就用,没有的话就要生成新的主键编号。
不知道这样说明白了没有。

ccccu:
即然原来设计就是如此,就换种思路:
借用备份的方法:
定期或不定期的根据现有数据库的结构生成空表,然后将原数据库的数据导入新数据库中。采用这种方法要注意解决自增字段值的问题。

jingzu:
我也用了这种主键取出来放在stringlist方法,加入数据现在不慢了,但是:
我用循环每次加入1000条记录,数据库文件还是会增加,循环100次后,数据库文件很快到15M以上(当然不用这个方法增长只是慢点),按处理应该不会增加那么快的,问题还出在那里?
特别是备份恢复的时候,变得特别慢了。15M文件备份恢复为3M,用10分钟,奇慢啊。
我的数据结构只有一个主键,一个索引(删除标记作为索引)。

channon:
只要增加的记录数比删除的记录数大,那么数据文件就肯定会增长的。

jingzu:
1000条记录循环加入删除,刚好相等的。
数据库文件大小还是会增加很快。
其实15M数据库文件已没有一条记录了。

channon:
莫名了!

上一篇:用IBExpert进行Firebird数据库的跨库操作
下一篇:用了下firebird,发现真的不错哦
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号