交友约会| 杂志期刊| 小说| 论坛| 电影下载| 两性知识| 电脑知识| 汽车| 旅游| 收藏

开发优质高效的Informix数据库应用程序(2)

来源:互联网 作者:2 出处:综艺读书 2006-11-17 
关 键 词:数据库  设计  服务器  存储  informix  

  二、 数据库、表创建方式的优化

  在数据库建模初期应该充分考虑创建库表的策略。若等到程序设计好之后,再改动库表结构则需要修改程序,这样在时间成本和风险上代价是很高的。

  1、建数据库的日志方式

  ◆ No Logging:不能进行事务处理。

  ◆ Buffered Log:共享缓存满即刷新写入磁盘。

  ◆ Unbuffered Log:当一个交易完成时即刷新写入磁盘。

  一般我们对实时处理系统日志方式采用Unbuffered Log,在进行大批量数据集中Load或Unload处理时采用No Logging。

  2、对数据表空间分配的优化

  数据库由表构成,实际运用中,表是动态变化的,并且有的表增长的很快。当一个表在dbspace中有超过8个交错区间时,就会影响其访问效率,随着交错区间的进一步增多,甚至会恶化成为访问数据库的瓶颈,经常出现系统颠簸现象。具体表现为运行响应时间减慢、备份时间延长,磁盘I/O常居高不下。

  通常,一个dbspace有多个chunk,然而并非所有的chunk都得到合理分配,往往是有的chunk根本没用到(因为最初创建数据库时一般会分配充裕的空间),有的chunk中却拥挤不堪、数据表严重交错。为了平衡I/O,提高访问效率,可以将增长较快的表放入单独的一个chunk中。

  在实际设计中,对于大数据量(一般>1MB)并且数据增长快速的表,在使用SQL语句Create Table时可以带extent size extent-size和next size next-size两参数,前者指定创建表的初始区间大小,后者指定当初始区间充满后,扩展区间的大小,单位是KB。

  在建表前将数据库每张表数据量大小作一估算,以便将表的第一个“extent”(物理上连续的页)空间分配尽量和估算值大小一致,下一个“extent”空间分配则根据表数据的增加量估计值来分配,这样可减少数据分配碎片和空间浪费,提高数据库系统的效率。

  例如:

  Create Table Test

  (policyNo Char(10),

  insuredName Char(20)

  )

  extent size 100000

  next size 500

  该语句建立表test的初始空间有100MB,如数据充满后每次再分配500KB的空间。

  3、采用表分片(fragmentation)技术

  “表分片”技术允许在表一级对数据存储进行控制。用户可以对表中的记录或索引进行分组,并且存储在不同的位置,这样可以将数据存储到多个磁盘上,从而减少对磁盘I/O的竞争。数据分片的方案以及分片数据所存放的一组dbspace构成了“分片策略”。数据分片有两种基本类型:轮转法分片(Round-Robin)和基于表达式分片(Expression-Based),对于“轮转法分片”,数据是根据轮转法方式存入表中的。“基于表达式分片”则根据表中的一个或多个字段对分片的规则进行定义,一般在预知查询条件时采用这种方式,从而避免查询中对某些分片的扫描。

  对表中的数据和索引进行分片主要是为了提高应程序的效率,由于INFORMIX动态服务器可以并行地扫描多个磁盘上的数据,从而实现内部查询的并行操作,因此采用“分片”技术可以提高查询效率。内部查询的并行化有助于减少对一个复杂查询的响应时间。“表分片”技术与并行数据查询(PDQ)特征联系在一起使用,这样INFORMIX服务器可以分配多条线索。从所有数据分片上并行地选取数据。此外,还可以仅仅对包含“目标数据”的数据分片进行扫描。从而大幅度地提高了整个系统效率。

  我们通过大量的数据分片将数据分布在许多的磁盘上,也实现了外部查询的并行操作。这样在大量用户对同一个表进行访问时,可以减少I/O的竞争,每秒钟完成的事务数(系统吞吐能力)也得到了提高。“表分片”技术还通过对存储在dbspace上的数据分片进行备份/恢复操作。

  “数据分片”的目标包括最大程度的内部查询并行化、外部查询并行化、提高数据可用性、更细的备份/恢复粒度以及更强的数据加载效率。

  使用“表分片”技术的基本原则:

  ①.对于联机事务处理系统(OLTP),应分片索引,减少会话竞争。

  ②.对于决策支持系统(DSS),应增加分片表,但不分片索引,分离索引,并把它们放在分离的dbspace中。

  ③.DSS查询顺序读表,使用轮转法分片(Round-Robin)模式。

  ④.如果大多请求只存取表中的部分数据,建立基于表达式分片(Expression-Based)。

  ⑤.保持分片表达式的简单性。

  ⑥.调整分片表达式,减少测试。如:order_num>=1 AND order_num<=10000 IN dbspace改为order_num<=10000 AND order_num>=1 IN dbspace,效率会更高。

  ⑦.避免需要数据类型转换的表达式。

  ⑧.不对改变频繁的字段进行分片。

  ⑨.不要分片所有表,识别出存取最频繁的关键表。

  ⑩.不要分片小表。

  举例说明两种类型的“表分片”技术使用方法:

  (1)、轮转法分片(Round-Robin)

  ◆建立数据表时指定:

  CREATE TABLE my_orders (

  order_num SERIAL(1001),

  order_date DATE,

  ship_instruct CHAR(40),

  ...)

  FRAGMENT BY ROUND ROBIN IN dbspace1, dbspace2, dbspace3

  ◆将未作分片的数据表改为分片:

  ALTER FRAGMENT ON TABLE my_orders INIT FRAGMENT

  BY ROUND ROBIN IN dbspace1,dbspace2,dbspace3

  (2)、基于表达式分片(Expression-Based)

  ◆建立数据表时指定:

  CREATE TABLE my_orders (

  order_num SERIAL(1001),

  order_date DATE,

  ship_instruct CHAR(40),

  ...)

  FRAGMENT BY EXPRESSION

  order_num < 10000 IN dbspace1,

  order_num>=10000 AND order_num < 20000 IN dbspace2,

  REMAINDER IN dbspace3

  ◆将未作分片的数据表改为分片:

  ALTER FRAGMENT ON TABLE my_orders INIT FRAGMENT

  BY EXPRESSION

  order_num < 10000 IN dbspace1,

  order_num>=10000 AND order_num < 20000 IN dbspace2,

  REMAINDER IN dbspace3

  4、建表时对表的记录锁方式根据应用处理的不同区别对待。

  批量处理的表采用页锁(page)方式,实时交易的表采用行锁(row)方式。锁方式可以在建表时确定,也可以用alter tabname lock mode(row)和alter tabname lock mode(page)命令改变。值得注意的是通过dbimport、dbexport转移生成的表其默认锁方式是页级锁,对于实时交易且操作频繁的表应改为行级锁方式,使用oncheck -pt命令可查得表的锁方式状态。

  5、其他一些创建数据库表应遵循的原则

  ◆ 保证记录的长度较小,最好要小于一个页的大小,跨越多页的长记录对性能无益。

  ◆ 在绝对有必要的情况下才使用BLOBS,BLOBS比其它数据的处理的效率要低。

  ◆ 有时为了获得所需的性能,减少连接运算而设计非常规数据模型是必要的,但这是最后的解决办法。

更多文章 更多内容请看informix  informix开发  Linux数据库宝典专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
综艺读书宗旨
相关专题
·informix (193篇文章)
·数据库专栏 (4469篇文章)
·数据库处理专题 (7214篇文章)
·城域网专题 (6668篇文章)
·数据库安全技术专题 (11215篇文章)
·数据库安装与卸载 (8929篇文章)
·Wlan组网----家庭专题 (3317篇文章)
·Linux数据库宝典 (11165篇文章)
·informix开发 (11篇文章)
·数据库相关文章 (4470篇文章)
热点标签: 数据库  设计  服务器  存储  informix  
最新技术文档
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容
Web 全站
综艺电脑频道编辑信箱  告诉我们您想看的专题或文章

友情互链 | 收藏本站 | 联系我们 | 在线留言 | 京ICP备08008424号|