《圖解性能最佳化》由有著豐富的系統開發和運維經驗的Oracle高級顧問執筆,詳細解說了系統性能的相關知識。
基本介紹
- 作品名稱:圖解性能最佳化
- 外文名稱: 絵で見てわかるシステムパフォーマンスの仕組み
- 作品出處:人民郵電出版社
- 作者:小田圭二/榑松谷仁/平山毅/岡田憲昌
- 譯者:蘇 禕
- 裝幀:平裝
- ISBN:9787115442420
內容簡介,作者簡介,目錄,
內容簡介
本書由有著豐富的系統開發和運維經驗的Oracle高級顧問執筆,詳細解說了系統性能的相關知識。從性能的概念講起,由淺入深,全面介紹了性能分析的基礎知識、實際系統的性能分析、性能調優、性能測試、虛擬化環境下的性能分析、雲計算環境下的性能分析等內容。書中列舉了豐富的實例,並結合直觀的插圖,向讀者傳授了有用的實戰技巧。另外,因為系統性能和系統架構密切相關,所以讀者在學習系統性能的過程中還能有效地學到系統架構的相關知識。
作者簡介
小田圭二
日本Oracle株式會社諮詢部門經理。在解決性能問題方面有著豐富的經驗,著有《圖解OS、存儲、網路:DB的內部機制》(絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている)、《圖解Oracle的機制》(絵で見てわかるOracleの仕組み)等多部著作。
榑松谷仁
日本Oracle株式會社高級首席顧問。曾在Emprix公司(美國本部)就職,為SIer和一般企業提供壓力測試、性能管理等方面的諮詢服務。之後就職於日本Oracle株式會社,還負責為使用Java、WebLogic、Exalogic等中間件產品的客戶提供諮詢服務。
平山毅
在東京理科大學理工學部上學期間成為Sun Site用戶,專業是計算機科學和統計學。曾在日本某大型網際網路公司就職,目前在世界上最大的雲計算供應商做架構師和諮詢顧問,負責了多個大規模的國際性案件。
喜歡的技術是Oracle、VCE、AWS。
岡田憲昌
曾在某IT公司做基礎設施的設計、搭建和運維工作,後就職於日本Oracle株式會社,負責Oracle產品的設計和PM支持、DBA支持等。目前在某大型虛擬化軟體供應商做諮詢顧問和研發技術經理,負責為虛擬化基礎設施和雲計算的設計、運維等提供諮詢服務。
目錄
第1章 性能的基礎知識 1
1.1 學習性能所必需的知識 2
1.2 算法的優缺點與學習方法 4
1.2.1 什麼是算法 4
1.2.2 算法的基礎 5
1.2.3 學習算法的竅門 7
1.3 算法的套用實例及性能的差異 8
1.3.1 日常生活中算法的例子 8
1.3.2 對性能的影響程度 9
1.3.3 評價算法的指標 11
學習信息科學的重要性 13
1.4 回響與吞吐的區別 14
系統工程師學習編程的重要性 16
1.5 算法的具體例子 16
1.5.1 數組與循環處理 16
1.5.2 鍊表與循環處理 19
1.5.3 樹與查找 21
1.5.4 散列算法 25
1.5.5 佇列 28
1.5.6 棧 32
1.5.7 排序(快速排序) 34
1.5.8 快取①(回寫) 36
1.5.9 快取②(直寫) 38
DMBS是數據結構與算法的寶庫 38
1.5.10 鎖與性能 40
【高級篇】鎖的機制是如何實現的 42
【高級篇】性能優劣不能只看正常情況 44
第2章 性能分析的基礎 45
2.1 性能分析從測量開始 46
2.2 什麼是必要的性能信息 46
2.2.1 “分段查找”原則 46
2.2.2 性能信息的3種類型 48
2.2.3 系統的模型與性能故障時的運作情況 50
2.2.4 數據的種類及分析的竅門 53
2.3 性能分析中的重要理論 54
2.3.1 等待佇列理論的術語 55
2.3.2 計算等待佇列的平均等待時間 56
2.3.3 使用率和等待佇列的例子 57
2.3.4 實際上可以獲取哪些信息 59
需要定期確認性能嗎? 61
2.4 OS的命令 61
2.4.1 sar 62
2.4.2 vmstat 64
時間同步非常重要 66
2.4.3 ps 66
2.4.4 netstat 68
2.4.5 iostat 70
2.4.6 top 73
2.4.7 數據包轉儲(wireshark、tcpdump等) 74
2.4.8 pstack 76
2.4.9 系統調用(strace等) 78
2.4.10 Profiler 80
2.4.11 Windows環境 81
第3章 實際系統的性能分析 85
3.1 Web/AP伺服器與Java/C應用程式 86
3.1.1 Web伺服器的訪問日誌 86
3.1.2 應用程式、AP伺服器的日誌 87
3.2 DB伺服器的性能測量 90
3.2.1 DBMS的性能測量的原理 90
3.2.2 性能分析告一段落 92
批處理的性能測量 93
3.3 存儲性能分析的思路 94
3.3.1 存儲的相關術語 94
3.3.2 存儲性能分析的思路:重視IOPS 96
3.4 網路性能分析的思路 100
性能故障數據應該保存多久? 102
3.5 調查原因 102
3.5.1 初學者容易掉入的陷阱 103
3.5.2 應有的態度 106
獲取各種性能信息的時間要吻合嗎? 108
3.5.3 實際的調查流程 108
性能分析的理想工具 111
第4章 性能調優 113
4.1 性能與調優 114
4.1.1 現實中的性能 114
4.1.2 在現場要保持“大局觀” 117
4.2 性能調優的準則 118
4.2.1 設定既不能太粗也不能太細,要剛剛好 119
4.2.2 調優要循序漸進 120
4.2.3 通過重複使用來提速 121
4.2.4 匯總處理(集中、Piggyback) 121
4.2.5 提高速度與實現並行 123
4.2.6 縱向擴展與橫向擴展 124
4.2.7 局部性 124
編譯器會與RDBMS走上同一條道路嗎? 125
4.3 現場可以使用的技巧 126
4.3.1 省略循環,減少投接球 126
4.3.2 訪問頻率高的數據存放入鍵值存儲或散列表中 127
4.3.3 訪問頻率高的數據放在使用位置附近 127
4.3.4 把同步變成異步 128
4.3.5 頻寬控制 130
4.3.6 LRU算法 131
4.3.7 分割處理或者細化鎖的粒度 131
4.3.8 使用不丟失的回寫快取 132
4.3.9 使用多層快取 132
4.3.10 使用巨幀和高速網路 132
4.3.11 負載均衡、輪詢 133
4.3.12 關聯性、綁定、粘滯會話 134
4.3.13 寫時複製 135
4.3.14 日誌 136
4.3.15 壓縮 137
4.3.16 樂觀鎖 137
4.3.17 列式資料庫 138
4.3.18 伺服器的性能設定中,初始值=最大值? 139
4.4 實際業務中碰到的性能問題 139
4.4.1 性能比較的參考數據 139
4.4.2 快取命中率並不一定要高 140
4.4.3 存儲的調優方針 141
4.4.4 雖然容量足夠,但還是添加磁碟 141
4.4.5 從性能角度看檔案分割 142
4.4.6 90百分位 143
4.4.7 讀取與寫入的比例 143
4.5 調優的例子 144
4.5.1 例1:2層循環中select語句的執行 144
4.5.2 例2:偶爾出現性能下降 147
等待佇列的前面發生了什麼? 149
第5章 性能測試 151
5.1 性能測試的概要 152
5.1.1 項目工程中的性能測試 152
5.1.2 不同職責的性能測試相關人員 153
5.2 常見的失敗情況:9種反面模式 156
5.2.1 不能在期限內完成 156
5.2.2 性能很差!解決不了性能問題 157
5.2.3 由於沒有考慮到環境差異而導致發生問題 158
5.2.4 壓力場景設計不完備導致發生問題 159
5.2.5 沒有考慮到緩衝、快取的使用而導致發生問題 159
5.2.6 沒有考慮到思考時間而導致發生問題 160
5.2.7 報告內容難以理解導致客戶不能認同 162
5.2.8 客戶因為存在不信任感而不能認同 163
5.2.9 測試很花時間 164
5.3 性能測試的種類 167
5.3.1 實施的周期 168
5.3.2 狹義的性能測試 169
5.3.3 臨界測試(臨界性能、回退性能、故障測試) 169
5.3.4 基礎設施性能測試 174
5.3.5 應用程式單元性能測試 178
5.3.6 耐久測試 179
5.3.7 關聯領域 180
5.4 項目工程中考慮的性能測試 181
5.4.1 需求定義 181
5.4.2 項目規劃 186
5.4.3 【基本設計】選擇系統 187
5.4.4 【基本設計】性能測試環境 188
5.4.5 【基本設計】其他與性能設計相關的事項 191
5.4.6 【性能測試設計】測試計畫的細節 192
5.4.7 【性能測試設計】人員配備與聯絡體制 194
5.4.8 【基礎設施集成測試】基礎設施性能測試 195
5.4.9 【集成測試】多並發運行測試 197
5.4.10 【系統測試】壓力測試、臨界測試、耐久測試 197
5.4.11 【運維測試】性能監控測試、故障測試 198
5.4.12 【交付】性能測試結果的驗收報告 198
5.4.13 【運維】初期運行確認 199
5.5 性能測試的課題與必要的技巧 200
5.5.1 性能預估能力 200
5.5.2 高效的反覆實施能力 202
5.5.3 Oracle Application Testing Suite的使用效果 203
第6章 虛擬化環境下的性能 209
6.1 虛擬化與性能 210
6.2 虛擬化的概要 211
6.2.1 什麼是伺服器虛擬化 211
6.2.2 虛擬化的種類 212
硬體輔助虛擬化 214
6.3 伺服器虛擬化的主要技術(過載使用) 215
6.3.1 CPU的虛擬化技術 215
6.3.2 記憶體的虛擬化技術 218
6.4 虛擬化環境下性能的相關知識與分析方法 225
6.4.1 性能分析的工具 225
6.4.2 CPU的性能管理 226
6.4.3 記憶體的性能管理 231
6.4.4 存儲的性能管理 234
還沒使用DRS嗎? 237
6.4.5 網路的性能管理 240
延遲靈敏度功能 243
第7章 雲計算環境下的性能 245
7.1 雲計算環境下性能的相關知識 246
7.1.1 雲計算環境下性能會變差嗎 246
7.2 雲計算與本地部署的差異 247
7.2.1 雲計算的定義 248
7.2.2 從雲計算的特點來看與本地部署環境的不同 248
雲計算實現的終極全球化 251
7.2.3 雲計算的實現形態 251
混合結構的成本管理就是使用實物期權實現的投資組合管理 252
7.2.4 從雲計算的服務模式來看其與本地部署的差別 253
雲計算環境中可以把盈虧平衡點圖形化(獨自SaaS提供的最優費用模型) 254
7.2.5 把握資源的變動因素與固定因素 254
7.3 雲計算環境的內部結構與最佳應用程式架構 262
7.3.1 集中式?分散式? 262
7.3.2 緊耦合?松耦合? 264
7.3.3 SOAP?REST? 265
能夠把握抽象化的雲計算環境的美國人——圖與想像的重要性 268
7.3.4 前端的分散式處理:網路的訪問方法 269
7.3.5 後端的分散式處理:數據存儲的知識(從ACID到BASE) 271
7.3.6 提高TCP通信的速度 272
7.3.7 提高對象存儲的速度 272
7.3.8 C語言?Java語言?還是腳本語言? 273
7.3.9 雲計算環境下高性能服務的架構 274
7.3.10 開放遷移與雲計算遷移 277
7.3.11 推測雲計算的內部結構 278
7.4 雲計算環境下性能分析的方法 278
7.4.1 獲得雲計算環境的基準數據的價值與不斷進化的性能值 278
性能領域是理科工程師的特權? 280
7.4.2 Web系統的基本分析方法 281
7.4.3 批處理系統的基本分析方法 282
7.4.4 雲計算的自動擴展功能 283
7.4.5 解析雲計算環境中的複雜信息的統計方法 284
7.5 雲計算環境中開發階段的思維方式 285
7.5.1 估算(基本設計) 286
7.5.2 性能測試(系統測試) 287
7.5.3 項目管理 287
雲計算環境下,經營者也需要關注詳細的性能數據嗎? 288
7.6 雲計算環境中運維階段的思維方式 289
7.6.1 容量管理 289
閾值設定與系統安全係數、標準化的價值 290
7.6.2 故障發生時的降規模容量運維 292
7.6.3 生命周期與更新 293
雲計算實現的DevOps中性能調優的高效化 294
參考文獻 296
作者簡介 297
1.1 學習性能所必需的知識 2
1.2 算法的優缺點與學習方法 4
1.2.1 什麼是算法 4
1.2.2 算法的基礎 5
1.2.3 學習算法的竅門 7
1.3 算法的套用實例及性能的差異 8
1.3.1 日常生活中算法的例子 8
1.3.2 對性能的影響程度 9
1.3.3 評價算法的指標 11
學習信息科學的重要性 13
1.4 回響與吞吐的區別 14
系統工程師學習編程的重要性 16
1.5 算法的具體例子 16
1.5.1 數組與循環處理 16
1.5.2 鍊表與循環處理 19
1.5.3 樹與查找 21
1.5.4 散列算法 25
1.5.5 佇列 28
1.5.6 棧 32
1.5.7 排序(快速排序) 34
1.5.8 快取①(回寫) 36
1.5.9 快取②(直寫) 38
DMBS是數據結構與算法的寶庫 38
1.5.10 鎖與性能 40
【高級篇】鎖的機制是如何實現的 42
【高級篇】性能優劣不能只看正常情況 44
第2章 性能分析的基礎 45
2.1 性能分析從測量開始 46
2.2 什麼是必要的性能信息 46
2.2.1 “分段查找”原則 46
2.2.2 性能信息的3種類型 48
2.2.3 系統的模型與性能故障時的運作情況 50
2.2.4 數據的種類及分析的竅門 53
2.3 性能分析中的重要理論 54
2.3.1 等待佇列理論的術語 55
2.3.2 計算等待佇列的平均等待時間 56
2.3.3 使用率和等待佇列的例子 57
2.3.4 實際上可以獲取哪些信息 59
需要定期確認性能嗎? 61
2.4 OS的命令 61
2.4.1 sar 62
2.4.2 vmstat 64
時間同步非常重要 66
2.4.3 ps 66
2.4.4 netstat 68
2.4.5 iostat 70
2.4.6 top 73
2.4.7 數據包轉儲(wireshark、tcpdump等) 74
2.4.8 pstack 76
2.4.9 系統調用(strace等) 78
2.4.10 Profiler 80
2.4.11 Windows環境 81
第3章 實際系統的性能分析 85
3.1 Web/AP伺服器與Java/C應用程式 86
3.1.1 Web伺服器的訪問日誌 86
3.1.2 應用程式、AP伺服器的日誌 87
3.2 DB伺服器的性能測量 90
3.2.1 DBMS的性能測量的原理 90
3.2.2 性能分析告一段落 92
批處理的性能測量 93
3.3 存儲性能分析的思路 94
3.3.1 存儲的相關術語 94
3.3.2 存儲性能分析的思路:重視IOPS 96
3.4 網路性能分析的思路 100
性能故障數據應該保存多久? 102
3.5 調查原因 102
3.5.1 初學者容易掉入的陷阱 103
3.5.2 應有的態度 106
獲取各種性能信息的時間要吻合嗎? 108
3.5.3 實際的調查流程 108
性能分析的理想工具 111
第4章 性能調優 113
4.1 性能與調優 114
4.1.1 現實中的性能 114
4.1.2 在現場要保持“大局觀” 117
4.2 性能調優的準則 118
4.2.1 設定既不能太粗也不能太細,要剛剛好 119
4.2.2 調優要循序漸進 120
4.2.3 通過重複使用來提速 121
4.2.4 匯總處理(集中、Piggyback) 121
4.2.5 提高速度與實現並行 123
4.2.6 縱向擴展與橫向擴展 124
4.2.7 局部性 124
編譯器會與RDBMS走上同一條道路嗎? 125
4.3 現場可以使用的技巧 126
4.3.1 省略循環,減少投接球 126
4.3.2 訪問頻率高的數據存放入鍵值存儲或散列表中 127
4.3.3 訪問頻率高的數據放在使用位置附近 127
4.3.4 把同步變成異步 128
4.3.5 頻寬控制 130
4.3.6 LRU算法 131
4.3.7 分割處理或者細化鎖的粒度 131
4.3.8 使用不丟失的回寫快取 132
4.3.9 使用多層快取 132
4.3.10 使用巨幀和高速網路 132
4.3.11 負載均衡、輪詢 133
4.3.12 關聯性、綁定、粘滯會話 134
4.3.13 寫時複製 135
4.3.14 日誌 136
4.3.15 壓縮 137
4.3.16 樂觀鎖 137
4.3.17 列式資料庫 138
4.3.18 伺服器的性能設定中,初始值=最大值? 139
4.4 實際業務中碰到的性能問題 139
4.4.1 性能比較的參考數據 139
4.4.2 快取命中率並不一定要高 140
4.4.3 存儲的調優方針 141
4.4.4 雖然容量足夠,但還是添加磁碟 141
4.4.5 從性能角度看檔案分割 142
4.4.6 90百分位 143
4.4.7 讀取與寫入的比例 143
4.5 調優的例子 144
4.5.1 例1:2層循環中select語句的執行 144
4.5.2 例2:偶爾出現性能下降 147
等待佇列的前面發生了什麼? 149
第5章 性能測試 151
5.1 性能測試的概要 152
5.1.1 項目工程中的性能測試 152
5.1.2 不同職責的性能測試相關人員 153
5.2 常見的失敗情況:9種反面模式 156
5.2.1 不能在期限內完成 156
5.2.2 性能很差!解決不了性能問題 157
5.2.3 由於沒有考慮到環境差異而導致發生問題 158
5.2.4 壓力場景設計不完備導致發生問題 159
5.2.5 沒有考慮到緩衝、快取的使用而導致發生問題 159
5.2.6 沒有考慮到思考時間而導致發生問題 160
5.2.7 報告內容難以理解導致客戶不能認同 162
5.2.8 客戶因為存在不信任感而不能認同 163
5.2.9 測試很花時間 164
5.3 性能測試的種類 167
5.3.1 實施的周期 168
5.3.2 狹義的性能測試 169
5.3.3 臨界測試(臨界性能、回退性能、故障測試) 169
5.3.4 基礎設施性能測試 174
5.3.5 應用程式單元性能測試 178
5.3.6 耐久測試 179
5.3.7 關聯領域 180
5.4 項目工程中考慮的性能測試 181
5.4.1 需求定義 181
5.4.2 項目規劃 186
5.4.3 【基本設計】選擇系統 187
5.4.4 【基本設計】性能測試環境 188
5.4.5 【基本設計】其他與性能設計相關的事項 191
5.4.6 【性能測試設計】測試計畫的細節 192
5.4.7 【性能測試設計】人員配備與聯絡體制 194
5.4.8 【基礎設施集成測試】基礎設施性能測試 195
5.4.9 【集成測試】多並發運行測試 197
5.4.10 【系統測試】壓力測試、臨界測試、耐久測試 197
5.4.11 【運維測試】性能監控測試、故障測試 198
5.4.12 【交付】性能測試結果的驗收報告 198
5.4.13 【運維】初期運行確認 199
5.5 性能測試的課題與必要的技巧 200
5.5.1 性能預估能力 200
5.5.2 高效的反覆實施能力 202
5.5.3 Oracle Application Testing Suite的使用效果 203
第6章 虛擬化環境下的性能 209
6.1 虛擬化與性能 210
6.2 虛擬化的概要 211
6.2.1 什麼是伺服器虛擬化 211
6.2.2 虛擬化的種類 212
硬體輔助虛擬化 214
6.3 伺服器虛擬化的主要技術(過載使用) 215
6.3.1 CPU的虛擬化技術 215
6.3.2 記憶體的虛擬化技術 218
6.4 虛擬化環境下性能的相關知識與分析方法 225
6.4.1 性能分析的工具 225
6.4.2 CPU的性能管理 226
6.4.3 記憶體的性能管理 231
6.4.4 存儲的性能管理 234
還沒使用DRS嗎? 237
6.4.5 網路的性能管理 240
延遲靈敏度功能 243
第7章 雲計算環境下的性能 245
7.1 雲計算環境下性能的相關知識 246
7.1.1 雲計算環境下性能會變差嗎 246
7.2 雲計算與本地部署的差異 247
7.2.1 雲計算的定義 248
7.2.2 從雲計算的特點來看與本地部署環境的不同 248
雲計算實現的終極全球化 251
7.2.3 雲計算的實現形態 251
混合結構的成本管理就是使用實物期權實現的投資組合管理 252
7.2.4 從雲計算的服務模式來看其與本地部署的差別 253
雲計算環境中可以把盈虧平衡點圖形化(獨自SaaS提供的最優費用模型) 254
7.2.5 把握資源的變動因素與固定因素 254
7.3 雲計算環境的內部結構與最佳應用程式架構 262
7.3.1 集中式?分散式? 262
7.3.2 緊耦合?松耦合? 264
7.3.3 SOAP?REST? 265
能夠把握抽象化的雲計算環境的美國人——圖與想像的重要性 268
7.3.4 前端的分散式處理:網路的訪問方法 269
7.3.5 後端的分散式處理:數據存儲的知識(從ACID到BASE) 271
7.3.6 提高TCP通信的速度 272
7.3.7 提高對象存儲的速度 272
7.3.8 C語言?Java語言?還是腳本語言? 273
7.3.9 雲計算環境下高性能服務的架構 274
7.3.10 開放遷移與雲計算遷移 277
7.3.11 推測雲計算的內部結構 278
7.4 雲計算環境下性能分析的方法 278
7.4.1 獲得雲計算環境的基準數據的價值與不斷進化的性能值 278
性能領域是理科工程師的特權? 280
7.4.2 Web系統的基本分析方法 281
7.4.3 批處理系統的基本分析方法 282
7.4.4 雲計算的自動擴展功能 283
7.4.5 解析雲計算環境中的複雜信息的統計方法 284
7.5 雲計算環境中開發階段的思維方式 285
7.5.1 估算(基本設計) 286
7.5.2 性能測試(系統測試) 287
7.5.3 項目管理 287
雲計算環境下,經營者也需要關注詳細的性能數據嗎? 288
7.6 雲計算環境中運維階段的思維方式 289
7.6.1 容量管理 289
閾值設定與系統安全係數、標準化的價值 290
7.6.2 故障發生時的降規模容量運維 292
7.6.3 生命周期與更新 293
雲計算實現的DevOps中性能調優的高效化 294
參考文獻 296
作者簡介 297