<b>磁盘排序影响Oracle数据库性能的罪魁祸首-性能调优</b>[Oracle防范]
本文“<b>磁盘排序影响Oracle数据库性能的罪魁祸首-性能调优</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
当成立同Oracle会话时,会在服务器内存中划分出一个专门用来排序的区域,从而为会话供应排序空间.但是,这个排序空间毕竟有限,若记录数目超越这个排序空间的话,就需求举行磁盘排序.但是,我们都知道,磁盘排序的履行速度要比内存排序的履行速度慢1400倍.并且,磁盘排序会损耗暂时表空间的资源,并且大概影响到正在举行的其他SQL排序,因为Oracle必须为暂时表空间中的数据块分配缓冲池.并且,过量的磁盘排序会招致闲暇缓冲等候,以及将履行其他任务的数据块从缓冲池中分页出去.关于数据库管理员来说,在内存中举行排序老是比磁盘排序更受欢送.所以说,磁盘排序是影响Oracle数据库性能的罪魁祸首.
在数据库优化的时刻,我们应当设法设法降低数据库的磁盘排序.为此,笔者有以下倡议.
1、公道设置Sort_area_size参数
固然说Oracle10G今后的数据库会自动对内存举行管理.但是,在一些性能要求对比高大概排序频率对比高的数据库中,仍旧有必要对一些影响内存分配的参数举行调整.此中,最重要的一个参数就是Sort_area_size.
Oracle数据库会为全部的链接Oracle会话分配Sort_area_size这个参数.所以,关于拥有大量用户的数据库来说,假如增添这个参数的值,会让磁盘排序的概率明显降低,不过数据库也要为此付出这个代价,很简单招致内存过载.但是,假如这个参数的值设置的太低的话,又会招致过量的磁盘排序.
所以,这个参数并非越大越好.因为这个参数假如设置的过大的话,其带来的性能收益反而会降低.因为为了提高有限几个查询的速度,大概会浪费大量的内存.这无疑是我们数据库管理员不但愿看到的.
在实际工作中,我们常常需求在二者之间举行一个均衡.设置一个公道的参数,尽大概让数据库削减磁盘排序的概率,同时也不能使得服务器内存过载.
为此笔者有一个倡议.数据库管理员应当每隔一段时间增添这个参数的值,并利用Statspack工具按时监控内存排序与磁盘排序的数据.在起先举行调整的时刻最好每个小时查询一次.通过这些数据,我们便可以得到一个公道的参数值,在两这之间获得一个均衡.
前期调整完成后,在后期仍旧需求举行监控.因为后期随着企业利用的改变,这个参数仍旧需求按照实际情形举行调整,以提高数据库的性能.
2、尽大概削减不必要的排序
在某些情形下,固然数据库管理员没有直接通过Order By等语句对数据库记录举行排序,但是Oracle数据库服务器仍旧会对查询后果举行排序.因为这些语句需求起作用,必必要先对数据举行排序.所以,他们常常带有隐性的排序功效.
我们在数据库保护大概前台利用程序计划的时刻,要尽大概的削减这种不必要的排序.如Distinct关键字,它的作用就是撤消反复的记录.但是,要实现这个目的的话,则数据库必必要先对记录举行排序,然后才可以去除反复的记录内容.故在计划的时刻,尽大概要避免利用Distinct关键字.其实,笔者在工作中,常常会碰到这种情形,某些记录其实不存在反复记录,但是程序开辟人员为了保障数据的精确性,就在SQL语句中加入了Distinct关键字,从而造成了不必要的排序.
别的,在其他一些情形下,也会招致不必要的排序.如排序归并衔接,也会招致不必要的排序.故无论什么时刻,只要利用了排序归并衔接,就会履行排序已衔接关键值.故在数据库与利用程序计划的时刻,要尽大概避免排序归并衔接.其实,在很多情形下,嵌套循环衔接反而使更好的挑选.因为这个嵌套循环衔接,它越发有效并且不会招致不必要的排序以及不比要的全表扫描.
其次,有时刻缺失索引也会招致一些并不要的排序.
故数据库管理员在平常的工作中,要尽大概的削减这些不必要的排序,以让贵重的内存资源交给更重要的任务来实用.
以上是“<b>磁盘排序影响Oracle数据库性能的罪魁祸首-性能调优</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |