Informix 是一种被广泛应用的关系型数据库,随着库中数据量与应用处理交易量不断增多,其运行效率问题尤显突出,所以如何提高数据库性能是管理员们比较关心的话题。Informix 数据库的运行效率与其系统参数(online)的配置、性能的调整、库表创建的方式、索引的策略、ESQL/C 程序的质量优劣直接相关。下面北街给大家介绍一下提高 Informix 数据库运行效率的优化策略与措施。
一、Informix 系统性能参数优化
系统性能与共享内存、CPU、磁盘和网络相关。
共享内存一般是系统内存的1/3~1/4,一个cpu vp配4个LRU队列,n个LRU队列配n个页刷新进程page_cleaner,调谐使其高速缓冲区读命中率大于95%,写命中率大于85%,设定多张网卡可改进性能,网络碰撞率应在8%以内。
对磁盘调整的原则是降低读盘次数,极大化每次读盘数据量,数据分布均匀,防止瓶颈的发生。Online的磁盘空间应采用裸设备方式(raw device),而不采用文件系统方式(cooked file),前者比后者处理速度要快得多,且可靠性高。
物理日志缓存空间应在30~50兆间即可,不必太大。
设置cpu vp个数为cpu个数减1(若cpu个数为1,则cpu vp也为1)。
系统核心参数按informix各版本提出的配置要求调整即可,若调整不对,在构造online时即可能不会成功。Informix-online数据服务器性能的调试往往在一定的经验值基础上动态反复调整、测试才能获得最终满意的结果。informix数据库系统参数性能调整的优劣直接影响informix数据库运行效率,对其性能调整的具体方法与步骤,informix资料有较详尽说明,这里不作重点讨论。
二、创建库表方式优化
1. 数据库建库程序对每个数据表空间分配的优化。
在建表前将数据库每张表数据量大小作一估算,以便将表的第一个“extent”(物理上连续的页)空间分配尽量和估算值大小一致,下一个“extent”空间分配则根据表数据的增加量估计值来分配,这样可减少数据分配碎片和空间浪费,提高数据库系统的效率。
2. 引入表分割 fragmentation ,使数据在物理逻辑上分布均匀,有助于并行处理性能的提高。
3. 建表时对表的记录锁方式根据应用处理的不同区别对待。批量处理的表采用页锁(page)方式,实时交易的表采用行锁(row)方式。锁方式可以在建表时确定,也可以用alter tabname lock mode(row)和alter tabname lock mode(page)命令改变。值得注意的是通过 dbimport、dbexport 转移生成的表其默认锁方式是页级锁,对于实时交易且操作频繁的表应改为行级锁方式,使用oncheck -pt命令可查得表的锁方式状态。
4.建库的日志方式:
(1)No logging:不能进行事务处理。
(2)buffered log:共享缓存满即刷新写入磁盘。
(3)unbuffered log:当一个交易完成时即刷新写入磁盘。
(4)ansi mode:只有日期格式差异,月日年形式,其他与 unbuffered 相同。
一般我们对实时处理系统日志方式采用unbuffered log,在进行大批量数据集中装卸时采用no logging。
三、index索引策略的优化与原则
(1)两表中有关联,则关联字段必须建索引。如果 select 语句的 where 子句具有在一个表的一个单字段和另一个表的一个单字段之间的连接条件,则对记录数目更多的那个表的那个字段建立索引;如果一个表的几个字段和另一个表的几个字段的连接条件,则对记录数目更多的那个表的起作用的字段上建立复合索引。
(2)避免高重复率字段建索引。
(3)对同一表不要过多地建索引。
(4)建索引的字段的 size 尽量少,复合索引尽量少用。
(5)建聚族索引,减少索引文件碎片,以加快检索速度。
(6)where 子句经常用到的字段做索引。
(7)先 load data ,后 create index 。
(8)数据量小的表是否建索引影响不大,一般不要对记录数小于200的小表建立索引,因为从使用索引得到的速度不能抵消在表上打开和检索索引文件所需的时间。
(9)建 primary key
四、其他因素与措施
(1)INFORMIX数据库中一个事务处理不能跨多个进程,不然会引起数据库运行效率很低或处理异常。
(2)利用“set explain on” INFORMIX语句来分析数据库查找策略。
当发现某一部分INFORMIX语句运行特别慢又找不到原因时,可在程序中加入“set explain on”语句,当程序运行时,在程序运行的当前目录下产生一个“sqexplain.out”文件,记录了INFORMIX数据库服务器采用何种优化策略来查找数据库。在该文件中可以发现查找中有无使用索引条件,估计的查找代价等信息。
(3)数据库在做″dbimport″后应运行update statistics语句。
当数据库系统用“dbimport”实用程序完成数据库装载后,应运行update statistics数据库语句保证系统表中统计信息准确,否则将影响数据库优化器的策略和系统运行性能。
(4)经常插入和删除的大表应定期运行update statistics high语句。
对经常插入和删除的大表应定期运行update statistics语句保证系统表中统计信息准确,保证数据库优化器作出正确的优化策略提高系统运行性能。
(5)对大文件采用load命令装载入库前可先去掉原有的日志方式和去掉索引,等load装载完成后再重建索引和日志,能大大提高装载效率,避免出错产生。
a. 去掉原有的日志方式:ontape-S -N dbname
b. 去索引:delete index indexname
c. 用load 装入数据:load from filename insert into tabname
d. 重建索引:create index to indexname on tabname(fld1,fld2……)
e. 重建日志:ontape -C -B
(6)在应用上引入多进程并发处理,充分利用系统资源,能大大提高处理效率。


太过专业,不感兴趣!呵呵~
不是说撤了阿里MM吗?
@花果山寨
晚上就撤,最近有点忙哈
尊敬的朋友,您参加的独立博客调研报告已经新鲜出炉,在我的博客上(石油博客 blogpetro),欢迎您阅读,并引用该文章,这是我们52名参与的博主的共同成果,再次感谢您的参与!
这个要学学才能懂
专业,帮顶,嘻嘻
火星了,没玩过.
技术文章 好好支持一下
看不懂 帮你顶顶
还没有整过这个
没使过、!!
这么专业的奉献,我只有顶顶了,因为确实看不懂
太技术了,有点看不懂啊
代码菜没办法,但是我努力向代码牛迈进。
技术类的文章啊,只有单纯地支持了,呵呵
你好,我看你顶上那个7D服装定制的广告不错,我也想做这个广告,点进去之后没找到合作页面,请问你是如何做的?需要自己联系商家吗??
不太懂 不做评论
@精品吧 7D网盟:u.7d.com.cn,QQ:691673396
支持支持吧,有空回访哦
来学习一下!
没了解过 Informix
预祝春节快乐!
我应该去看上一篇 这个看了也不懂
哈哈,学习了,都是高手啊
好博文,支持分享
很不错的一篇文章,值得学习,支持下!