不让链化现象影响数据库性能
2009-06-09 13:15:34 来源:WEB开发网第一步:创建所需要的表。
首先,数据库管理元需要执行Oracle数据库提供的utlchain.sql脚本文件。这个文件位于Oracle主目录下的/rdbms/admin下。这个脚本主要的用途就是建立一个表格。这个表格很有用。数据库系统会把分析的结果保存到这个表中。默认情况下,这个表格在安装数据库时并不会自动生成。如果数据库管理员需要分析数据库中是否存在链化现象,那么就需要手工执行这个脚本文件,以建立这张表格。这张表格中,主要有表名、HEAD_ROWID列等等。
第二步:分析目的表格。
创建上面的表格后,默认情况下里面是没有数据的。因为还没有进行相关的分析。假设现在在数据库中有一个Product的表格,主要用来保存产品信息。现在数据库管理员想要知道,数据库系统在操作这张表格数据的时候,是否存在有链化现象。此时,数据库管理员就需要利用下面的语句来进行分析查询。
Analyze table product list chained rows;
上面这条语句的作用,就是会分析product这张表格。判断这张表格中的记录是否存在在不同的块中。如果这个product表格中,有记录存储在不同的块中,则这条语句就会把相关的结果保存到刚才建立的表中。所以,如果数据库管理员查询刚才建立的表chained_rows,如果这个表中有相关记录的话,则就说明数据库中存在链化现象。数据库管理员需要采取相应的措施来避免这种情况。如果没有的话最好。
不过在使用这个语句的时候,需要注意几点。一是每次分析完治后,最好把这个表个中的记录删除。因为下次分析的时候,如果表中有记录的话,系统不会自动删除。所以在分析另外一个表的时候,如果也有链化现象。那么此时相关的记录就会很多,数据库管理员阅读的时候会出现故障。二是这个分析的频率最好频繁一点。当数据库中的记录比较多时或者数据更新比较频繁的情况下,最好能够每隔几天就执行一下这个分析语句,以判断是否有链化现象的存在。等到大量记录或者表格有链化现象的时候,处理起来就会比较困难了。所以对于大部分事务型的数据库系统,数据库管理员要养成一个周期性分析的习惯。对于大部分的数据库优化作业来说,事先追踪远远比时候解决要重要的多。当问题出现后再去解决的话,往往会大费周章,有些即使采取有效的措施,也指能够避免后续的操作不会出现这种情况。要解决以前的记录问题,只有重新导出、导入数据后才能够彻底解决。显然这会增加工作量与数据风险。为此笔者再不厌其烦的强调一次,对于这个链化现象的追踪分析,最好能够每个星期执行一次。特殊情况下,还可以利用任务计划,每天执行一次。尽早发现问题,并采取有效措施来避免这种情况。
更多精彩
赞助商链接