热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

本节书摘来自华章计算机《Oracle数据库性能优化方法论和最佳实践》一书中的第1章,第1.4节,作者:柳遵梁潘敏君应以峰著࿰

本节书摘来自华章计算机《Oracle数据库性能优化方法论和最佳实践》一书中的第1章,第1.4节,作者:柳遵梁 潘敏君 应以峰著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.4 Oracle性能优化工作的分类

在Oracle上进行性能优化时,不同场景下的优化工作方法和内容有很大的不同。下面从实践角度来展开优化工作的分类。
1.4.1 上线优化或从未达到过性能期望的系统优化
如果业务系统未进行充分的性能测试就上线,那么有相当一部分会出现性能问题,不会出现性能问题的系统往往建立在有强大硬件的基础之上。这类缺乏性能设计考虑的业务系统部分或全部具有以下特点。
开发人员(业务系统)假设资源是无限的,可以任意使用,忘记了任何系统都是在一个资源受限的系统中运行业务。
开发人员(业务系统)认为只有我一个人在做事,忘记了同时会有很多人在使用,缺乏并发性方面的考虑。
开发人员(业务系统)认为程序在任何时候的处理效率都是一样的,不应该出现大的波动,不应该出现异常。
各种任务调度频率远远超过业务实际需要。
SQL语句消耗了无限的资源。
无法充分利用资源,缺乏并行处理或异步处理的能力。
缺乏有效的索引设计,业务系统并发能力低下。
具有很长的同步处理链条,性能表现极其脆弱。
运行在默认的完全不匹配物理资源的数据库上。
上线优化的场景有些比较简单,有些会很复杂。也许你的运气足够好,仅仅是简单的数据库配置问题或操作系统配置问题,这在DBA力量比较弱的开发商中存在。更多时候,你遇到的会是索引优化问题或SQL优化问题,当然,只要你愿意付出精力,总能完成这类任务。如果你运气不好,遇到除此之外的复杂性能优化问题,就需要你拥有更多的知识和经验,以及更好的协调和沟通能力了。
1.4.2 响应速度逐步变慢的系统优化
在业务正常运行了一段时间或很长时间之后,可能会感觉到业务系统在渐渐地变慢,甚至到了不可忍受的地步,而这是Oracle数据库,或者不仅是它,也是任何IT设备、任何提供服务的物品以及生命体(包括人动物和植物)都会体现出的特征。这时我们需要对其进行保养、修理或优化。一般来说,这类系统具有以下部分或者全部的特征:
随着时间的推移,数据量渐渐变大,而业务系统和数据量具有比较强的线性关系设计。
随着时间的推移,业务在发展,公司在变大,而业务系统和业务及资源具有较强的线性关系。
随着时间的推移,访问量在增大,而业务系统在并发性上的设计考虑不够。
随着时间的推移,数据不断被分享使用,不同业务之间出现并发性和资源上的碰撞。
当然,可能还存在其他的时间堆积,但是主要为以上变化度量。既然业务系统性能是一个逐渐变化的过程,那么只要记录相关指标的长时间关系,自然就可以知道为什么性能会变差,甚至可以简单掌握哪些因子的线性关系比较重大,进而可以通过打破这个线性关系或降低线性斜率来进行性能优化,使业务系统恢复正常运行。
1.4.3 运行过程中突然变慢的系统优化
在Oracle中,除了系统bug外,没有无缘无故的性能问题。即使是Oracle bug,也是因为变化引起了bug而被触发。对这类问题的优化相对比较简单,只要简单检测突然变化即可。即使不知道为什么,只要把变化恢复原状,一般业务系统就可以恢复。当然,对于这类业务系统的性能故障,用户的紧迫度也往往比较高。
应急性性能优化是日常运行中针对业务系统的最为常见的优化工作,类似于故障处理场景。由于OWI方法所具有的实时针对性,所以它在这类优化中被广泛利用,并且效果良好。只要日常收集关键指标及版本变化,通常都能较为快速地完成应急性优化。
从变化的角度来看,一般存在以下几种情况。
新的业务模块上线或进行了补丁修复。
SQL语句执行计划发生变化。
DDL操作导致SQL依赖对象发生变化。
意外的配置变化。
依赖资源发生故障或性能降低,导致吞吐量下跌。
执行了某个意外操作。
某关键进程挂住或死掉。
1.4.4 突然变慢,持续一段时间后又恢复正常的业务系统优化
本书介绍的发生的现象虽然与1.4.3节介绍的类似,但其形成原因往往不同。这种业务系统性能降低的场景通常是周期性发作,维持时间从几秒、几分到几小时不等。一般来说,发生原因为应用系统无法度过业务高峰期,达到了吞吐量限制。
针对达到吞吐量限制的业务性能进行优化时,优化者需要通晓吞吐量与响应时间的关系曲线,了解各种资源的最大吞吐量或能力限制。扩容往往是针对吞吐量限制型优化最为直接的建议,但由于涉及额外投资且需要持续较长时间,因此性能优化者必须有充分的理由来支持扩容,并且要100%保证扩容后可以满足业务性能的要求。扩容是通过扩展资源来支持更高的吞吐量突变点,从而完成业务性能的改善。与扩容相对应的另一种方式自然是更加有效地利用资源:降低单位操作数量或降低单位操作消耗的资源。
1.4.5 基于降低资源消耗的系统优化
事实上,当针对实际的业务系统进行性能优化时,你会发现有相当一部分并未观察到明显的吞吐量或未观察到响应时间的异常,而仅仅是资源消耗达到了非预期值。对于这类问题,可用于优化的时间会相对充裕,优化操作也比较简单,只要简单分析特定资源的影响因子,并从大到小进行排序,逐步优化或只优化影响大的影响因子即可。
1.4.6 预防性日常性能优化
基于降低资源消耗的系统优化应该是预防性日常性能优化的一个变种。预防性日常性能优化依赖于日常监测的性能因子,当这些性能因子达到预先设定的警戒值时就会进行优化,使其回归到正常范围或减缓其增加速度。想要保证一个系统始终保持高性能的运行,预防性的日常性能优化是关键因子,甚至比一种性能设计还重要。作为一个性能优化工作者或运维DBA来说,虽然业务系统的性能设计不由他控制,但是尽可能地延缓业务系统性能问题的来临是完全可以的。
预防性优化的作用主要在于:首先,延缓业务系统的硬件扩容,延迟资金投入;其次,可以使用户对未来性能预期有一定的明确性,从而可以合理安排扩容采购窗口,避免业务系统出现性能问题,提高服务质量。而缺乏预防性优化意识往往意味着一段时间内糟糕的业务系统性能表现以及硬件扩容的紧急采购。若业务系统预防性的日常性能优化做到位,则具备图1-8所示的特征,再次回到吞吐量和响应时间曲线。
screenshot

预防性性能优化的目的在于不断延缓突变点,使其后移,如图1-8中使突变点从1100左右转移到1380左右,使业务系统可以支持的最大吞吐量不断增加。虽然任何硬件平台和软件平台都会有其自身的吞吐量限制,但预防性维护可通过延迟硬件采购来节省大量的金钱,真正体现出性能优化的价值。
下面来做一个简单的计算。
一个价值500万元的硬件平台,假设将其扩容要求延迟了一年的时间,因此节约了100万元,这代表我们并不是仅仅多获得了1年时间的100万现金使用权,更重要的是这一年时间里硬件的价格会快速下跌,相比1年前,100万元具有更高的使用价值。特别是如果到了知识产权严格保护的年代,硬件的扩容往往意味着软件License授权费用的大幅度增加,这时预防性性能优化的价值几乎是不可估量的。



推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • soatest新建db工具,执行sql语句的步骤和注意事项
    本文介绍了在soatest中新建db工具并执行sql语句的步骤和注意事项,包括设置数据库连接参数、使用配置文件的方法编写sql查询语句、增加oracle驱动连接jar包、运行测试用例以及查看查询结果。详细说明了每个步骤的操作和相关注意事项。 ... [详细]
author-avatar
鱼mm不会游泳456
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有