[转帖]优化工作中的取舍和大势判断

优化,工作,取舍,大势,判断 · 浏览次数 : 0

小编点评

**大势判断在优化项目中的作用** 大势判断是优化项目中一个重要的步骤,它可以帮助优化师在采取优化措施之前,先判断该措施是否适合进行。 * **方案取舍:**大势判断可以帮助优化师在优化方案的取舍中,避免选择不切合实际的方案。 * **阶段性终点:**大势判断可以帮助优化师在制定优化任务的阶段性终点,避免在优化过程中忽略重要步骤。 * **风险控制:**大势判断可以帮助优化师在判断是否要进行优化之前,先评估优化措施的风险。 * **资源分配:**大势判断可以帮助优化师在分配优化工作所需的资源时,避免资源不足或资源过载。

正文

最近这段时间在参与一个优化项目,所以思考优化的事情比较多。因此最近的文章中,优化相关的内容会比较多,如果有朋友想看些其他方面的题材,可以留言告知。实际上我每天写的东西大多数都是前一天的思想内容,凭空找个话题来写上一篇,时间长了肯定会越来越空洞无物,我也没有那个本事,脑子里的积累写上几年还游刃有余。
关于优化中的大势判断前些年我也写过一篇,优化就像下围棋一样,需要在大势判断正确的情况下,做出很多提前布局,确保每一步落子都能获得相关支撑。比如我们想降低数据库的IO延时,或者锁冲突,那么我们首先要看看CPU资源是否充足。因为一旦IO延时降低,锁冲突减少,势必会让系统的并发执行量大大提升。如果系统中的CPU资源已经不足,那么解决其他问题之后,CPU可能成为下一个堵点,甚至可能引发更为严重的性能危机。
几年前我参与过一个系统的优化工作,当时以为是个小优化,所以没有进行统筹考虑,发现什么问题就去解决什么问题了。最初发现应用服务器的线程池等配置存在问题,本地磁盘IO性能不行,导致临时文件写入堵塞。解决这个问题后,数据库服务器的IO延时又不行了。在分析过程中,优化团队发现AIX系统中的HDISK的QUEUE_DEPTH采用了默认值。AIX系统对于非IBM存储的QUEUE_DEPTH十分坑爹,对HDS默认是2,而大负载的IO下,这个队列深度至少要设置16,甚至32。
         
优化项目组调整了QUEUE_DEPTH,没想到第二天业务高峰的时候,系统总体性能不升反降。原来单块读延时还只有10几毫秒,优化后反而变成29毫秒了。
幸亏团队中有十分强的存储专家,经过这哥们的一通分析发现,这个存储配备了64个前端端口,属于超豪华配置,但是这些端口的使用十分不均衡,有些端口上分配了十几台甚至几十台数据库服务器,而有十多个端口根本就没有接入任何系统。这套数据库系统映射的两个端口上都连接了十多台服务器,端口控制器的CPU使用率接近100%,处于过于繁忙的状态。于是优化小组重新配置了存储端口,找到2个空闲的端口用于本系统。经过调整后系统性能得到了极大的提升。
事后我和参加这个优化的几个老哥们说,我们这帮子老家伙,把一个优化项目做成这样,说出去真的太丢脸了。于是大家都相约对外绝不提这个项目。事情过去了十年了,现在再提起这个项目,不知道还有人记得不。实际上在一个存在较为严重问题的系统中,排队效应的问题是肯定存在的。因此没有优秀的大势判断加持,这种项目很容易做出事情来。
排队效应是我在十多年前的《DBA优化日记》中自己创造的一个名词,正是排队效应的存在,在一些性能问题严重,系统资源存在短板的系统的优化中,缺乏大势判断很容易引发较大的运维故障。除此之外,大势判断还在两个优化工作中可以发挥作用。一个是方案的取舍,另外一个是确定优化工作的阶段性终点。
优化方案的取舍对于专家来说并不是个问题,但是对于很多半专业的优化团队来说十分关键。前几天一个客户问我一个问题,他们一套ERP系统的CURSOR争用很严重,共享池总出问题,分析下来是SQL没用绑定变量导致了硬解析过高,想启用CURSOR_SHARING参数。我分析了一下他们系统的整体情况,觉得不太妥当。因为这事一套ERP系统,用了快10年了,没做过归档,很多上百GB的大表也没有分区,总数据量也已经超过20TB,数据库版本也比较老,是Oracle 11.2.0.4。这种系统如果启用CURSOR_SHARING=FORCE或者SIMILAR,那么BIND PEEKING很可能出错,导致某些SQL的执行计划错误。这套系统高峰期的CPU使用率已经达到100%,LOAD超过500,一旦CPU爆掉了,那么可能带来比硬解析更大的问题。从大势判断上,我建议他们不要使用CURSOR_SHARING来解决这个问题,还是选择老老实实的优化应用。
在判断某个优化任务是否要做的时候,大势判断也也十分关键。优化方案制定的时候,我们总是会把可以进行优化的地方尽可能多的列出来。有些优化工作是比较好做的,有些并不容易,做起来成本很高。在优化项目进行到中后期的时候,我们就需要判断哪些工作该做,哪些工作可以不做。当大势判断确定优化任务可以圆满完成的时候,有些风险较大、效果不明确、优化难度较大的工作就可以暂时不去做了。在二十多年的优化生涯中,我也遇到过几次想十全十美,最后变成画蛇添足的事情。2012年的时候,我给一个客户优化一个营业系统。当我们的优化工作进行到第二阶段的时候,预期的LOAD下降30%的任务已经超额完成了,整个系统的LOAD已经下降了50%以上,当时我果断的决定优化项目告一段落,第三阶段的应用优化工作暂时不做了。事实上,这套系统后来又运行了3年,到新的软硬件替代它的时候,一直没有出过大的性能问题。
大势判断决定了优化工作中的取舍,取舍决定了优化工作的成败,不得不小心谨慎啊。

