《Oracle数据库性能优化方法论和最佳实践》——1.5 测量和变化

1.5 测量和变化

1.5.1 测量和性能
没有测量就没有性能,任何科学都建立在可测量的基础之上。Oracle数据库和基于它的性能优化理所当然是一门科学,而不是一门艺术。科学的性能优化首先必须是可以建立测量的目标系统性能指标。一个无法测量的系统或者一个只能依赖于人的眼睛、耳朵等器官来进行感知的系统是无法进行性能优化的。为了完成性能优化,需要做大量的可测量性工作。幸运的是,Oracle对于可测量的性能付出了巨大的努力,使其性能相关的测量指标远远超出了其他数据库。
从性能优化的角度出发,可以从以下几方面来建立性能优化测量指标体系。
流程:指从发命令给数据库,到数据库返回我们需要的结果的整个业务处理流程。
资源:指在业务处理流程过程中需要使用的软硬件资源,比如CPU、内存等。
组件:在流程处理中涉及的处理单元,比如buffer cache等。
流程是业务用户可直接感受的性能指标,与人的感官感觉紧密相连,性能优化的根本目标就是使业务流程顺利运转。构建性能优化可测量体系的一个简便方法是从顶层目标出发,进行分解和推导,发现其测量因子之间的依赖性、相关性和影响性。在构建此体系的过程中,若把Oracle数据库及业务流程中涉及的所有组件和资源都作为一个设备或服务来看,则会有相当的便利,更具有真实性。
在业务流程中,当把资源和组件统一作为一个服务中心看待时,也可由此构造出统一的可测量指标体系,如下:
输入型指标;
输出型指标;
状态型指标。
通过上述测量指标一起作用构建出Oracle数据库的监控体系后,即可检测Oracle业务流程是否正常运转。除此之外,为了更快地完成性能优化,还应该力求在可测量指标之间建立关联,比如依赖性指标、相关性指标、影响性指标等。这样就可以通过指标相关性驱动最终发现真正导致性能变化的指标,并且采取措施纠正它。
再次查看吞吐量和响应时间的关系曲线,明显可以看到,响应时间是流程的输出结果,而吞吐量则是流程的输入元素。
下面来看一个简单的概念性示例。
假设系统业务为TPCC测试的订单业务,采用订单数量作为吞吐量输入指标。
吞吐量(输入型指标)=每分钟完成的订单数。
吞吐量(输入型指标)=(60/每个订单的响应时间)×并行处理会话
这里并不是在念绕口令,同一个指标采用不同的计算方式在性能优化分析中具有重大意义,它可以让你清晰地了解指标之间的关系,从而采取正确的优化方式。
根据上面变种的吞吐量公式,可以认为以下两个结论是正确的。
在并行处理会话确定的前提下,降低每个订单的响应时间可以提高吞吐量。
在每个订单的响应时间确定的情况下,增加并行处理会话可以提高吞吐量。
有足够经验的DBA都知道,上面的结论完全是理论推导。在实际的环境中,若遇到吞吐量下降的场景,且每个订单的响应时间延长,那么总是可以观察到并行会话的数量增加。甚至可以认为,在业务量变化不大的前提下,并行会话的增加必然意味着吞吐量的下降,而这正是订单的响应时间的延长导致并行处理会话增加而引起的。
在业务变化不大的前提下,从以上分析可以得出如下结论:
订单的响应时间延长会导致吞吐量下降。
订单的响应时间延长会导致并行处理会话增加。
并行处理会话的增加和吞吐量降低具有相关关系。
为什么要这样来描述?原因很简单,因为每个订单的响应时间是相对难以测量的指标,而并行处理会话极其容易被测量。
订单的响应时间 =订单的处理时间+订单的等待时间
对于订单的处理时间和订单的等待时间,Oracle都在系统级别做出了很好的测量。
假设图1-8所示的曲线图中那两个圆点是响应时间和吞吐量的最佳平衡点,且在这个平衡点上有服务时间和排队时间,当具体的订单运行点落到平衡点的右边或者上边的时候就意味着出现了性能问题。每次订单处理都由一系列的众多过程组成,每次订单的处理时间和排队时间自然也由一系列众多过程的处理之和构成,可以用以下公式来表达:
订单的处理时间=处理次数1×每次处理时间1 +处理次数2×每次处理时间2 + ……
订单的排队时间=排队次数1×每次排队时间1 + 排队次数2×每次排队时间2 + ……
当处理次数发生明显变化时,意味着业务特征或访问特征发生了变化。对于任何性能优化DBA来说,这都是一个与性能相关的直接要素。而对于每次处理时间,从Oracle数据库的描述中可以看到,服务处理是由CPU来执行的,正常情况下应该保持稳定,一旦其发生明显变化,就意味着CPU无法提供足够的能力。
排队次数同处理次数一样代表着业务特征或访问特征,排队时间则表示访问能力。应该说,Oracle数据库系统的性能优化工作者是极其幸运的,响应时间的分解几乎都可以直接或间接通过测量获得,这就使得Oracle数据库系统成为一个优化就绪的数据库系统。Oracle数据库不仅具有大量的状态型指标,还具有丰富的输入和输出指标。Oracle数据库不仅关系自身的零部件是否运行正常,而且关心业务操作和流程运行是否正常,也正因为如此,它使得所有这些东西都可以被直接或者间接测量。
在笔者看来,也许只有Oracle数据库才是性能优化就绪的数据库。
1.5.2 变化检测和性能优化
1.4节中有介绍,除了从来未达到性能期望的业务系统的优化工作未涉及变化以外,其他都会涉及变化。可以这么说,没有无缘无故的性能问题,任何性能问题都是由变化引起的,包括业务量的变化、访问量的变化、并发量的变化、数据量的变化、数据结构的变化、代码的变化等,任何交易都是建立在一定的上下文环境中的,当上下文环境发生变化的时候,其交易性能必然也发生变化。相信大部分人都明白,虽然知道性能问题是由于变化引起的,但关键是我们不知道哪些发生了变化,不能在性能出现问题的时候大声地质问:导致性能变异的变化给我站出来。大家知道,即使在现实生活中,某个人做了一些事情导致了严重的事件发生,他在多数情况下也会躲起来,甚至会故意混淆视听,告诉你是某某人做的,这也是我们这个世界需要警察的原因之一。
性能异常是由于某种或多种变化引起的,这个观点再怎么强调都不过分,甚至可以说本书就是围绕这个观点展开的。一旦确定了这个观点,性能优化的工作难度将大幅度下降,我们的任务也就变成了确定影响性能的因子。当性能异常的时候,只要检测这些性能因子的变化,就可以找到性能异常的原因,知道了原因就可以采取措施进行改善。幸运的是,Oracle数据库在这方面表现得如此出色,它提供了大量的性能检测因子,并且提供了不同时间度量的检测手段,使Oracle数据库的性能优化工作显得比较轻松。在后续的章节中,将陆续涉及这些性能检测因子,本书主要围绕这些性能检测因子来进行性能问题的诊断和优化。
1.5.3 量变和质变
在这个世界,只有变化是永恒的。在强调变化引起性能异常的观点时,我们也必须认识到,并不是任何变化都会引起性能异常,量变引起质变是一个朴素的变化观点,也完全适用于性能优化,只有变化积累到一定程度之后才会引起性能异常。
回头看看图1-1会发现,响应时间只有在达到一定的压力突变点之后才会发生变异。
任何人和设备、任何资源都有其处理能力的上限,当然也包括数据库,某些设备或某些资源还有一些突变点,当达到或即将达到处理能力的上限(或突变点)时,就会发生性能异常。
列举两个例子来看看个体的变化会引起什么样的局部变化,如下:
表格的数据增加,会使得全表扫描的响应时间随之线性增加。
索引的数据持续增加,使得唯一索引分类的层数增加,进而提高访问成本。比如从2层索引树增加为3层索引树,那么唯一索引访问的成本将增加50%,响应时间将增加50%。
再来看看个体变化给全局带来的影响,以表格数据增加10%的全表扫描为例。
变化之前业务访问时间为1s,可以接受的访问时间为2s,完全在服务质量保证范围之内。变化之后的业务访问时间为1 + 1×10% = 1.1s,仍然在服务质量保障范围之内。也就是从个体来说,完全没有问题,但是从全局来说,可能就会带来全局业务的性能急剧恶化。假设在变化之前有4个相同业务在部分时间会交叠执行,大致会消耗大约400Mb/s的I/O吞吐量带宽,基本使I/O子系统处于临界状态。当每个业务的访问时间从1s延迟到1.1s时,就有可能会导致5个甚至6个相同的业务在部分时段交叠执行,而这又会导致超过I/O子系统的服务能力,从而使其响应时间大幅度增加。这时,业务访问最终得到的也许并不是可以接受的1.1s,而是完全不可接受的5s甚至10s的响应时间。

