不让链化现象影响数据库性能

正常情况下往表中新建记录时,数据库系统会将数据写入到块并会像这行记录提供一个ROWID值。这个值记录了这条记录在硬盘上存储的位置。在更新某条记录的时候,也是如此。数据库系统会根据ROWID的值将需要更新的记录从硬盘中读取到块中;然后更新完毕后,再将块中的记录保存到硬盘对应的位置。更新过程中,ROWID列的值通常情况下不会改变。

但是如果一个块的容量不能够容纳一条记录。也就是会所,当单个数据块没有足够的空间来保存新建的一行记录或者更新的某行记录时,就会发生链化现象。到一个数据库的容量不足以容纳一条记录时,那么数据库就不得不动用更多的数据块来保存这条记录。在Oracle数据库中,如果某条记录需要利用多个数据库来保存,我们往往把这行记录叫做链化行。而在访问一行记录时,如果需要访问多个数据块,则会比访问单个数据块需要耗费更多的服务器资源,会大大降低数据库性能。我们把这种因为链化行而导致的数据库性能下降的现象叫做链化现象。根据专家统计,严重的话,链化现象可能降低数据库10%的性能,甚至更多。所以数据库管理员如果在数据库部署中,能够有效避免链化现象,那么就可以在很大程度上提升数据库的性能

一、 如何判断是否有链化现象的存在?

那么数据库管理员该如何判断数据库中是否有链化现象的存在呢?如果没有工具,光凭数据库管理员的眼力或者经验的话,是很难判断的。数据库管理员必须找一个顺手的工具。其实Oracle数据库设计这已经预计到这个问题对于数据库性能的不利影响。为此在数据库中已经提供了追踪、分析链化现象的工具。在Oracle数据库安装主目录的/rdbms/admin下有一个脚本文件,名字叫做utlchain.sql。这是Oracle数据库自带的一个脚本文件。我们可以利用文本编辑器等工具来打开这个脚本文件,可以看到这个脚本文件主要是用来创建一个表,用来保存分析脚本现象所需要的内容。

第一步:创建所需要的表。

首先,数据库管理元需要执行Oracle数据库提供的utlchain.sql脚本文件。这个文件位于Oracle主目录下的/rdbms/admin下。这个脚本主要的用途就是建立一个表格。这个表格很有用。数据库系统会把分析的结果保存到这个表中。默认情况下,这个表格在安装数据库时并不会自动生成。如果数据库管理员需要分析数据库中是否存在链化现象,那么就需要手工执行这个脚本文件,以建立这张表格。这张表格中,主要有表名、HEAD_ROWID列等等。

第二步:分析目的表格。

创建上面的表格后,默认情况下里面是没有数据的。因为还没有进行相关的分析。假设现在在数据库中有一个Product的表格,主要用来保存产品信息。现在数据库管理员想要知道,数据库系统在操作这张表格数据的时候,是否存在有链化现象。此时,数据库管理员就需要利用下面的语句来进行分析查询。

Analyze table product list chained rows;

上面这条语句的作用,就是会分析product这张表格。判断这张表格中的记录是否存在在不同的块中。如果这个product表格中,有记录存储在不同的块中,则这条语句就会把相关的结果保存到刚才建立的表中。所以,如果数据库管理员查询刚才建立的表chained_rows,如果这个表中有相关记录的话,则就说明数据库中存在链化现象。数据库管理员需要采取相应的措施来避免这种情况。如果没有的话最好。

不过在使用这个语句的时候,需要注意几点。一是每次分析完治后,最好把这个表个中的记录删除。因为下次分析的时候,如果表中有记录的话,系统不会自动删除。所以在分析另外一个表的时候,如果也有链化现象。那么此时相关的记录就会很多,数据库管理员阅读的时候会出现故障。二是这个分析的频率最好频繁一点。当数据库中的记录比较多时或者数据更新比较频繁的情况下,最好能够每隔几天就执行一下这个分析语句,以判断是否有链化现象的存在。等到大量记录或者表格有链化现象的时候,处理起来就会比较困难了。所以对于大部分事务型的数据库系统,数据库管理员要养成一个周期性分析的习惯。对于大部分的数据库优化作业来说,事先追踪远远比时候解决要重要的多。当问题出现后再去解决的话,往往会大费周章,有些即使采取有效的措施,也指能够避免后续的操作不会出现这种情况。要解决以前的记录问题,只有重新导出、导入数据后才能够彻底解决。显然这会增加工作量与数据风险。为此笔者再不厌其烦的强调一次,对于这个链化现象的追踪分析,最好能够每个星期执行一次。特殊情况下,还可以利用任务计划,每天执行一次。尽早发现问题,并采取有效措施来避免这种情况。