文章转载自白鳝的洞穴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

与[转帖]优化工作中的取舍和大势判断相似的内容:

[转帖]优化工作中的取舍和大势判断

最近这段时间在参与一个优化项目,所以思考优化的事情比较多。因此最近的文章中,优化相关的内容会比较多,如果有朋友想看些其他方面的题材,可以留言告知。实际上我每天写的东西大多数都是前一天的思想内容,凭空找个话题来写上一篇,时间长了肯定会越来越空洞无物,我也没有那个本事,脑子里的积累写上几年还游刃有余。关

[转帖]用了这18种方案,接口性能提高了100倍!

https://juejin.cn/post/7167153109158854687 前言 大家好,我是捡田螺的小男孩。 之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后 真枪实弹搞了一次接口性能优化,最后接口从11.3s降为170ms。本文将跟小伙伴们分

[转帖]如何优化Java垃圾回收机制简单讨论?

https://www.cnblogs.com/lizexiong/p/15594187.html 本文是成为Java GC专家系列文章的第三篇。在第一篇《成为JavaGC专家Part I — 深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,

[转帖]TiDB 查询优化及调优系列(三)慢查询诊断监控及排查

https://zhuanlan.zhihu.com/p/509984029 本章节介绍如何利用 TiDB 提供的系统监控诊断工具,对运行负载中的查询进行排查和诊断。除了 上一章节介绍的通过 EXPLAIN 语句来查看诊断查询计划问题 外,本章节主要会介绍通过 TiDB Slow Query 慢查询

[转帖]linux性能检测之sar详解

http://blog.51niux.com/?id=99 sar也是sysstat中的一员。 一、介绍 1.1 简介 sar是一个优秀的一般性能监视工具,它可以输出Linux所完成的几乎所有工作的数据。sar命令在sysetat rpm中提供。 sar可以显示CPU、运行队列、磁盘I/O、分页(交

[转帖]Linux 内核内存性能调优的一些笔记

https://my.oschina.net/u/6150560/blog/7759034 一、前言 在工作生活中,我们时常会遇到一些性能问题:比如手机用久了,在滑动窗口或点击 APP 时会出现页面反应慢、卡顿等情况;比如运行在某台服务器上进程的某些性能指标(影响用户体验的 PCT99 指标等)不达

[转帖]《Linux性能优化实战》笔记(20)—— 使用 tcpdump 和 Wireshark 分析网络流量

tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。 tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包。Wireshark 除了可以抓包,还提供了强大的图形界面和汇总分析工具,在分析复杂的网络情景时,尤为简单和实用。因而,在实际分

[转帖]Linux下AWK、SED、GREP、FIND命令详解

https://www.jianshu.com/p/d54e0359db01 AWK AWK是一个优良的文本处理工具,Linux和Unix环境中现有的功能最强大的数据处理引擎之一。 语法 awk [选项参数] 'script' var=value file(s) 或 awk [选项参数] -f sc

[转帖]用实力诠释细节!“Java性能调优六大工具”之JDK命令行工具

https://www.zhihu.com/people/javajia-gou-ji-zhu-44/posts JDK命令行工具 在JDK的开发包中,除了大家熟知的java.exe和javac.exe外,还有一系列辅助工具。这些辅助工具位于JDK安装目录下的bin目录中,可以帮助开发人员很好地解决

[转帖]《Linux性能优化实战》笔记(八)—— 内存是怎么工作的

一、 内存映射 我们通常所说的内存容量,指的是物理内存。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。那么,进程要访问内存时,该怎么办呢? Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以