`
axengine
  • 浏览: 145658 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

【整理】informix statistics问题

阅读更多
Description:从生产环境导出的表更新到开发测试环境,导入表时要将测试环境的原数据清空,这里是单表导入。当informix的数据更新时,若未能及时更新统计信息,当进行查询时可能会使用不到预定的索引,导致查询效率低下。更新统计信息:update statistics for table tablename;
给定查询的不同执行策略可能会有不同的代价,构造具有最小查询执行代价的查询执行计划是数据库系统的职责。查询优化是为了查询选择最有效的查询策略的过程。查询优化是尽量找出与给定表达式等价的、但是执行效率更高的一个表达式,而且决定执行运算时所采用的具体算法以及将使用的特定索引等。
为了在诸多查询策略中作出选择,数据库系统的优化器必须估计每个查询策略的代价,磁盘访问次数常常是衡量代价的主要标准。在没有按照某策略执行查询前,准确计算出该策略的代价是不可能的,所以,优化器要利用数据库系统中的统计信息,来估计查询策略的代价。 Informix数据库系统这些统计信息保存在SYSMASTER数据库中,如果要维护准确的统计值,那么每当表数据修改时,相应的统计值也必须更新,这种更新会带来很大的代价,因此Informix系统不是在每次修改时对统计值更新。因此,用于选择查询策略的统计数据不一定完全正确,有时会遇到查询用不到应该使用的索引,就是统计信息没有更新的原因。 对Informix数据库系统,这些统计信息保存在SYSMASTER数据库中,可以使用UPDATE STATISTICS命令更新。
给定查询的不同执行策略可能会有不同的代价,构造具有最小查询执行代价的查询执行计划是数据库系统的职责。查询优化是为了查询选择最有效的查询策略的过程。查询优化是尽量找出与给定表达式等价的、但是执行效率更高的一个表达式,而且决定执行运算时所采用的具体算法以及将使用的特定索引等。  为了在诸多查询策略中作出选择,数据库系统的优化器必须估计每个查询策略的代价,磁盘访问次数常常是衡量代价的主要标准。在没有按照某策略执行查询前,准确计算出该策略的代价是不可能的,所以,优化器要利用数据库系统中的统计信息,来估计查询策略的代价。Informix数据库系统这些统计信息保存在 SYSMASTER数据库中,如果要维护准确的统计值,那么每当表数据修改时,相应的统计值也必须更新,这种更新会带来很大的代价,因此Informix 系统不是在每次修改时对统计值更新。因此,用于选择查询策略的统计数据不一定完全正确,有时会遇到查询用不到应该使用的索引,就是统计信息没有更新的原因。 对Informix数据库系统,这些统计信息保存在SYSMASTER数据库中,可以使用UPDATE STATISTICS命令更新。

以下是用于估计代价的信息:

   1. 记录数
   2. 表空间的页数
   3. 记录长度
   4. 字段不同值个数
   5. 字段值的分布
   6. 索引的层数
   7. 索引叶结点数目
   8. 索引B+树的深度
   9. 索引是升序还是降序或聚类索引
  10. 索引占用的页面数目

Informix 数据库服务器中的优化器为SQL语句的查询提供最有效的策略,这就使得你在进行表的连接查询时不必全面考虑究竟那个表首先搜索,以及究竟需要使用那个索引。
通过执行update statistics命令可以更新系统的统计信息,使得优化器得到当前最新的统计信息。当修改或删除一个表的相关数据时,系统的统计信息并不自动更新。比如:如果使用delete命令删除一个数据库表内的一条记录,删除完成后查找systables内关于该表的记录信息时,将会发现nrows(数据库表的记录行数目)并没有改变。而通过执行update statistics命令,就可以使系统表systables、sysdistrib、syscolumns、sysindexes等表内的信息得到更新。在运行完update statistics后,这时就会发现systables内的nrows字段已得到更新。如果执行update statistics medium(high),在sysdistrib表内还可以得到更新的数据分布信息。所以,当大量地修改数据库表后最好执行一下update statistics操作。另外,update statistics将强迫存储过程的优化(对sysprocpplan更新)。以下是与update statistics 相关的系统表:
1、syscolumns:
描述了数据库内的每个字段,其中的colmin、colmax存储了数据库各表字段的次小及次大值,这些值只有在该字段是索引且运行了Update statistics之后才生效。如对于字段值1、2、3、4、5,则4为次大值,2为次小值。
2、sysdistrib:
存储了数据分布信息。该表内提供了详细的表字段的信息用于提供给优化器优化SQL Select语句的执行。当执行update statistics medium(high)之后将往此表存入信息。
执行“dbschema -hd”可以得到指定表或字段的分布信息

3、sysindexes:

描述了数据库内的索引信息。对于数据库内的每个索引对应一条记录。修改索引之后只有执行Update statistics才能使其改变在该表内得到反映。同时也更新clust的数值,在该表的数据页数目及数据库记录条数之间

4、systables:
通过执行Update statistics可以更新nrows数据

update statistics有以下三种级别:

1、LOW:

缺省为LOW,此时搜集了关于column的最少量信息。只有systables、syscolumns、sysindexes内的内容改变,不影响sysdistrib。为了提高效率,一般对非索引字段执行LOW操作

2、HIGH:

此时构建的分布信息是准确的,而不是统计意义上的。

因为耗费时间和占用CPU 资源,可以只对表或字段执行HIGH操作。对于非常大的表,数据库服务器将扫描一次每个字段的所有数据。可以配置DBUPSPACE环境变量来决定可以利用的最大的系统磁盘空间

3、MEDIUM:抽样选取数据分布信息,故所需时间比HIGH要少什么时候应该执行update ststistics ?

建议在以下情况,执行update statistics 操作:

对数据做了大量修改,大量是针对数据的分布而言,若数据分布没有明显的改变则可以不做改变的数据库表有与之相关的存储过程,避免在运行时存储过程重新优化数据库升级之后完成对索引的转变4, update ststistics 的方法考虑到速度性能因素,执行update statistics的推荐方法:

对表执行:update  statistics medium for table ####  distributions only

对每个索引的首字段执行:update statistics high

对复合索引执行:update statistics low

必要时对非索引字段但在条件中使用到的字段执行Update statistics high操作
分享到:
评论

相关推荐

    Informix 常见问题处理

    Informix 数据库管理系统在运行过程中可能会遇到各种问题,这些问题可能导致数据库性能下降或者服务中断。本篇文章将深入探讨 Informix 常见的三个问题及其解决方案。 1. 逻辑日志满 逻辑日志是 Informix 数据库...

    informix 数据库维护常见问题

    在 Informix 数据库的管理和维护过程中,可能会遇到各种问题,以下是一些常见问题的详细解答: 1. **怎样尽快获得 Informix 公司技术支持?** - 通常,你可以通过Informix官方支持网站或者客户服务热线联系技术...

    informix数据库 informix解锁问题 informix性能,空间监控,计算单条数据大小

    informix数据库 informix解锁问题 informix性能,空间监控,计算单条数据大小 在数据库服务器上行 执行 dbaccess sysmaster systermastertest.sql 就可看见 数据库当前空间使用比例

    (new)jdbc连接informix乱码问题

    我的qq:25057750,欢迎探讨技术问题。 jdbc对汉字的支持欠佳,informix的数据库,用jdbc连接后,汉字显示乱码,有人说用字符转换的方式可以解决,但是如果每个查询都转换,是个很麻烦的事情,经过搜索,对别人的...

    informix考题informix考题

    此外,Informix的Hot Backup和Online Defragmentation功能可以在不影响业务运行的情况下进行数据备份和表碎片整理。 七、Informix开发与管理工具 IBM提供了Informix Dynamic Server Director (IDSD)等管理工具,...

    jdbc连接informix乱码问题

    jdbc对汉字的支持欠佳,informix的数据库,用jdbc连接后,汉字显示乱码,有人说用字符转换的方式可以解决,但是如果每个查询都转换,是个很麻烦的事情,经过搜索,对别人的方法加以改进,总算有个比较满意的方法可以...

    关于处理informix并发问题的几点心得

    在处理 Informix 并发问题时,核心关注的是如何确保数据一致性并提高系统效率。并发问题通常发生在多个用户或进程同时访问和修改同一数据时,可能导致数据不一致或死锁。在 Informix 数据库管理系统中,有多种策略...

    Linux下informix安装Linux下informix安装

    Linux 下 Informix 安装 Linux 下 Informix 安装是一个复杂的过程,需要按照一定的步骤进行。以下是 Informix 11.5 for Linux as4 u2 的安装过程: 一、软件包下载 首先需要在 IBM 官方网站上注册并下载安装包 iif...

    informix学习使用手册

    《Informix学习使用手册》是一本专为Informix学习者设计的全面教程,它涵盖了从基础概念到高级特性的各种主题,旨在帮助初学者、使用者和开发者深入理解并熟练运用Informix数据库系统。这本书详细解释了Informix的...

    linux下informix自启动设置

    在Linux操作系统中,Informix数据库管理系统是广泛应用的关系型数据库系统,尤其在企业级环境中,确保其在系统启动时自动...在日常运维中,定期检查这些配置的正确性以及数据库的日志,以便及时发现和处理潜在问题。

    INFORMIX安装INFORMIX安装

    根据提供的文件信息,我们可以归纳出一个详细的步骤指南来完成INFORMIX数据库系统的安装与配置。以下将基于给定的信息,详细地阐述每一步的具体操作及其意义。 ### INFORMIX安装流程详解 #### 1. 准备环境 - **...

    Informix11.5认证教程

    调试 Informix 数据库涉及到的问题多种多样,如性能优化、错误排查和问题诊断等。你可以使用 Informix 的内置工具如 dbexport、dbimport、onstat、oncheck 等进行性能监控和问题分析。同时,学习 SQL 查询优化技巧...

    informix jdbc jar包

    标题 "informix jdbc jar包" 指的是用于Java应用程序连接Informix数据库的JDBC驱动程序集合。在Java开发中,JDBC(Java Database Connectivity)是标准接口,允许Java程序与各种类型的数据库进行交互。Informix JDBC...

    informix for windows数据库安装配置

    Informix for Windows 数据库安装配置详解 Informix 是 IBM 公司开发的一款关系数据库管理系统,提供了强大且灵活的数据存储和管理功能。在本文中,我们将详细介绍 Informix for Windows 数据库的安装配置过程,...

    informix 12.1官方指南(中文)

    《Informix 12.1官方指南》是Informix数据库管理系统的一个重要参考资料,它为用户提供了详尽的、深入的了解和操作Informix 12.1版本的途径。Informix是一款高性能、可扩展的数据库解决方案,广泛应用于企业级数据...

    informix远程连接(客户端配置).

    Informix 远程连接客户端配置 Informix 远程连接客户端配置是指在客户端计算机上配置 Informix 客户端,以便连接到远程 Informix 服务器。在本文中,我们将介绍 Informix 远程连接客户端配置的详细步骤。 一、查看...

    informix数据库连接驱动jar包

    Informix数据库连接驱动jar包是Java应用程序与Informix关系型数据库管理系统进行交互的重要组件。这些jar文件包含了必要的类和资源,使得Java程序能够利用JDBC(Java Database Connectivity)API来执行SQL语句、管理...

    安装INFORMIX客户端软件以及使用

    INFORMIX 客户端软件安装和使用指南 INFORMIX 客户端软件是 IBM 公司开发的一款数据库管理系统客户端软件,能够帮助用户远程连接和管理 INFORMIX 数据库。下面是安装 INFORMIX 客户端软件的详细步骤和使用方法。 ...

    Informix 11.70 数据库的名称和端口

    Informix 11.70 数据库的名称和端口 Informix 11.70 数据库的名称和端口是 Windows 系统下 Informix 数据库的重要组件。在本文中,我们将详细介绍如何获取 Informix 11.70 数据库的名称和端口,并且使用第三方工具...

Global site tag (gtag.js) - Google Analytics