随着数据库应用范围的扩大与硬盘价格的直线下降,现在在一台数据库服务器上放置多个硬盘对于企业来说已经不是很奢侈的事情。不过这对数据库管理员来说又提出了一个新的挑战。因为数据库管理员出于性能与安全的考虑,需要学会在硬盘之间分布关键数据文件。如需要把数据库系统的重做日志、归档日志与用来恢复的数据文件分开存放等等。笔者现在在维护一台数据库服务器,硬盘数量就达到4块。笔者就以这台数据库为例,跟各位分享一下如何在硬盘之间分布关键数据文件。
一、重做日志、归档日志与用来恢复的备份文件分开存放。
在Oracle数据库中有几个比较重要的文件,包括重做日志文件、归档日志文件、数据文件与用来恢复数据的备份文件等等。如果当数据库发生故障需要恢复数据的话,则需要用到备份文件与重做日志文件,有时候还需要用到归档日志文件。为此需要把这些文件跟数据库系统的数据文件分开来存放,如可以把它们存放在不同的硬盘上。如此的话,当存放数据文件的硬盘发生物理损坏时,也可以马上通过备份文件与重做日志文件进行恢复。
另外需要注意的是,用来存放备份文件的硬盘如果出现损坏的话,由于基本上不会影响数据库的正常运行,所以比较难以发现。但是此时数据库的备份就可能会发生错误,这对于后续数据库恢复具有致命的影响。为此数据库管理员还需要采取一定的策略,当备份作业失败时能够让数据库自动告知管理员。这可以最大限度的避免存储备份文件的硬盘损坏对后续数据还原造成的致命打击。
二、分开存储数据表文件与索引文件。
为了提升数据库性能,在硬件条件允许的情况下最好能够把存储文件与索引文件分开来存放,特别是某张数据表如果比较大,而用户访问的频率又比较高的话,则最好把这这张表与其对应的索引文件存放在不同的硬盘上,这对于提高数据库的性能有非常显著的效果。因为把数据和索引文件分别放置在不同的硬盘上,如此当表和索引被同时访问时(在Where条件中引用了索引列),数据库系统就不会访问同一个硬盘,而会同时访问两个硬盘。这就可以避免硬盘之间的争用。所以把经常需要访问的数据表与索引文件分开来存放,会给我们带来不少的惊喜。
另外,也可以把数据库系统中的一些关键数据文件分开来存放,可以有效避免硬盘争用给数据库性能带来的一个负面影响,可以解决硬盘瓶颈问题。一般来说表的连接方式会影响到数据库的性能,会增加硬盘争用的几率。但是若能够把经常需要的表与索引分开放置的话,即使表与表之间的连接方式不怎么合理,那么其负面影响也会大大的降低。因为此时不怎么会导致硬盘争用的现象。
三、增加硬盘以避免硬盘争用。
有时候在刚开始部署数据库系统的时候,可能没有想到利用多块硬盘来避免硬盘争用的现象。在数据库系统已经部署完毕的情况下,若需要增加硬盘的话,那该如何处理呢?是否需要重新部署数据库系统,还是只要简单的把需要分开存放的文件复制过去就可以了?
笔者认为,通常情况下如果数据库系统还是出于测试阶段,那么最好通过重新安装数据库系统,并在安装的过程中制定数据文件的存放位置来实现在不同的硬盘上存储关键数据文件。但是如果数据库现在已经在用了,那么通过这种方式的话就不怎么合理了。但是也不能够简单的把数据文件复制到其他硬盘上。在数据文件的迁移上,没有这么简单的事情。要在最短的时间内实现关键数据文件的迁移,最好能够按照以下的几个步骤来操作。
第一步首先于数据文件有关的表空间处于脱机状态。记得笔者以前在表空间的管理上,谈到过最好能够把不同用途的表放置在不同的表空间上。因为Oracle数据库中可以针对某个表空间进行只读、脱机等操作,而不影响其他表空间上的数据文件的应用。从而使得数据库的维护作业对于用户的正常数据访问的影响降低到最低。数据库管理员要在数据库正常联机的情况下迁移数据文件的话,就需要把设置跟需要迁移的数据文件有关的表空间脱机。
把数据文件复制到新的硬盘上,并且用新数据文件位置为表空间重命名数据文件。如果新上的硬盘跟原有的硬盘在性能上有差异的话,此时就有一个细节需要注意。即把什么文件保留在原来的硬盘上,而把什么文件移植到性能比较高的新硬盘中。把合适的文件迁移出去,这可以让移植后的数据库性能有更大的提升。如原先在硬盘中有重做日志文件与数据文件。现在需要出于安全与性能的考虑,需要把某个文件迁移到新的硬盘中。而新采用的硬盘性能比较好的情况下,那么最好把重做日志文件迁移出去。这会取得比较好的效果。
第三步把原先脱机的表空间重新启用即可。可见如果表空间设置的比较合理的话,那么在关键数据文件迁移的时候基本上不会对用户的访问造成负面影响。所以说表空间的规划与建立对于数据库的维护是非常重要的。因为在Oracle数据库中可以专门针对表空间来进行管理,如备份、联机脱机管理等等。其实一个表空间就好像是一个小的数据库一样,可以进行大部分的日常数据库维护工作。
一、确定工作繁忙的数据文件。
关键数据文件在不同的硬盘上分开放置到底能够取得数据库性能的多少提升,这主要是跟数据文件访问的繁忙程度有关。如在Oracle数据库中,总共部署由六个数据文件。其中四个数据文件比较繁忙,另外两个数据文件用户不怎么访问。此时数据库管理员如果把不怎么访问的数据文件迁移到其他硬盘上,那么对数据库性能的提升没有多少帮助。为此要提升这个效果,就需要评估一下,哪些数据文件用户访问的比较频繁,然后再有针对性的进行迁移。利用专业的术语来说,就是要确定数据文件上的I/O,将大量使用的数据文件移动到单独的硬盘上以分布I/O。
不过要确定哪个数据文件的使用频率比较高,有比较大的I/O,不是一件简单的事情。通常来说,可以从两个方面来评估数据文件的使用频率以及对应的I/O。
一是要靠数据库管理员的经验。往往所设计的数据库用途不同,其数据文件的使用频率以及对应的I/O有一个规律。如这个数据库系统对应的应用系统是一个决策管理系统,则其数据文件中数据表的更改不会很多,大部分是对视图文件的访问。但是如果数据库用于一些事务型管理系统的话,则刚好相反。如一个ERP系统需要用到Oracle数据库系统,则其相关的基础表插入、修改动作会比较频繁,如采购订单、销售订单等等都需要对这些基础表进行大量的访问。故与此对应的数据库文件访问的频率就会比较高。此时把这些文件与其它访问的比较少的文件分开来放置就能够起到不错的效果。另外即使在同一应用系统中,其模块不同,使用的频率也不同。如在一个ERP系统中,基本管理模块基本上不怎么使用,只有在系统初始化的时候需要用到。而对于库存管理、财务管理模块所对应的数据表访问频率就比较高了。为此在数据库规划的时候,可以考虑根据模块使用频率的不同,来规划数据表与表空间。可以把使用模块高的数据表与索引放置在不同的硬盘上;而把使用频率低的数据表与其对应的索引放置在相同的硬盘上。这主要是靠数据库管理员的经验。其设置的数据库案例越多,往往对这方面就会有比较深刻的直观印象。这对于其规划数据表与表空间的位置,具有很大的帮助。#p#分页标题#e#
二是通过数据库提供的工具。
如在数据库企业管理器中提供了一个数据库文件度量的工具。利用这个工具可以确定发生在每个数据库文件上的I/O。但是使用这个工具有一个缺陷,即其只有在数据库系统投入使用后才能够进行测量与评估。也就是说,不能够在数据库设计与部署的时候,就做好相关的规划工作。也就是说,在生产服务器上进行关键数据文件存放位置的调整,或多或少会对用户的数据库库访问产生不利的影响。而当数据库在正常使用过程中来进行调整的话,这对于数据库管理员的水平也提出了比较高的要求。因为此时不允许数据库管理员出现一点纰漏,否则的话很可能会对数据库中存储的数据造成破坏。所以虽然这种方式是可行的,但是笔者并不推荐这么做。