Oracle数据库性能优化方法论和最佳实践
上QQ阅读APP看书,第一时间看更新

2.6.2 流程和流程响应分析

基本上,可以把所有的业务都表述为流程,业务系统性能优化本质上是一个流程改善的过程。任何流程改善的目标或者是提高效率或者是降低成本,其中,提高效率和降低成本在大多数情况下趋于一致,只是流程改善的目的不同。任何业务系统的性能衡量都表述为以下两点。

❑ 在可接受响应时间范围内提高吞吐量。

❑ 缩短响应时间或者加快响应。

任意的流程必然包含输入压力和输出响应,业务系统的性能衡量指标实际上就是表述为流程的输入压力和输出响应,是流程的自然描述。或者说,从流程角度出发看待性能问题就是性能优化分析的自顶向下的分析方法。

我们把业务在Oracle数据库的处理过程视同流程,性能优化的过程就是一个流程优化和改善的过程。在任何时候,流程分解分析和时间响应分析都是流程优化和改善的基本工作方法。下面对流程、流程分解、流程优化和流程影响进行简要描述。

❑ 流程:为了完成一定的目标,按照时间次序处理的过程。流程包含输入项和输出项。

❑ 流程分解:每个流程都是一系列的子流程,通过流程分解可以把流程逐步细化,直至不可分解为止。流程分解可以帮助我们发现流程响应的问题主要发生在哪个子流程上,从而使我们把焦点聚焦在对应的子流程上。

❑ 流程优化:通过时间响应分析发现流程的问题,通过流程分解进行精细定位,通过涉及的资源和组件影响分析、改善流程使之更有效率或者成本更低。

❑ 流程影响:流程和流程之间存在相互影响的因素,其效率并不是线性增长,而是存在一个影响因子。

显然,满足时间顺序执行和具有匹配效率的流程才可能具有良好的性能,业务流程的整体响应能力是由响应能力最弱的子流程决定的。

Oracle数据库业务主要分为以下三大流程。

❑ 数据库登录流程:客户端通过数据库账户登录数据库的过程,表述为数据库登录流程。

❑ 数据库业务处理流程:客户端发起SQL执行申请,通过一系列处理并返回处理结果给客户端的过程,表述为数据库业务处理流程。SQL处理流程是数据库业务流程的基本构成单元,数据库业务处理流程是SQL处理流程的时间序列构成。

❑ 混合流程:流程处理中包含数据库登录流程和数据库业务处理流程,主要作用在Database Link环境中,其他需要通过连接数据库来达成一次业务响应的业务流程也表述为混合流程。由于混合流程只是两个不同流程的时间次序叠加,所以我们不对混合流程进行独立的描述和处理。

1. 数据库登录流程

数据库登录流程一般包含以下处理过程。

Step1:Client发起登录握手。

Step2:握手指令以及相关信息传输。

Step3:listener验证阶段。

Step4:服务进程和session派生阶段。

Step5:用户验证和权限生成阶段。

Step6:session审计阶段。

Step7:登录触发器阶段。

Step8:响应客户端返回阶段。

为了简化处理,我们把数据库登录流程缩减为以下处理过程。

Step1:客户端登录请求。

Step2:listener处理和响应。

Step3:服务进程派生和session生成。

Step4:用户验证和权限判断。

Step5:session审计。

Step6:登录触发器。

Step7:响应客户端。

为了衡量数据库登录流程,需要了解在大流程和子流程之上的输入吞吐量压力指标和输出响应时间指标,后面第3章将会构建数据库登录流程涉及的可检测性能指标。

2. 数据库业务处理流程

数据库业务处理流程的基础单元为SQL处理流程,SQL处理流程符合大多数形态的流程形式,包含业务申请、计划分析和指定、计划执行和响应。具体包含以下过程。

Step1:客户端发起语句执行申请。

Step2:指令传输。

Step3:应用服务器处理阶段。

Step4:指令传输到数据库。

Step5:分析指令并生成执行计划。

Step6:执行生成的执行计划。

Step7:一次或者多次响应结果传给应用服务器。

Step8:应用服务器返回响应给客户端。

commit或者rollback作为特殊的SQL语句,我们把它作为SQL处理中的一个特殊阶段,表述为提交阶段。

数据库业务处理流程就是SQL语句执行流程的时间序列,由一条或者多条SQL语句构成。

3. 流程分析的基本工作方法:UOWTBA

UOWTBA优化方法是流程性能分析的基本工作方法,通过对流程以及子流程的吞吐量和响应时间分析,确认性能问题是发生在子流程还是发生在全局流程中。基本工作方法如下。

Step1:判断出现性能变异的流程。

Step2:使用UOWTBA方法分析每个流程和子流程的输入吞吐量和输出响应时间。

Step3:判断是输入吞吐量变异还是输出响应时间变异或者两者都变异。

Step4:发现出现问题的是流程还是子流程。

Step5:如果输入吞吐量变异,则考虑降低输入压力吞吐量。

Step6:如果输出响应时间变异,则进一步分解服务时间和等待时间。

Step7:综合判断导致输出响应时间增加的可能因素,大部分是资源问题。