时间: 2024-09-17 04:42:14

不让链化现象影响数据库性能的相关文章

影响数据库性能的因素

论坛上的数据库爱好者们,对于数据库底层的各种细节,内幕,等待事件,隐藏参数等津津乐道,对于调整好一条SQL语句使之在查询优化器/查询引擎下能高性能运转具有巨大的满足感成功感,仿佛自己掌握了天下最有价值的真理,驾驭了天下最有难度的技术.但对于设计和开发出这个数据库系统的人来说,他们看到此情此景,只好躲在一边偷偷的笑了.那么问题来了,使用别人数据库的人被称为大师(如:OCM),那么自己写出一个数据库来的人又该称为什么呢?到底谁才是真正的高手呢? 数据库系统优化中的一些观点: "系统性能出现问题进行优

Tips:不要让临时表空间影响数据库性能

在Oracle数据库中进行排序.分组汇总.索引等到作时,会产生很多的临时数据.如有一张员工信息表,数据库中是安装记录建立的时间来保存的.如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据.对于这些临时数据,Oracle数据库是如何处理的呢? 通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内.在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据.但是这个分区的容量是有限的.当这个

【性能优化】ORACLE数据库性能优化概述

   为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据库完成的SQL语句数目:数据库用户响应时间是指用户从提交SQL语句开始到获得结果的那一段时间.数据库用户响应时间又可以分为系统服务时间和

ORACLE数据库性能优化

实际上,为了保证ORACLE数据库运行在最佳的性能状态下,在http://www.aliyun.com/zixun/aggregation/32730.html">信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序 SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信息系统开发之前完成的. 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据

不要让临时表空间影响Oracle数据库性能

在Oracle数据库中进行排序.分组汇总.索引等到作时,会产生很多的临时数据.如有一张员工信息表,数据库中是安装记录建立的时间来保存的.如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据.对于这些临时数据,Oracle数据库是如何处理的呢? 通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内.在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据.但是这个分区的容量是有限的.当这个

15年老司机的DPM数据库性能分析产品研发之路

本文根据DBAplus社群第87期线上分享整理而成.   讲师介绍  邹德裕 轻维软件首席专家   DBAplus社群联合发起人,OraZ产品作者.Oracle OCM. 15年运维管理经验,在数据库诊断.故障排除.优化.架构设计等方面具有丰富的经验.   主题简介: 1.运维中常见的场景及对应解决案例 2.解密DPM数据库性能分析平台   本次我给大家带来的主题分享为<15年老司机的DPM数据库性能分析产品研发之路>.   我将通过Oracle在实际生产中常见的运维场景及问题处理案例,解析如

连接模式,提高数据库性能的捷径

一.共享服务器模式. 共享服务器模式,也叫做多线程服务器模式.在这种模式下,Oracle数据库允许多个用户进程共享非常少的服务器进程.所以,可以同时实现用户并发访问的人数也就大大的增加.如果使用专用服务器模式,则每个用户连接数据库时,每个用户进程需要他自己的专用服务器进程.也就是说,客户端进程与服务器端进程是一一对应的. 而如果采用共享服务器模式的话,则多个用户可以共用一个服务器进程,也就是说,此时客户端进程与服务器进程是多对一的情况.这主要是通过调度程序来实现的.调度程序将多个加入数据库访问会

数据库性能分析及调整一例

数据|数据库|性能 故障现象2004年6月8日上午10:00,内蒙古巴盟网通用户反映在OSS系统界面"话单查询"里查询单个用户五天的话单特别慢,查询很长时间无结果. 例如:在OSS系统界面"综合查询"内点击"收费"-〉"话单查询",键入"用户号码,起始时间:2004-01-01 00:00:00,结束时间:2004-06-01 23:00:00",点击查询后,IE进度条缓慢,很长时间不返回结果.故障分析经过

保“库”之路:Oracle数据库性能保护

oracle|数据|数据库|性能 Oracle数据库以其高可靠性.安全性.可兼容性,得到越来越多的企业的青睐.如何使Oracle数据库保持优良性能,这是许多数据库管理员关心的问题,根据笔者经验建议不妨针对以下几个方面加以考虑. 一.分区 根据实际经验,在一个大数据库中,数据空间的绝大多数是被少量的表所占有.为了简化大型数据库的管理,改善应用的查询性能,一般可以使用分区这种手段.所谓分区就是动态表中的记录分离到若干不同的表空间上,使数据在物理上被分割开来,便于维护.备份.恢复.事务及查询性能.当使