運行速度慢的系統常常令人沮喪。它們會浪費用戶的時間和金錢,甚至可能會扼殺項目,危及相關從業(yè)人員的職業(yè)生涯。本書主要面向那些對計算機程序和其他程序消耗時間情況以及改進這種情況的方法感興趣的人,作者以一種清晰且值得思考的方式解釋了為什么系統會這樣運行,并融合親身經歷,用講故事的方式分享了自己作為程序性能咨詢顧問的經驗,教大家如何改進系統。他不僅教讀者性能優(yōu)化方面的技能,還引導讀者使用新的思維方式,更穩(wěn)定、更自信地進行優(yōu)化。
作者用講故事的方式教大家如何改進系統,無論是處理計算機軟件還是面對日常生活中的某些流程。他不僅教大家性能優(yōu)化方面的技能,還引導大家使用新的思維方式,幫助大家成為更穩(wěn)定、更自信的優(yōu)化專家。
序
卡里早就該寫這本書了。25 年來,他一直在教授并實踐書中的內容。這本書我已 經讀了好幾遍,我想你一定會喜歡的。這是一本可以改變你生活的書。我之所以 這樣確信,是因為書中闡明的那些原則已經改變了我的生活。我擁有 18 年的領先 優(yōu)勢,因為卡里在 2003 年與杰夫 ·霍爾特(Jeff Holt)合著的《 Oracle 性能優(yōu)化》 (Optimizing Oracle Performance)一書的本質正是這本書的精髓所在,即一個名為“ R 方法”的方法。
R方法改變了我的生活。它是我職業(yè)生涯的基礎。在了解它之前,我已經學習并運 用了作為一名數據庫管理員應該掌握的所有“常規(guī)”技巧、竅門、工具和技術。我 取得了一定的成功,但得到的結果并不一致,而且一切似乎都非常復雜且困難。R 方法幾乎立刻顛覆了我對于優(yōu)化的想法。一切都變得清晰而簡單。
R方法不僅僅局限于Oracle的應用范疇之內。使用R方法,我可以清楚地看到,針對改進目標需要收集哪些相關信息。我可以看到去哪里尋找性能問題的根本原因, 以及如何解決這些問題。不過,最棒的一點是,我能夠向別人解釋我在做什么以及 為什么這樣做。我覺得這是特別有成就感的。而我之所以能做到這一點,就是因為通過R方法,我不是在猜測——而是確切地知曉。
事實證明,很多人的確看到了R方法在Oracle之外的適用性,盡管2003年的那本書確實是一本關于Oracle的書,但這本書不是,這本書針對的是需要做決策的人。不僅僅是Oracle公司的人,甚至不僅僅是長時間進行批處理任務的信息技術人員,還包括任何需要做飯或帶孩子參加體育活動的人——任何想要更快速、更優(yōu)秀或更 優(yōu)雅地做事情的人。這些原則在任何地方都適用。在第一次開始將R方法應用于我的生活時,我記得當時我在想:“它真的這么簡單嗎?”答案是肯定的!
這是一本令人愉快的書?ɡ锊粌H是一位業(yè)務嫻熟的專業(yè)人士,還是一位天賦卓絕的故事講述者。他會是你所遇到的非常出色的演講者之一(無論是否從技術層面 看),這一點在這本書中得到了顯著體現?吹剿浅]p松地用平實的英語解釋這 些讓眾人望而卻步的話題,既讓人心滿意足,又令人耳目一新。這些故事幾乎涉及每個人的經歷,無論他們是否從事IT行業(yè)。在這本書中,我想你會發(fā)現至少有一些故事會讓你感同身受。
吸引你的是故事,但真正改變你的是故事中的道理。在這本書中,你將了解到“正 確觀察正在發(fā)生的事情”這一簡單的行為如何使世界上的一切變得完全不同;你將學習如何自信且一致地去識別、查看、框定、分析并解決性能問題;你將學習如何 將同事的情緒作為一種積極的力量;你將了解如何更好地進行測試,從而避免問題 的出現,而不是等到以后直面問題;你將學習如何找到確鑿的證據來確定是否有可 能做進一步改進。你將從這本書中找到所有答案。
你可以將這本書作為一本教科書,也可以將其看作一本能夠隨意翻閱的參考書。我認為這本書可以幫助很多像你一樣的人,為這個世界做出積極的貢獻。
——古德蒙達爾 · 約塞普松 2021年 2月于冰島科帕沃古爾
前言
讓事情變得更快是為了讓事情變得更好,從而讓生活變得更美好。如果工具能夠工 作得更快,我們就有更多的時間去做自己想做的事情。如果這些工具是幫助我們處理信息的,那么它們工作得越快,我們就可以越好地做出決策。
無論是對計算機、犁頭進行優(yōu)化,還是對兩者之外的其他東西進行優(yōu)化,都需要兩 項獨立的技能:一是提出正確的問題;二是回答這些問題。大多數思考優(yōu)化的人都 很了解第二項技能,但似乎很少有人意識到第一項技能。然而,第一項技能——提出正確問題的行為——才是我們需要首先培養(yǎng)的技能,尤其是作為一名領導者。大家可能會驚訝于自己竟然能如此迅速地學會它。
不過,還有一個問題。教學時,我們提出的問題很簡單。但所有遇到過好奇孩子的人都知道,簡單的問題并不總是容易回答的。例如,管理公司計算機的人可能確切地知道在某個特定的星期五下午2點鐘系統的CPU利用率是多少,但他們可能無法回答店員輸入一份訂單需要多長時間。他們給出的答案和我們想要提出的問題之間存在著錯配。這種錯配本身就隱藏著讓事情變得更快的機會。我會教大家如何找 到這些機會。
優(yōu)化通常更具政治性,而非技術性。奇怪的是,關于優(yōu)化的書籍幾乎都是技術性的。技術人員很容易認為項目中的非技術因素是不必要的,甚至可能是荒謬的干擾 因素。但事實是,優(yōu)化的非技術方面也需要人們去理解和投入精力,就如同技術方 面一樣。為了優(yōu)化某些內容, 除了要在技術上富有成效外,有時候還必須面對恐慌 和恐懼所產生的“怪物”。良好的成功業(yè)績記錄將幫助我們在關于下一步該做什么的辯論中贏得勝利,但如果不發(fā)揮一些政治智慧,我們就永遠無法創(chuàng)造出這樣的業(yè)績記錄。
我寫這本書的目的是幫助大家提高這兩項技能:從政治和技術層面提問和回答。潛在的回報是巨大的。當我們既了解性能的科學,又了解如何駕馭關注性能的人的欲 望和情感的藝術時,我們就可以優(yōu)化任何事情。
卡里·米爾薩普(Cary Millsap)是Method R公司創(chuàng)始人,該公司為很多知名的企業(yè)提供服務,創(chuàng)建了世界上第一個用于管理、挖掘和處理成千上萬個Oracle跟蹤文件的軟件系統。20世紀90年代,他曾在Oracle公司擔任系統性能組的副總裁。他是Oak Table Network的創(chuàng)始成員之一。
目錄
序
前言
第一部分 關注目標
第1章 鮑勃 / 9
第2章 菲莉絲 / 11
第3章 正確的目標 / 13
第4章 南!/ 14
第5章 關注正確的目標 / 19
第6章 當無法關注目標時 / 21
第二部分 方法
第7章 四十九條申訴 / 25
第8章 發(fā)貨標簽問題 / 27
第9章 更多申訴 / 29
第10章 優(yōu)先級 / 31
第11章 整個系統都很慢 / 33
第12章 間接收益 / 34
第13章 銀彈 / 37
第14章 清單 / 38
第15章 R方法 / 40
第三部分 剖析
第16章 薪資系統 / 43
第17章 序列圖 / 47
第18章 甘特圖 / 49
第19章 跟蹤 / 51
第20章 剖析表 / 53
第21章 創(chuàng)建剖析表 / 55
第四部分 衡量性能
第22章 性能是一種特性 / 59
第23章 可重復測試用例 / 61
第24章 間歇性問題 / 63
第25章 跟蹤范圍 / 65
第26章 識別體驗 / 68
第27章 測量入侵 / 69
第五部分 優(yōu)化
第28章 謎語 / 73
第29章 游戲 / 76
第30章 事件計數 / 78
第31章 事件持續(xù)時間 / 80
第32章 過濾前置 / 83
第33章 向左看 / 85
第34章 托-米爾薩普定律 / 87
第35章 瓶頸 / 88
第36章 警惕“系統瓶頸” / 90
第37章 優(yōu)化子系統的問題 / 91
第38章 每個問題都是偏態(tài)問題 / 94
第39章 關鍵路徑 / 98
第六部分 延遲
第40章 凱文 / 103
第41章 排隊延遲 / 107
第42章 排隊論 / 108
第43章 雙曲線 / 110
第44章 流量強度 / 112
第45章 利用率 / 113
第46章 雙曲線杠桿 / 114
第47章 一致性延遲 / 115
第48章 延遲和吞吐量 / 117
第七部分 浪費
第49章 黛布拉 / 121
第50章 斜坡 / 123
第51章 瑪莎 / 126
第52章 高效 / 130
第53章 修復低效,還是供給低效 / 131
第54章 雪怪 / 133
第55章 快速與高效 / 135
第56章 可擴展性 / 136
第八部分 解決問題
第57章 四個簡單問題 / 141
第58章 到達數據盡頭 / 143
第59章 高管反饋環(huán) / 145
第60章 附帶損害 / 146
第61章 過猶不及 / 148
第62章 道格 / 150
第63章 何時完成 / 152
第九部分 預測
第64章 理查德 / 157
第65章 為什么需要預測 / 161
第66章 利用剖析表進行預測 / 162
第67章 對“做還是不做”決策的預測 / 163
第68章 線性行為 / 164
第69章 偏態(tài) / 165
第70章 事件相互依賴 / 167
第71章 非線性行為 / 168
第十部分 延遲隱藏
第72章 媽媽 / 173
第73章 多米尼克 / 176
第74章 并行化 / 178
第75章 如何讓系統崩潰 / 180
第76章 多任務處理 / 182
第77章 人類的多任務處理 / 184
第十一部分 謬誤
第78章 邪惡精靈 / 187
第79章 皮夾克 / 188
第80章 被隱藏的異常值 / 189
第81章 當心許下的愿望 / 190
第82章 百分位規(guī)格 / 192
第83章 命中率問題 / 194
第84章 mpg問題 / 197
第85章 比率把戲 / 198
第86章 吞吐量和響應時間 / 200
第87章 比率沒有用嗎 / 201
第88章 何時比率可靠 / 202
第89章 描述性能改進 / 203
第90章 “加快n倍”的神話 / 205
第十二部分 測試
第91章 為什么要測試 / 211
第92章 風險 / 213
第93章 破壞性測試 / 214
第94章 測試并非一個階段 / 216
第95章 自動化測試 / 218
第96章 預防問題 / 219
第十三部分 規(guī)劃
第97章 厄特利夫人 / 223
第98章 容量規(guī)劃 / 224
第99章 利用率目標 / 226
第100章 何時升級 / 228
第十四部分 政治
第101章 證明 / 233
第102章 少承諾的問題 / 235
第103章 七個項目風險放大器 / 236
第104章 快速失敗 / 239
第105章 面子 / 242
第106章 珠寶商的方法 / 244
第107章 變更控制 / 246
第108章 記錄保存 / 247
第109章 失敗 / 249
第110章 要緊張,但別焦慮 / 251
第十五部分 收獲樂趣
第111章 幫孩子們做優(yōu)化 / 255
術語表 / 258
參考文獻 / 263