在公路建设中,通过建立多条车道可以提高道路的流量。其实这个道理在Oracle数据库中也行得通。即可以将关键数据文件存储在多块硬盘上,以提高Oracle数据库的性能。可惜的是,不少数据库管理员没有意识到这一点。在这篇文章中笔者就以Oracle11G为例,说明如何通过在硬盘之间分布关键数据文件来提高性能。
一、在硬盘之间分布关键数据文件的基本原则。
在传统的文件系统上(即不是在裸机上)部署Oracle数据库,可以通过将关键的数据文件分布到多个可用的文件系统上或者不同的硬盘上来提高数据库的性能。具体的来说,需要遵循如下几个原则。
一是对于表来说,往往包含两个部分,即基本表与索引表。只要为基本表中的字段创建了索引,其对应的就有一张索引表。当用户访问表中的数据时,应用系统需要同时访问到索引表与数据表。此时我们可以将这两张表比喻成两辆车。如果现在只有一个车道(即将他们同时存放在一个硬盘或者文件系统中),那么两辆车必须前后行使。而如果现在有两个车道(即将基本表与其相对应的索引表存放在不同的硬盘或者文件系统中),那么这两辆车就可以并排行使。显然,后者的效率更高。为此笔者建议,可将经常需要访问的表和与之对应的索引表分开来存放。
二是可以将日志文件也分开来存放。不光光是数据表与索引表存在着这种状况。其实在日志文件管理中也是如此。只要条件允许,那么最好能够将联机重做日志和归档日志与其它数据文件存放在不同的硬盘或者文件系统上。因为当用户往数据库中写入数据时,需要同时往数据文件与重做日志文件中写入数据。此时如果将它们分开来存放,那么就相当于有了多条车道,分别往不同的文件中写入数据。这无疑就可以提高数据写入的效率,从而提高数据库的性能。
二、哪些文件最好能够分开存放?
在讲到硬盘之间分布关键数据文件的基本原则的时候,笔者举了几个需要分开存放的几个案例。但是在实际工作中,并不仅仅局限于上面提到的这些文件。笔者认为,如果条件允许的话,那么可以考虑将如下文件放置在不同的硬盘上。
一是表空间,如临时表空间、系统表空间、UNDO表空间等等。这三个表空间可能系统会同时进行访问。为此需要将其分开来存放。二是数据文件和索引文件。上面提到过,需要将经常访问的数据文件与其对应的索引文件存放在不同的硬盘上。因为这两类文件在访问数据时也可能会同时访问到。三是操作系统盘与数据库文件单独存放。显然Oracle系统肯定是与操作系统同时运行的。为了避免他们之间的I/Q冲突,就需要将Oracle部署在操作系统盘以外的磁盘上。四是联机重做日志文件。这个文件比较复杂,不但要将其与其他文件分开来存放。而且还需要注意的是,最好能够将其存放在性能最佳的硬盘上。
最后需要说明的一点是,增加磁盘也会增加成本。这不光光是购买磁盘所需要的花费,还包括管理的成本。所以这之间也会涉及到成本与性能之间的一个均衡问题。如果企业的数据不是很多,或者主要是涉及到查询操作,那么这么设计的话,就可能不怎么合理。因为投入要大于回报。
三、如何确定是否需要将文件分开来存放?
在实际工作中,企业的数据是一个从少到多的过程。也就是说,刚开始使用数据库的时候,可能数据量比较少,此时出于成本的考虑,没有将相关文件存放在不同的磁盘上。但是随着工作的深入,用户会发现数据库的性能在逐渐的降低。此时管理员就需要考虑,能够采取这种多建车道的措施,来提高数据库性能。当然在采取这个措施之前,管理员需要先进性评估。此时评估所需要用到的一个指标就是磁盘的I/O争用。
磁盘争用通常发生在有多个进程试图同时访问一个物理磁盘的情况下。如现在用户需要访问某个数据表中的数据,此时系统需要访问索引文件与数据表文件。如果将它们放置在同一磁盘上,那么在访问时就会发生I/O冲突。所以评估I/O冲突的严重程度,可以帮我们来确定是否需要将关键文件存放在不同的磁盘上。
将I/O平均的分布到多个可用的磁盘上,这可以有效的减少磁盘之间的争用情况,提高数据存储与读取的性能。从而提高Oracle等应用程序的效率。在实际工作中,数据库控制文件中有两个参数可以用来帮助我们评估这个指标。这两个参数是文件平均读取时间和文件平均写入时间。不过在使用这两个参数的时候,其只评估所有与数据库相关联的文件。管理员如果有需要的话,也可以通过下面的查询语句来查询数据文件是否存在I/O问题。查询的语法与结果如下图所示:
从如上的查询结果中可以看出某个数据文件是否繁忙,数据文件之间是否存在着/I/O冲突文件。这里需要注意的是,这个结果是一个动态的结果。在不同的时刻、用户进行不同的操作时往往会得出不同的结论。为此笔者建议,在使用这个数据的时候,最好能够多跟踪几次。然后分析多次运行的结果。只有如此,才能够得到比较合乎情理的判断。
通常情况下,管理员根据上面的结果可以得出三种结论。
第一种结论是上面这些数据文件都不是很忙。即文件的平均读取时间与写入时间都比较短,表示这两个文件都是比较空闲的。此时正常情况下,数据库的性能应该是不错的。也就是说,如果此时数据库的性能不理想的话,那么就不是磁盘的I/O所造成的。管理员应该从其他角度来改善数据库的性能。
第二种结论是每个数据库文件都非常的繁忙。此时有可能是读取时间或者写入时间比较长,或者说两个时间都比较长。当多个数据文件同时比较繁忙并且他们处于同一磁盘的话,那么管理员就需要考虑购买新的磁盘,然后将上面提到的这些关键文件重新整理,让他们部署在不同的磁盘上。
第三种结论是某几个特定的数据文件比较繁忙,而其他数据文件还可以。此时管理员如果成本受到限制,那么也不需要重新购买硬盘。在磁盘上的物理写入和读取次数上如果出现比较大的差异,就表明某个磁盘负载过大,即有很严重的I/O冲突。此时最好能够将这个磁盘中的文件进行调整,如将某些文件移动到另外的一块I/O相对不怎么严重的磁盘上。不过在采取这个操作的时候,需要注意一点。对于联机重做日志文件来说,即使其所在的磁盘I/O冲突比较低,或者访问这个文件的时间比较短,但是也不建议将其他数据文件转移到其所在的磁盘上来。因为通常情况下,为了保障数据库的性能,我们都建议将联机重做日志文件单独存放,并且还需要讲起放置在性能比较高的硬盘上。
总之,将关键的Oracle数据库文件分开放置。如此的话可以有效避免磁盘争用成为Oracle数据库系统的性能瓶颈。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
如何为你的数据库事务日志减肥?
在大多数SQL Server的工作环境中,尤其是在OLTP环境中,数据库的事务日志性能出现瓶颈时往往会导致事务完成需要更多的时间。
-
当选择Oracle数据库时 我们选的是什么?
在选购Oracle数据库时很多企业并不知道,真正实现高可靠、高性能以及高安全的并不只是一个Oracle数据库这么简单,而是围绕它的一系列Oracle数据库选件。
-
解决Oracle数据库性能瓶颈问题
识别瓶颈并提出合适的处理方案来规避它们。我们面临的调整在于要知道检查哪里,并知道如何解读监控数据。
-
SQL Server调优:“tablediff ”命令行工具
“tablediff ”工具支持你比较两个表的内容。它原先开发出来是为了复制场景,来帮助诊断差异的,但是它对其它情况也非常有用。