时间: 2024-08-03 05:46:18

《Oracle数据库性能优化方法论和最佳实践》——1.5 测量和变化的相关文章

《Oracle数据库性能优化方法论和最佳实践》——第2章 Oracle性能优化方法论的发展 2.1 基于局部命中率分析的优化方法论

第2章 Oracle性能优化方法论的发展 Oracle数据库在开发和使用过程中对数据库的性能优化极为重视,几乎在每个版本的更新中都会对可优化的数据库做出改善.不仅如此,Oracle数据库还会使用优化方法来指导性能优化,会不断推出新的性能优化方法论,并依据优化方法论持续完善其可观察的性能优化体系.从Oracle 6到现在的Oracle 12c,经历了Oracle 7.Oracle 8.Oracle 8i.Oracle 9i & R2.Oracle 10gR1 & R2.Oracle 11gR

《Oracle数据库性能优化方法论和最佳实践》——第1章 Oracle性能优化漫谈 1.1 从生活场景漫谈性能优化

第1章Oracle性能优化漫谈 1.1 从生活场景漫谈性能优化 Oracle数据库性能优化一直是一个让人既胆怯又兴奋的话题,在初级DBA眼里,这是一个神秘的领域,即使是资深的Oracle DBA,也可能无法描述清楚性能优化究竟要做什么,应达成什么目标.那么性能优化究竟是做什么的呢?简而言之,性能优化就是让我们的工作速度变快,快到让我们满意为止.自然,又有读者会问了,我们的工作是什么呢?什么程度才算快,是否可以衡量?看,头疼的问题又来了.1.1.1 从一个真实病例说起 下面是本人的真实经历,也许很

