Informix-Online数据库的查询优化策略
来源: 作者: 出处:综艺读书 2006-10-08
Informix-Online 动态服务器(IDS,Informix-Online Dynamic Server)作为Informix数据库产品技术的核心,以其动态可伸缩体系结构,高效的并行处理能力、共享内存技术及易管理性等特点,将硬件资源发挥得淋漓尽致。
|
|
|||
一、查询的分类及要求
针对语句中所涉及的数据库表的数目查询可分为:单表查询、多表查询、联合查询、子查询等,多表查询建立在多张表的连接之上,分嵌套循环、合并排序、哈希连接三种方式,最为复杂,也是调优的重点。目前数据库的应用分为联机事务处理(OLTP,Online Transaction Processing)和决策支持系统(DSS,Decision Support System)两大类型,它们对查询的要求不尽相同。OLTP主要涉及单张表,SQL语句简单,数据按索引读取,查询行数少,对响应的时间要求非常苛刻,常在秒级或以下,多用于在线实时业务;DSS涉及多张表之间的连接查询,SQL语句复杂,数据按物理顺序读取,查询行数多,响应时间长,多用于建立在数据仓库技术之上的复杂的数据分析。但无论何种情况,我们都希望最快的响应速度,这也是调优的最终目标。
二、查询的优化策略
1.充分利用查询优化器
查询优化器提供了数据查询的优化策略分析和选择方式,通过设置相关参数,优化器能够选择最佳的连接策略,并在所有的查询路径中找出一条最优路径。选择良好的路径是查询优化中至关重要的一环,一条好的路径可以扫描最少的记录,以最少的磁盘I/O得到正确的查询结果。可通过以下步骤进行。
(1)设置连接策略
通过修改配置文件$ONCONFIG中的OPTCOMPIND参数值来实现。
OPTCOMPIND 0:在连接中优化器只选择索引连接。
OPTCOMPIND 1:若事务处理为可重复读模式(Repeatable Read),则选择索引策略,否则,优化器自动选择开销最低的连接策略。
OPTCOMPIND 2:优化器自动选择开销最低的连接策略。应尽量选择该参数。
(2)设置查询优化的模式
也即选择最优的查询路径,通过执行以下SQL语句来实现,格式为:
SET OPTIMIZATION [ HIGH | LOW | FIRST_ROWS | ALL_ROWS ]
其中,HIGH是缺省选项,表示对所有查询路径都进行检测,从中选择最优。
LOW表示采用深度优先法仅在部分路径中选择最优,即在每次连接比较中,遇到最优路径就继续深入而滤掉非最优路径,特点是优化时间短,但路径准确率低。
FIRST_ROWS和ALL_ROWS是自IDS V7.3开始增加的新选项,无论对OLTP还是DSS都非常有用。传统的查询(即ALL_ROWS方式)一次将所有查询结果输出到共享内存缓冲区中,时间的消耗非常大,然而实践表明,大部分用户仅关注最初的几屏输出内容,因此FIRST_ROWS选项为我们提供了很好的选择。FIRST_ROWS指导优化器选择一条查询路径,使其只输出填满一个缓冲区的记录数,如果用户继续查询则继续执行,这样避免了不必要的输出结果和时间浪费,也使查询速度大大提高。
由此可见,优化器的丰富功能为我们提供了灵活的手段,管理员可以根据不同应用情况选择最佳的方式,既能达到最佳的查询效果,又能将由此而造成的系统开销降至最低。
2.进行统计更新和数据分布
当数据库表做了大量的插入、删除操作或表的索引发生变化后,Online数据库系统表的相关信息与实际表的统计数字不一致,这对数据的完整性没有任何损害,但会影响到查询的速度。因为优化器所制定的计划和策略得以正确实施的前提是对系统表信息的精确读取,统计信息的正确性将直接影响到查询的执行效果,因此我们必须定期执行系统表信息的统计更新工作。此外还要经常做好数据分布工作,使数据的组织形式更为合理。通过数据分布,优化器可以根据有关信息确定如下内容:过滤器字段的选择率(Selectivity)、访问过滤器字段和表的策略、最佳的连接策略。一旦确定这些内容,查询的执行时间将会显著缩短。
进行统计更新和数据分布的唯一方法是运行SQL命令:Update Statistics……,其结果是:IDS 流览表和索引,一方面对统计信息加以编译,最终将编译好的信息存储到相应的系统表中,另一方面读取表中记录并对其进行排序以生成最好的组织形式。具体格式如下:
Update Statistics [ High | Medium | Low ] [ Distributions Only ] [ for table tabname [ (field1,field2……) ] ]
其中,High对表中的所有记录进行排序以产生数据分布。
Medium随时从表中选取部分记录进行排序以产生数据分布。
Low仅执行统计更新,即仅修改系统表systables、sysindexes、syscolumns的内容,但不进行数据分布。
Distributions Only进行数据分布和部分统计更新工作,不更新系统表sysindexes的内容。
为实现科学有效的统计更新和数据分布,通常应执行以下优化步骤:
(1)针对每张表运行
Update Statistics Medium for table tabname Distributions Only
(2)针对每张表中带索引的第一个字段运行
Update Statistics High for table tabname (fieldname)
(3)对某些表中带复合索引的每一个字段运行
Update Statistics Low for table tabname (fieldname1,fieldname2……)
以上顺序非常重要,不能搞错。为方便运行,我们可以将以上命令按顺序写入到一个shell程序文件中,让操作系统在每日数据最少改动时间定时运行该程序。
3.使用SQL语句缓存(SSC,SQL Statement Cache)功能
SSC是Informix IDS2000 V9中增加的新功能,提供了共享的语句缓存,从而实现了快速的SQL调用。传统情况下,每条SQL语句运行前都要进行逻辑分析以判断语法正误,还要在共享内存中为各语句分配空间。实践表明,无论是OLTP还是DSS应用,大量运行的SQL语句具有相同的格式,通过SSC,重复的SQL语句可以单一在共享内存中存储及共享使用,这样不仅大大减少了大量语句的分析过程,使查询的速度明显加快,而且节省了大量共享内存空间,带来了其他应用效果的改善。SSC的使用方法如下。
(1) 在IDS配置文件$ONCONFIG中定义
STMT_CACHE 1
或运行SQL命令:onmode -e enable 以激活SSC功能。
(2)用户使用前还必须定义环境变量STMT_CACHE
export STMT_CACHE = 1
或运行SQL命令:set statement cache on
经过以上设置后,所有的查询都将充分基于SSC进行高效处理。
三、查看优化结果
查询优化器给用户提供了大量详尽的关于优化的信息,包括:
1.连接过程中的开销估计
2.查询过程中表的使用顺序(即查询路径)
3.查询过程中用到的临时表
4.对每个表的访问类型,如:顺序扫描、索引扫描、哈希连接等
一名合格的系统管理员应熟知每一项信息所代表的含义,并进行反复的优化和输出比较方可制定出最佳的优化方案。为使系统提供以上信息,要求执行查询前先运行SQL命令:set explain on ,查询完毕后再运行:set explain off,这样在用户当前工作目录下会生成一个包含以上信息sqlexplain.out文本文件。通过该文件内容,管理员可清楚地看到经过优化后的查询效果。
如果管理员想了解SSC的使用情况,可运行以下SQL命令:
onstat -g cac stmt
这时共享内存中每条SQL语句的命中情况将会详尽地显示出来,命中率越高,表明查询的效果越好,SSC得到了越充分的利用。
本文所列举的查询优化策略只是笔者工作经验的总结,实际上,数据库的优化是一个长期不懈、不断比较分析和调整的过程,因为数据在不断的变化中,应用在不断的发展中。系统管理员只有深入领会和掌握Informix动态服务器所提供的强大功能,正确观察和分析系统运行中提供的各种信息,充分结合实际应用特点,才能合理制定出良好的优化策略,实现快速、高效的数据查询和应用分析,同时也使硬件资源得到最充分的发挥。
相关图文阅读
频道图文推荐
相关专题
·系统优化大全 (13909篇文章)
·SQL Server 索引和查询专题 (2635篇文章)
·informix (193篇文章)
·数据库专栏 (4469篇文章)
·数据库处理专题 (7214篇文章)
·城域网专题 (6668篇文章)
·数据库安全技术专题 (11215篇文章)
·数据库安装与卸载 (8929篇文章)
·Linux数据库宝典 (11165篇文章)
·性能调优 (8篇文章)
·SQL Server 索引和查询专题 (2635篇文章)
·informix (193篇文章)
·数据库专栏 (4469篇文章)
·数据库处理专题 (7214篇文章)
·城域网专题 (6668篇文章)
·数据库安全技术专题 (11215篇文章)
·数据库安装与卸载 (8929篇文章)
·Linux数据库宝典 (11165篇文章)
·性能调优 (8篇文章)
最新技术文档
·INFORMIX-4GL实用手册(二)(2) 11-17
·开发优质高效的Informix数据库应用程序(4) 11-17
·开发优质高效的Informix数据库应用程序(3) 11-17
·开发优质高效的Informix数据库应用程序(2) 11-17
·Informix TRAIN 文档详解(5) 11-17
·Informix TRAIN 文档详解(4) 11-17
·Informix TRAIN 文档详解(3) 11-17
·Informix TRAIN 文档详解(2) 11-17
·Informix的监控和管理命令(2) 11-17
·Informix 5的安装及初始配置(2) 11-17
·开发优质高效的Informix数据库应用程序(4) 11-17
·开发优质高效的Informix数据库应用程序(3) 11-17
·开发优质高效的Informix数据库应用程序(2) 11-17
·Informix TRAIN 文档详解(5) 11-17
·Informix TRAIN 文档详解(4) 11-17
·Informix TRAIN 文档详解(3) 11-17
·Informix TRAIN 文档详解(2) 11-17
·Informix的监控和管理命令(2) 11-17
·Informix 5的安装及初始配置(2) 11-17
站内各频道最新更新文档
站内最新制作专题
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
热门关键字导读
站内频道文章精选
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |
百度推荐,商机无限
搜索您感兴趣的内容




