字典托管转到本地托管以提高Oracle数据库性能
在Oracle数据库中,其表空间管理主要有两种模式,分别为“字典托管”模式和“本地托管”模式。这两种模式虽然对于终端用户来说,可能没有明显的差异。但是从数据库工程师角度来讲,其差异是非常巨大的。最重要的一点,如果采用本地托管模式的话,从性能上来讲要优于字典托管模式。在这篇文章中,笔者就给大家介绍一下,如何通过这个管理模式的转变来提高Oracle数据库的性能,以及转换时注意的内容。
一、转换过程中的注意点及实现方法。
如上图所示,Oracle数据库中表空间可以分为系统System表空间和非系统表空间。这两种表空间都支持字典托管模式和本地托管模式。但是由于系统表空间的特殊性,将其从字典托管模式转换到本地托管模式时,有一些特别需要注意的内容。笔者等一下会特别强调这一方面的事项。
根据经验,笔者发现在Oracle11G或者10G数据库中执行表空间的转换,主要有“迁移”和“重建”两种方法。不过笔者这里并不建议采用迁移的方案。因为通过迁移的方式将表空间从字典托管模式转换为本地托管模式的时候,盘区映射将会移入到表空间的数据文件头中。注意,此时系统是不能够使用自动分配或者统一盘区尺寸管理。也就是说,无法使用本地托管模式的优势,无法有效的减少碎片。在这种情况下,还必须为表空间中的每个段指定存储语句。不过迁移方法也并不是一无用处,其能够在一定程度上带来性能的提升。不过其提升的效果没有“重建数据库”的方法那么好。另外特别重要的是,数据库系统将无法从迁移总获得策略方面的优势。如无法像本地托管模式那样对盘区进行有效的操作。
所以笔者这里建议大家采用的是“重建数据库”法。虽然这个方法在操作上要比迁移方法复杂一点,但是最终带来的效果还是蛮客观的。这也就是说,产出要大于投入。其实这个重建数据库的过程也就是四个步骤。
第一步:导出表空间中的段。在Oracle数据库中,可以在命令行模式下使用Expdb等语句将数据库中已有的段导出来。如果数据库管理员对于命令行不熟悉的话,也可以借助其管理控制台来导出所有的数据段。
第二步:删除原有的表空间。如果数据库管理员仍然需要用到原来的服务器,那么就需要将这个服务器上原有的表空间删除。注意,这里采用的不是迁移方案。所以不是像操作系统升级一样,在原版本的功能上进行升级。而是彻底的删除之后,再重新安装。为了减少文件碎片影响转换后的效果,最好对相关的磁盘分区再采取格式化的操作。尽量提供一个干净的环境。
第三步:重建建立表空间。在建立表空间的时候,可以采用关键字management local来说明要创建的是本地托管表空间。在重新创建表空间的时候,笔者有一个小小的建议。即在创建表空间之前,最好能够先分析一下数据段的大小。然后尽可能的巴一个单独的表空间分割成几个不同大小的盘区,以容纳不同大小的段。这可以有效的减少碎片,从后提高数据库的性能。虽然这个分析数据段的过程在这个转换过程中并不是必需的。但是这个过程本来就是为了提高数据库的性能,所以在这个过程中同时考虑数据段的大小,可以提到1加1大于2的效果。所以笔者还是非常推荐这么做的。
第四步:重新导入段。表空间建立好之后,再将刚才导出的段再导入到数据库中。这种重建的方法就相当于一开始采用的就是本地托管表空间。为此可以避免因为“字典托管”模式而造成的不兼容现象。也就是说,可以将本地托管模式的优势发挥到最有效的状况。
|
|