我要投稿

合理选择盘区的管理方式 提高数据库的性能

时间:2010-03-28 21:14 作者:ceshi123 阅读:1561

扫描二维码关注公众号,可以查询淘宝、京东商品优惠券
  在Oracle数据库中表空间是由段组成的,而段又是由盘区所组成的。通常情况下,在大型数据库中,合理选择盘区的管理方式,能够在很大程度上提高数据库的性能,并减轻数据库管理员的工作量。笔者对此事深有感触。


  一、盘区的管理方式。

  在Oracle数据库中盘区主要有两种管理模式,分别为目录盘区管理方式和局部盘区管理方式。目录盘区管理方式是一种比较老的管理模式。在这种管理模式下,数据库系统会跟踪数据目录中的自由和已用盘区,并利用递归的SQL语句来修改相关的内容。这种盘区管理模式效率比较低,现在很版本的 Oracle数据库系统虽然还支持这种管理模式,但是不建议使用。为此笔者认为,除非你现在使用的Oracle数据库系统比较旧,只支持目录盘区管理模式。否则的话,还是采用另外一种管理模式为好。

  另外一种管理模式就叫做局部盘区管理模式。在这种工作模式下,主要通过位图来跟踪盘区,从而消除了递归SQL带来的效率低下的问题。在 Oracle10G以后的数据库系统中,都支持这种管理模式,而且是Oracle数据库推荐使用的管理方式。而这种管理方式,又可以分为Uniform与 Autoallocate两种。其中,Uniform是告诉数据库系统,利用相同的大小来分配和再分配盘区。此时数据库系统在分配盘区的时候都是以固定大小来分配对。而Autoallocate选项则是告诉数据库,根据实际情况来增量增加盘区的大小。如在Windows操作系统上部署Oracle数据库系统,其操作系统的块大小一般为8KB。此时数据库系统在初始化的时候,会为刚开始的几个盘区(一般为16个盘区)分配比较小的空间,如可能只有64KB。当这个段占用的空间超过这个容量后数据库会再为其分配盘区,不过此时分配盘区的大小可能会8MB。如果还不够还需要增加盘区的话,那么这个盘区的大小可能会达到64MB甚至更多。这种分配方式有什么好处呢?显而易见,当段中所含的数据量越大,由于后续分配对盘区比较大,为此这个段所含总的盘区数量在逐渐减少,从而易于管理。对数据库性能的提升也有很大的帮助。

  在选择采取哪种盘区管理方式时,笔者如下几个建议可供大家参考。

  一是一般情况下,局部盘区管理方式是数据库管理员的首选。除非为了跟以前的数据库兼容或者现在采用的数据库系统不支持这个局部管理方式。否则的话,笔者强烈建议采用这种盘区管理方式。

  二是在局部盘区管理方式下,有固定盘区与自动分配两种模式,此时该如何选择呢?一般来说,这要看段所在的表空间的类型。如果这个段所在的表空间是临时表空间的话,那么段下面的盘区采用Uniform为好。如果在数据库中,大表空间与小表空间共存的情况下,则采用自动分配模式比较好。因为自动分配的算法能够让小段持有小盘区,而让大段采用大盘区,以免数据库拥有太多的盘区。所以一般这种管理方式,常用在小段与大段共存的一种情况。这有助于提升数据库的性能。

  三是需要注意一些限制的情况。如对于撤销表空间来说,其是不能够使用局部盘区管理模式下的Uniform管理方式。另外,虽然局部盘区管理方式与目录盘区管理方式可以利用系统提供的存储过程进行轻松的转换。但是其转换仍然受到一定的限制。如一般情况下,数据库管理员可以将一个持久表空间的管理模式从目录盘区管理方式转换为局部盘区管理方式,或者说进行相反的转换。但是,对于系统表空间和临时表空间来说比较特殊,他们只能够从低到高进行转换,而不能够从高到低进行转换。即指能够将系统表空间或者临时表空间从目录管理模式转换为局部盘区管理方式,而不能够进行相反的转换。所以对于系统表空间与临时表空间来说,在部署之前需要考虑清楚到底采用什么盘区管理方式。如果选择局部盘区管理方式的话,那么是没有后悔药可吃的。因为这两个表空间不能够进行相反的转换。

  二、局部盘区管理方式下的段空间管理方法。

  笔者之所以推荐使用局部盘区管理方式,除了以上所谈的原因外,还有一个重要的因素。在局部盘区管理方时下,在段空间的管理方式下也可以作文章。如果采取了局部盘区管理方式的话,数据库管理员可以选择是用手工或者自动的段空间管理方式。

  手工管理段空间的方式,主要是为了向后兼容性而保留的。在这种管理方式下,需要用到三个新的名词,分别为自由块列表(可以用来存储数据的块)、 PCT_FREE(规定块中必须留有的剩余空间以便后续更新块中数据的需要)、PCT_USED(规定到块中的使用量达到多少时就不能够再存储数据)。这个手工管理方式的主要思路就是盘区中的块不能够全部存储,而需要留有一定的剩余空间。如此的话,如果这个块中的记录需要更改,如某个内容从10个字符更新到12个字符,那么更新后的纪录就还保存在同一个块中(因为需要更新的块还有一定的剩余空间),而不会分块保存。从而可以提高数据库的性能。在每个插入或者更新操作之后,数据库系统会比较这个数据块中的剩余自由空间与这个段的PCT_FREE设置,如果剩余空间已经不到这个值设置的时候,数据库系统就会把这个块从自由块列表中移除。如此的话,这个块以后就不能够再用来进行插入操作,虽然有可能剩余的空间还可以插入一条记录。一般情况下只能够进行更新的操作。然后再每次更新或者删除操作之后,数据库系统同样会检查块中的已用空间与PCT_USED参数进行比较。如果更新或者删除操作后,块的已用量低于这个参数设置的话,系统就会将这个块再放入到自由块列表中。后续系统可以对这个块进行插入、删除、更新等操作。这种是数据库系统默认的段空间管理方式。但是需要明白一点,默认的管理方式并不是说数据库推荐使用这种方式。相反,在Oracle10G以后的数据库系统中,Oracle官方推荐的是实用自动管理段空间的方式。而这里之所以要把手工管理设置为默认,主要是为了兼容性的考虑。

  如果采用自动管理方式的话,数据库系统使用位图而不是采用自由列来管理标识哪些数据块可用于插入操作,那些块不可用。也就是说,如果采用自动管理方式的话,以上设置的一些参数将会被忽略。不过起管理的思路跟上面的是相同的。在确定某个块是否可以被进行插入操作时,仍然会考虑到纪录的连续性,即会为块中数据的更新保留一定的空间。在自动管理方式下,数据库管理员不用费心的去考虑设置以上两个参数,数据库系统会根据实际情况自动进行调节。而这个控制的算法好比手工管理方式下复杂的多。所以采取字段管理段空间的方式,不仅可以减少数据库管理员的工作量,而且还可以提高数据库的性能。

  如果数据库管理员需要采用自动管理方式,那么需要注意以下几点。

  一是默认情况下,数据库采用的是手工管理段空间的方式,而不是自动管理段空间的方式。为此如果数据库管理员想使用自动管理段空间的模式时,必须要在建立表空间的时候进行明示。如可以通过如下的语句segment space management auto来告诉数据库系统采用自动管理表空间的方式。不过在采用这种段空间管理方式的时候,需要注意兼容性的问题。

  二是需要注意,某些表空间是不能够使用这种自动管理段空间的方是。如默认情况下,自动段空间管理方式下,不能够用户临时表空间与系统表空间。可见临时表空间、系统表空、撤销表空间在Oracle数据库中有一些比较特殊的限制。笔者在这里做一个小的总结。对于撤销表空间来说,不能够使用局部盘区管理模式下的autoallocate管理方式,即不能够采用可变的盘区管理方式。而对于临时表空间与系统表空间来说,他们不能够使用自动管理段空间的工作模式。而且在盘区管理方式上,只能够从低级向高级管理方式进行转换,而不能够进行相反的转换。所以在设置盘区与段空间管理方式的时候,这些限制需要引起数据库管理员的重视。

  不过总的来说,笔者推荐使用局部盘区管理方式。在这种方式下,笔者又推荐可变盘区管理方式(即autoallocate方式)。而对于段空间管理来说,笔者也建议数据库管理员为持久表空间(系统表空间除外)配制auto方式来管理段空间。
关键词: 系统 数据库 更新

最新评论

我要投稿 我要评论
插入url链接 添加表情
限 100000 字节
响应相关主管单位规定,关闭回帖发帖功能
[VB毕业设计] [ASP毕业设计] [JAVA毕业设计] [JSP毕业设计] [PHP毕业设计] [asp.net毕业设计] [.net毕业设计] [网络毕业设计] [Delphi毕业设计] [VC毕业设计] [VF毕业设计] [机械毕业设计] [工艺毕业设计] [模具毕业设计] [其他毕业设计]
站长联系 cccbbsnet#163.com 本站系公益性质网站,站内广告维系本站运作。欢迎赞助本站。
大学生计算机相关方向|软件编程|网络工程|web开发|数据库技术|学习资料等
本社区仅供学习计算机相关技术所使用,访客发言不得违反国家法律法规
Time now is:04-20 15:02, Gzip enabled 蜀ICP备07004838号Powered by cccbbs.net v7.5 SP3 Code © 2003-06 cccbbs
计算机毕业设计