《Oracle数据库性能优化方法论和最佳实践》——2.3 响应时间分析优化方法论

2.3 响应时间分析优化方法论 2.3.1 RTA方法论简述 响应时间分析(Response Time Analyze,RTA)的性能优化方法论是基于OWI的性能优化方法论发展起来的,标志着Oracle开始认识到Oracle性能优化其实就是一个流程改善的过程(减少响应时间),首次在性能优化上跳出了IT设备的观点,从业务流程优化的角度来考虑问题.在任何场合下,流程改善或者性能优化最为适当的方法就是RTA. Oracle从9.2版本开始提供RTA,在Oracle 10g中进行了进一步的完善.RTA优

《Oracle数据库性能优化方法论和最佳实践》——2.6 流程、资源和组件优化方法论

2.6 流程.资源和组件优化方法论 流程.资源和组件优化方法论是本书几位作者综合多年性能优化方法论实践提出的最新的Oracle业务系统性能优化方法论.流程.资源和组件优化方法论以流程响应分析为核心,辅助以流程处理的组件和涉及的资源分析,发现导致性能问题的根本原因,并采取适当的手段进行性能改善.本书从流程.资源和组件优化方法论出发,全面构建性能优化的可测量体系,并通过大量的性能优化实践案例来验证方法论的有效性.2.6.1 吞吐量和响应时间关系曲线 吞吐量和响应时间关系曲线是流程.资源和组件优化方法

