相对于我们经常使用的Oracle优化技术,并行操作是一种很特殊的选择。恰当合理、有选择的对一些sql语句进行并行化处理,可以有针对性的提升系统一些关键业务场景的执行效率。但是,另一方面,如果使用并行过多过滥,甚至处处并行,那么可能引起服务器整体过载的现象。
那么,我们如何判断此时应该进行并行化处理?如何得知哪个时候可以使用并行呢?
1、影响并行因素分析
并行技术是一种软硬件综合技术。硬件方面的基础就是多cpu系统的普及和广泛应用,多磁盘IO负载分割。硬件方面的提升为并行技术的实现提供了物质上的基础,多个cpu可以真正的同时完成任务。软件方面的并行基础就是并行算法研究的成熟,一个任务如何分解,分解子任务如何进行沟通、合并等等。软件方面重新实现了一套算法体系,支持了系统并行计算的实现。
那么,我们的并行操作决策受到哪些因素作用和影响呢?
ü服务器cpu个数和运算能力
相对于如索引、聚簇表等逻辑优化手段,并行操作是一种硬件条件强依赖的优化手段。其中,cpu的个数是并行操作效果的决定因素。如果数据库服务器拥有多个cpu,那么采用并行操作的效果就会更好。反之,如果服务器只有一块cpu,设置的sql又要求一个很高的并行度指标,那么并行进程之间争用cpu的现象会很多,反而影响到并行整体性能。
作为企业级应用,部署的数据库服务器硬件条件应该是有一定水准的。随着多核cpu和多cpu服务器的普及,并行操作的硬件条件会慢慢不再成为瓶颈所在。
ü数据存储的分散性
通常情况下,Oracle服务进程Server Process获取一个数据块,首先是从高速缓存Buffer Cache中尝试获取对应的块。当没能寻找到数据块时,就直接从磁盘上将数据块获取到Buffer Cache中,之后再进行写入等操作。
但是,并行操作的方式却有所不同。并行操作是多个Process进程在访问相同的一批数据,如果全部按照Buffer Cache,后磁盘的顺序进行操作,很容易造成数据块争用和等待。所以,通常的并行操作都是直接针对磁盘上的数据文件进行读写。那么,如果我们的数据分散度较好,就可以很大程度上避免争用现象。
另一方面,数据库存储结构越来越独立化。专门的磁盘阵列机的出现,使得数据库IO能力提高。将数据文件分散在多个磁盘上,进行分散的IO操作和cpu运行操作,是一个发展方向。
ü特定sql考虑使用并行
并行操作通常不是我们的本能选择,也不会是我们的本能选择。因为并行操作本身涉及到的范围很广,包括软硬件的协调、数据库参数的调整。可以说,并行操作是一种需要特定支持、且不断调试的工程。作为一般情况下,我们尽量不选择将其作为首要优化目标。
只有对于其他优化策略效果不好,或者根本就没有其他解决方案的时候,考虑进行并行化操作。通常这样情境下的sql具有如下特点:
1、系统关键需求用例,没有回旋和妥协余地。通常是大作业或者报表操作,现有sql处理方式难以满足用户需求;
2、sql涉及数据表量巨大,响应时间不能接受;
3、对大数据量数据表或者索引的DDL操作;
这样类型的sql在OLTP系统中是不常见的,OLTP系统的侧重点一般都是高并发、小事务和快速响应。Oracle并行操作是在OLAP系统中广泛应用。当系统中出现了类似的问题和场景,可以考虑使用并行操作来提高系统整体相应。
ü主机存在资源盈余
通常情况下,生产环境的主机一般都不会做到满负荷应用。并行操作是强制性的获取到主机处理资源的一种手段,这样做的前提是主机还存在资源盈余。所以,在判断进行并行操作之前,要确定是否可能主机已经满负荷。
üsql已经过优化调整
在各种调优层次级别中,从业务层面、sql书写层面进行的调优是性价比最高的一种类型。一种业务思路的变化和优化,可以就消除了若干及其复杂连接扫描操作。所以,进行优化的首先是从sql本身的业务角度进行优化调整。
当sql本身没有调优空间时,而且其他技术不能解决本身的海量数据操作时,可以考虑使用并行操作。
2、项目开发中并行操作规划
注意,笔者在这里使用到了规划planning。的确,经过上面的介绍,并行操作是一种需要高级别关注的优化方案。笔者认为,可以从下面几个方面做到规划:
ü预先识别,密切关注分析
对一些关键用例中涉及到的关键sql,开发团队中的开发DBA要做到事先心中有数。适时和开发团队设计团队进行沟通交流,提出有益的意见,衡量使用并行操作的必要性和可行性。原则还是一样,能利用串行满足需求,就慎用并行。
ü集中规划,统一设置
并不是每个需求说需要并行化就进行并行化。我们说整个系统中,需要和能够进行并行化操作的场景是少数。开发DBA在接受到这样的需求之后,要根据投产环境的承受能力按照优先级进行实现。系统的并行承受能力不是无限的,尽可能满足更多的重要用例,获取更高的投入产出比是一个方向。
ü保持监控,随时调整
优化方案不是一成不变的,因为需求是在不断的变化、数据也在不断的演变,根据一时理解的优化方案可能也有需要变化更新的时候。这就要求存在一种优化方案跟踪机制,定期监控方案并行操作的执行情况和效率。随时发现和解决问题。
3、结论
并行操作的确立需要慎重,是一个不断重复、推敲和衡量的过程。