在尝试对一个系统进行优化的时候,一般分为两个创造性步骤,一个是在脑海中进行构思并创造出思维蓝图,第二个创造在于将蓝图付诸于实践,这里将提供一些第一步中构思蓝图应该考虑的,或者说是应该如何进行思考提供一些建议。
- 定义性能最优的方法是响应时间,吞吐量是响应时间的一个副产品。
- 如果无法测量就无法有效地优化,所以性能优化工作需要基于高质量、全方位及完整的响应时间策略。
- 策略的最佳开始点应该是入口,这里及应用程序,而不是数据库。即使问题出现在底层的数据库,借助良好的测量也是可以很容易地发现问题。
- 大多数系统无法完整地策略,测量有时候也会有错误的结果。但也可以向办法绕过一些限制,并得到好的结果(但是要能意识到所使用的方法的缺陷喝不确定性在哪里)。
- 完整的测量会产生大量需求分析的数据,所以需要用到剖析器(分析的工具)。最佳的工具,可以帮助将最重要的问题冒泡到前面,这样就可以决定从哪里开始分析会比较好。
- 剖析报告是一种汇总信息,掩盖和丢弃了太多的细节。而且它不会告诉你缺少了什么,所以完全依赖剖析报告也是不明智的。
- 有两种消耗时间的操作:工作或者等待。大部分剖析工具只能测量因为工作而消耗的时间,所以分析有时候是很有用的补充,尤其是当CPU利用率很低但是工资却一致无法完成的时候。
- 优化和提升是两个方面的事情。当继续提升的成本超过收益的时候,应当停止优化。
- 注意你的直觉,但应该只根据直觉来知道解决问题的思路,而不是用于确定系统的问题。决策应当尽量基于数据而不是感觉。
总体来说。我认为解决性能问题的方法,首先是澄清问题,并从中找出关键的问题(5% 再怎么优化,带来的收益也只有 5%,而95%则有很大的收益空间),然后选择合适的技术来解答这些问题。
理论上存粹的自顶向下的方法分析和详尽的测量知识理想的情况,而我们常常要处理的是真是系统。真是系统是复杂且无法充分测量的,所以我们只能根据情况尽力而为。虽然我们无法完整地对真实系统进行测量,但是说到底他们都是某种状态机,只要细心,逻辑清晰并且坚持下去,通常来说都能得到想要的结果。要注意的是不要把原因和结果搞混了,而且在确认问题之前也不要随便针对系统做变动。