《Oracle数据库性能优化方法论和最佳实践》——1.3 吞吐量和响应时间

1.3 吞吐量和响应时间 吞吐量和响应时间是衡量Oracle业务系统的基本指标,也是业务系统性能的终极指标.如何选择恰当的指标单元来描述吞吐量和响应时间,并且熟练运用吞吐量和响应时间之间的关系是性能优化工作者最为重要的学习和实践.吞吐量和响应时间的关系曲线如此重要,以至于本书几乎所有的章节都是为了帮助大家更好地选择恰当的吞吐量指标,以及更好地理解吞吐量和响应时间的关系曲线.Oracle虽然从Oracle 10gR1就开始提供Time Based Analyze(TBA)性能优化分析方法论,但显然

《Oracle数据库性能优化方法论和最佳实践》——2.5 基于资源瓶颈分析的优化方法论

2.5 基于资源瓶颈分析的优化方法论 2.5.1 基于资源瓶颈分析优化方法论简述 Oracle要做优化,大部分人首先会想到瓶颈在哪里?资源瓶颈分析是如此之普及,以至于无论懂还是不懂的人都知道"瓶颈"这个术语,都知道性能优化首先要找到这个瓶颈,然后消除这个瓶颈.数据库系统的资源主要包括:CPU.内存和虚拟内存.I/O子系统.网络子系统. 绝大部分开发人员在写程序的时候都假设资源是无限的,CPU是无限快,内存是无限多,磁盘无限大并且像内存一样快,网络带宽无限并且像光速一样运行.事实上,大家

《Oracle数据库性能优化方法论和最佳实践》——1.7 Oracle性能优化的神话和误区

1.7 Oracle性能优化的神话和误区 Oracle性能优化工作是Oracle数据库科学最为神秘莫测的领域,自然也就会流传着各种传言和八卦.本书最主要的目的就是真正使Oracle性能优化成为一门严谨的科学,使任何阅读并且理解本书内容的读者可以比较简单地完成Oracle性能优化工作,使自己在其他人面前成为"巫师"或"神秘的对象".1.7.1 艺术和科学 从百度.Google等网站搜索"性能优化艺术",会出现大量的条目,部分Oracle性能优化的图

《Oracle数据库性能优化方法论和最佳实践》——1.4 Oracle性能优化工作的分类

1.4 Oracle性能优化工作的分类 在Oracle上进行性能优化时,不同场景下的优化工作方法和内容有很大的不同.下面从实践角度来展开优化工作的分类.1.4.1 上线优化或从未达到过性能期望的系统优化如果业务系统未进行充分的性能测试就上线,那么有相当一部分会出现性能问题,不会出现性能问题的系统往往建立在有强大硬件的基础之上.这类缺乏性能设计考虑的业务系统部分或全部具有以下特点.开发人员(业务系统)假设资源是无限的,可以任意使用,忘记了任何系统都是在一个资源受限的系统中运行业务.开发人员(业务系

《Oracle数据库性能优化方法论和最佳实践》——2.4 基于工作单元的响应时间分析优化方法论

2.4 基于工作单元的响应时间分析优化方法论 2.4.1 UOWTBA优化方法论的导入在RTA工作方法论的基础上,Craig Shallahamer结合吞吐量和响应时间关系曲线图提出了基于工作单元的响应时间分析方法论(Unit of Work Time Based Analyze,UOWTBA或者Unit of Response Time Analyze,UOWRTA).UOWTBA方法论相较于RTA方法论而言,在强调响应时间时,同等强调了吞吐量的重要性,它通过衡量操作单元的响应时间而不是绝对时