高性能MySQL(第3版)

高性能MySQL(第3版)

《高性能MySQL(第3版)》是2013年4月電子工業出版社出版的圖書,作者是寧海元、周振興、彭立勛、翟衛祥。

基本介紹

  • 書名:高性能MySQL(第3版)
  • 作者:寧海元、周振興、彭立勛、翟衛祥
  • ISBN:9787121198854
  • 頁數:804頁
  • 定價:128元
  • 出版社電子工業出版社
  • 出版時間:2013年4月
  • 開本:16開
內容簡介,圖書目錄,

內容簡介

本書是MySQL領域的經典之作,擁有廣泛的影響力。第3版更新了大量的內容,不但涵蓋了最新MySQL 5.5版本的新特性,也講述了關於固態盤、高可擴展性設計和雲計算環境下的資料庫相關的新內容,原有的基準測試和性能最佳化部分也做了大量的擴展和補充。全書共分為16章和6個附錄,內容涵蓋MySQL架構和歷史,基準測試和性能剖析,資料庫軟硬體性能最佳化,複製、備份和恢復,高可用與高可擴展性,以及雲端的MySQL和MySQL相關工具等方面的內容。每一章都是相對獨立的主題,讀者可以有選擇性地單獨閱讀。
本書不但適合資料庫管理員(DBA)閱讀,也適合開發人員參考學習。不管是資料庫新手還是專家,相信都能從本書有所收穫。

圖書目錄

目錄
推薦序 xxiii
前言 xxv
第1 章 MySQL 架構與歷史 1
1.1 MySQL 邏輯架構 1
1.1.1 連線管理與安全性 2
1.1.2 最佳化與執行 3
1.2 並發控制 3
1.2.1 讀寫鎖 4
1.2.2 鎖粒度 4
1.3 事務 6
1.3.1 隔離級別 8
1.3.2 死鎖 9
1.3.3 事務日誌 10
1.3.4 MySQL 中的事務 10
1.4 多版本並發控制 12
1.5 MySQL 的存儲引擎 13
1.5.1 InnoDB 存儲引擎 16
1.5.2 MyISAM 存儲引擎 17
1.5.3 MySQL 內建的其他存儲引擎 19
1.5.4 第三方存儲引擎 22
1.5.5 選擇合適的引擎 24
1.5.6 轉換表的引擎 27
1.6 MySQL 時間線(Timeline) 29
1.7 MySQL 的開發模式 32
1.8 總結 33
第2 章 MySQL 基準測試 35
2.1 為什麼需要基準測試 35
2.2 基準測試的策略 37
2.2.1 測試何種指標 38
2.3 基準測試方法 40
2.3.1 設計和規劃基準測試 41
2.3.2 基準測試應該運行多長時間 42
2.3.3 獲取系統性能和狀態 43
2.3.4 獲得準確的測試結果 44
2.3.5 運行基準測試並分析結果 46
2.3.6 繪圖的重要性 47
2.4 基準測試工具 49
2.4.1 集成式測試工具 49
2.4.2 單組件式測試工具 50
2.5 基準測試案例 52
2.5.1 http_load 53
2.5.2 MySQL 基準測試套件 .54
2.5.3 sysbench 55
2.5.4 資料庫測試套件中的dbt2 TPC-C 測試 60
2.5.5 Percona 的TPCC-MySQL 測試工具 63
2.6 總結 65
第3 章 伺服器性能剖析 67
3.1 性能最佳化簡介 67
3.1.1 通過性能剖析進行最佳化 69
3.1.2 理解性能剖析 71
3.2 對應用程式進行性能剖析 72
3.2.1 測量PHP 應用程式 74
3.3 剖析MySQL 查詢 77
3.3.1 剖析伺服器負載 77
3.3.2 剖析單條查詢 81
3.3.3 使用性能剖析 87
3.4 診斷間歇性問題 88
3.4.1 單條查詢問題還是伺服器問題 89
3.4.2 捕獲診斷數據 93
3.4.3 一個診斷案例 98
3.5 其他剖析工具 106
3.5.1 使用USER_STATISTICS 表 106
3.5.2 使用strace 107
3.6 總結 108
第4 章 Schema 與數據類型最佳化 111
4.1 選擇最佳化的數據類型 111
4.1.1 整數類型 113
4.1.2 實數類型 113
4.1.3 字元串類型 114
4.1.4 日期和時間類型 121
4.1.5 位數據類型 123
4.1.6 選擇標識符(identifier) 125
4.1.7 特殊類型數據 127
4.2 MySQL schema 設計中的陷阱 127
4.3 範式和反範式 129
4.3.1 範式的優點和缺點 130
4.3.2 反範式的優點和缺點 . 130
4.3.3 混用範式化和反範式化 131
4.4 快取表和匯總表 132
4.4.1 物化視圖 134
4.4.2 計數器表 135
4.5 加快ALTER TABLE 操作的速度 136
4.5.1 只修改.frm 檔案 137
4.5.2 快速創建MyISAM 索引 139
4.6 總結 140
第5 章 創建高性能的索引 141
5.1 索引基礎 141
5.1.1 索引的類型 142
5.2 索引的優點 152
5.3 高性能的索引策略 153
5.3.1 獨立的列 153
5.3.2 前綴索引和索引選擇性 153
5.3.3 多列索引 157
5.3.4 選擇合適的索引列順序 159
5.3.5 聚簇索引 162
5.3.6 覆蓋索引 171
5.3.7 使用索引掃描來做排序 175
5.3.8 壓縮(前綴壓縮)索引 177
5.3.9 冗餘和重複索引 178
5.3.10 未使用的索引 181
5.3.11 索引和鎖 181
5.4 索引案例學習 183
5.4.1 支持多種過濾條件 183
5.4.2 避免多個範圍條件 185
5.4.3 最佳化排序 186
5.5 維護索引和表 187
5.5.1 找到並修復損壞的表 . 187
5.5.2 更新索引統計信息 188
5.5.3 減少索引和數據的碎片 190
5.6 總結 192
第6 章 查詢性能最佳化 195
6.1 為什麼查詢速度會慢 195
6.2 慢查詢基礎:最佳化數據訪問 196
6.2.1 是否向伺服器請求了不需要的數據 196
6.2.2 MySQL 是否在掃描額外的記錄 198
6.3 重構查詢的方式 201
6.3.1 一個複雜查詢還是多個簡單查詢 201
6.3.2 切分查詢 202
6.3.3 分解關聯查詢 203
6.4 查詢執行的基礎 204
6.4.1 MySQL 客戶端/ 伺服器通信協定 205
6.4.2 查詢快取 208
6.4.3 查詢最佳化處理 208
6.4.4 查詢執行引擎 222
6.4.5 返回結果給客戶端 223
6.5 MySQL 查詢最佳化器的局限性 223
6.5.1 關聯子查詢 223
6.5.2 UNION 的限制 228
6.5.3 索引合併最佳化 228
6.5.4 等值傳遞 229
6.5.5 並行執行 229
6.5.6 哈希關聯 229
6.5.7 鬆散索引掃描 229
6.5.8 最大值和最小值最佳化 . 231
6.5.9 在同一個表上查詢和更新 232
6.6 查詢最佳化器的提示(hint) 232
6.7 最佳化特定類型的查詢 236
6.7.1 最佳化COUNT() 查詢 236
6.7.2 最佳化關聯查詢 239
6.7.3 最佳化子查詢 239
6.7.4 最佳化GROUP BY 和DISTINCT 239
6.7.5 最佳化LIMIT 分頁 241
6.7.6 最佳化SQL_CALC_FOUND_ROWS 243
6.7.7 最佳化UNION 查詢 243
6.7.8 靜態查詢分析 244
6.7.9 使用用戶自定義變數 . 244
6.8 案例學習 251
6.8.1 使用MySQL 構建一個佇列表 251
6.8.2 計算兩點之間的距離 . 254
6.8.3 使用用戶自定義函式 . 257
6.9 總結 258
第7 章 MySQL 高級特性 259
7.1 分區表 259
7.1.1 分區表的原理 260
7.1.2 分區表的類型 261
7.1.3 如何使用分區表 262
7.1.4 什麼情況下會出問題 . 263
7.1.5 查詢最佳化 266
7.1.6 合併表 267
7.2 視圖 270
7.2.1 可更新視圖 272
7.2.2 視圖對性能的影響 273
7.2.3 視圖的限制 274
7.3 外鍵約束 275
7.4 在MySQL 內部存儲代碼 276
7.4.1 存儲過程和函式 278
7.4.2 觸發器 279
7.4.3 事件 281
7.4.4 在存儲程式中保留注釋 283
7.5 游標 283
7.6 綁定變數 284
7.6.1 綁定變數的最佳化 286
7.6.2 SQL 接口的綁定變數 286
7.6.3 綁定變數的限制 288
7.7 用戶自定義函式 289
7.8 外掛程式 290
7.9 字元集和校對 291
7.9.1 MySQL 如何使用字元集 292
7.9.2 選擇字元集和校對規則 295
7.9.3 字元集和校對規則如何影響查詢 296
7.10 全文索引 299
7.10.1 自然語言的全文索引 300
7.10.2 布爾全文索引 302
7.10.3 MySQL5.1 中全文索引的變化 303
7.10.4 全文索引的限制和替代方案 304
7.10.5 全文索引的配置和最佳化 306
7.11 分散式(XA)事務 307
7.11.1 內部XA 事務 307
7.11.2 外部XA 事務 308
7.12 查詢快取 309
7.12.1 MySQL 如何判斷快取命中 309
7.12.2 查詢快取如何使用記憶體 311
7.12.3 什麼情況下查詢快取能發揮作用 313
7.12.4 如何配置和維護查詢快取 316
7.12.5 InnoDB 和查詢快取 . 319
7.12.6 通用查詢快取最佳化 320
7.12.7 查詢快取的替代方案 321
7.13 總結 321
第8 章 最佳化伺服器設定 325
8.1 MySQL 配置的工作原理 326
8.1.1 語法、作用域和動態性 327
8.1.2 設定變數的副作用 328
8.1.3 入門 331
8.1.4 通過基準測試疊代最佳化 332
8.2 什麼不該做 333
8.3 創建MySQL 配置檔案 335
8.3.1 檢查MySQL 伺服器狀態變數 339
8.4 配置記憶體使用 340
8.4.1 MySQL 可以使用多少記憶體? 340
8.4.2 每個連線需要的記憶體 . 341
8.4.3 為作業系統保留記憶體 . 341
8.4.4 為快取分配記憶體 342
8.4.5 InnoDB 緩衝池(Buffer Pool) 342
8.4.6 MyISAM 鍵快取(Key Caches) 344
8.4.7 執行緒快取 346
8.4.8 表快取(Table Cache) 347
8.4.9 InnoDB 數據字典(Data Dictionary) 348
8.5 配置MySQL 的I/O 行為 349
8.5.1 InnoDB I/O 配置 349
8.5.2 MyISAM 的I/O 配置 . 361
8.6 配置MySQL 並發 . 363
8.6.1 InnoDB 並發配置 364
8.6.2 MyISAM 並發配置 365
8.7 基於工作負載的配置 366
8.7.1 最佳化BLOB 和TEXT 的場景 367
8.7.2 最佳化排序(Filesorts). 368
8.8 完成基本配置 369
8.9 安全和穩定的設定 371
8.10 高級InnoDB 設定 374
8.11 總結 376
第9 章 作業系統和硬體最佳化 377
9.1 什麼限制了MySQL 的性能 377
9.2 如何為MySQL 選擇CPU 378
9.2.1 哪個更好:更快的CPU 還是更多的CPU 378
9.2.2 CPU 架構 380
9.2.3 擴展到多個CPU 和核心 381
9.3 平衡記憶體和磁碟資源 382
9.3.1 隨機I/O 和順序I/O 383
9.3.2 快取,讀和寫 384
9.3.3 工作集是什麼 385
9.3.4 找到有效的記憶體/ 磁碟比例 386
9.3.5 選擇硬碟 387
9.4 固態存儲 389
9.4.1 快閃記憶體概述 390
9.4.2 快閃記憶體技術 391
9.4.3 快閃記憶體的基準測試 392
9.4.4 固態硬碟驅動器(SSD) 393
9.4.5 PCIe 存儲設備 395
9.4.6 其他類型的固態存儲 . 396
9.4.7 什麼時候應該使用快閃記憶體 396
9.4.8 使用Flashcache 397
9.4.9 最佳化固態存儲上的MySQL 399
9.5 為備庫選擇硬體 402
9.6 RAID 性能最佳化 403
9.6.1 RAID 的故障轉移、恢復和鏡像 405
9.6.2 平衡硬體RAID 和軟體RAID 406
9.6.3 RAID 配置和快取 407
9.7 SAN 和NAS 410
9.7.1 SAN 基準測試 411
9.7.2 使用基於NFS 或SMB 的SAN 412
9.7.3 MySQL 在SAN 上的性能 412
9.7.4 應該用SAN 嗎 413
9.8 使用多磁碟卷 414
9.9 網路配置 416
9.10 選擇作業系統 418
9.11 選擇檔案系統 419
9.12 選擇磁碟佇列調度策略 421
9.13 執行緒 422
9.14 記憶體交換區 422
9.15 作業系統狀態 424
9.15.1 如何閱讀vmstat 的輸出 425
9.15.2 如何閱讀iostat 的輸出 426
9.15.3 其他有用的工具 428
9.15.4 CPU 密集型的機器 428
9.15.5 I/O 密集型的機器 429
9.15.6 發生記憶體交換的機器 430
9.15.7 空閒的機器 430
9.16 總結 431
第10 章 複製 433
10.1 複製概述 433
10.1.1 複製解決的問題 434
10.1.2 複製如何工作 435
10.2 配置複製 436
10.2.1 創建複製賬號 437
10.2.2 配置主庫和備庫 437
10.2.3 啟動複製 439
10.2.4 從另一個伺服器開始複製 441
10.2.5 推薦的複製配置 443
10.3 複製的原理 445
10.3.1 基於語句的複製 445
10.3.2 基於行的複製 446
10.3.3 基於行或基於語句:哪種更優 446
10.3.4 複製檔案 448
10.3.5 傳送複製事件到其他備庫 449
10.3.6 複製過濾器 450
10.4 複製拓撲 452
10.4.1 一主庫多備庫 452
10.4.2 主動- 主動模式下的主- 主複製 453
10.4.3 主動- 被動模式下的主- 主複製 455
10.4.4 擁有備庫的主- 主結構 456
10.4.5 環形複製 457
10.4.6 主庫、分發主庫以及備庫 458
10.4.7 樹或金字塔形 460
10.4.8 定製的複製方案 460
10.5 複製和容量規劃 465
10.5.1 為什麼複製無法擴展寫操作 466
10.5.2 備庫什麼時候開始延遲 466
10.5.3 規劃冗餘容量 467
10.6 複製管理和維護 468
10.6.1 監控複製 468
10.6.2 測量備庫延遲 469
10.6.3 確定主備是否一致 469
10.6.4 從主庫重新同步備庫 470
10.6.5 改變主庫 471
10.6.6 在一個主- 主配置中交換角色 476
10.7 複製的問題和解決方案 477
10.7.1 數據損壞或丟失的錯誤 477
10.7.2 使用非事務型表 480
10.7.3 混合事務型和非事務型表 480
10.7.4 不確定語句 481
10.7.5 主庫和備庫使用不同的存儲引擎 481
10.7.6 備庫發生數據改變 481
10.7.7 不唯一的伺服器ID . 482
10.7.8 未定義的伺服器ID . 482
10.7.9 對未複製數據的依賴性 482
10.7.10 丟失的臨時表 483
10.7.11 不複製所有的更新 . 484
10.7.12 InnoDB 加鎖讀引起的鎖爭用 484
10.7.13 在主- 主複製結構中寫入兩台主庫 486
10.7.14 過大的複製延遲 488
10.7.15 來自主庫的過大的包 491
10.7.16 受限制的複製頻寬 . 491
10.7.17 磁碟空間不足 492
10.7.18 複製的局限性 492
10.8 複製有多快 492
10.9 MySQL 複製的高級特性 494
10.10 其他複製技術 496
10.11 總結 498
第11 章 可擴展的MySQL 501
11.1 什麼是可擴展性 501
11.1.1 正式的可擴展性定義 503
11.2 擴展MySQL 507
11.2.1 規劃可擴展性 507
11.2.2 為擴展贏得時間 508
11.2.3 向上擴展 509
11.2.4 向外擴展 510
11.2.5 通過多實例擴展 525
11.2.6 通過集群擴展 526
11.2.7 向內擴展 530
11.3 負載均衡 532
11.3.1 直接連線 534
11.3.2 引入中間件 537
11.3.3 一主多備間的負載均衡 540
11.4 總結 541
第12 章 高可用性 543
12.1 什麼是高可用性 543
12.2 導致宕機的原因 544
12.3 如何實現高可用性 545
12.3.1 提昇平均失效時間(MTBF) 545
12.3.2 降低平均恢復時間(MTTR) 547
12.4 避免單點失效 548
12.4.1 共享存儲或磁碟複製 549
12.4.2 MySQL 同步複製 551
12.4.3 基於複製的冗餘 555
12.5 故障轉移和故障恢復 556
12.5.1 提升備庫或切換角色 558
12.5.2 虛擬IP 地址或IP 接管 558
12.5.3 中間件解決方案 559
12.5.4 在套用中處理故障轉移 560
12.6 總結 560
第13 章 雲端的MySQL 563
13.1 雲的優點、缺點和相關誤解 564
13.2 MySQL 在雲端的經濟價值 566
13.3 雲中的MySQL 的可擴展性和高可用性 567
13.4 四種基礎資源 568
13.5 MySQL 在雲主機上的性能 569
13.5.1 在雲端的MySQL 基準測試 571
13.6 MySQL 資料庫即服務(DBaaS) 573
13.6.1 Amazon RDS 573
13.6.2 其他DBaaS 解決方案 574
13.7 總結 575
第14 章 套用層最佳化 577
14.1 常見問題 577
14.2 Web 伺服器問題 579
14.2.1 尋找最優並發度 581
14.3 快取 582
14.3.1 套用層以下的快取 583
14.3.2 套用層快取 584
14.3.3 快取控制策略 586
14.3.4 快取對象分層 587
14.3.5 預生成內容 588
14.3.6 作為基礎組件的快取 589
14.3.7 使用HandlerSocket 和memcached 589
14.4 拓展MySQL 590
14.5 MySQL 的替代品 590
14.6 總結 591
第15 章 備份與恢復 593
15.1 為什麼要備份 594
15.2 定義恢復需求 595
15.3 設計MySQL 備份方案 596
15.3.1 線上備份還是離線備份 597
15.3.2 邏輯備份還是物理備份 598
15.3.3 備份什麼 601
15.3.4 存儲引擎和一致性 603
15.4 管理和備份二進制日誌 605
15.4.1 二進制日誌格式 606
15.4.2 安全地清除老的二進制日誌 607
15.5 備份數據 607
15.5.1 生成邏輯備份 607
15.5.2 檔案系統快照 610
15.6 從備份中恢復 617
15.6.1 恢復物理備份 618
15.6.2 還原邏輯備份 619
15.6.3 基於時間點的恢復 622
15.6.4 更高級的恢復技術 624
15.6.5 InnoDB 崩潰恢復 625
15.7 備份和恢復工具 628
15.7.1 MySQL Enterprise Backup 628
15.7.2 Percona XtraBackup . 628
15.7.3 mylvmbackup 629
15.7.4 Zmanda Recovery Manager 629
15.7.5 mydumper 629
15.7.6 mysqldump. 629
15.8 備份腳本化 631
15.9 總結 633
第16 章 MySQL 用戶工具 635
16.1 接口工具 635
16.2 命令行工具集 636
16.3 SQL 實用集 637
16.4 監測工具 637
16.4.1 開源的監控工具 638
16.4.2 商業監控系統 640
16.4.3 Innotop 的命令行監控 642
16.5 總結 646
附錄A MySQL 分支與變種 649
附錄B MySQL 伺服器狀態 655
附錄C 大檔案傳輸 683
附錄D EXPLAIN 687
附錄E 鎖的調試 703
附錄F 在MySQL 上使用Sphinx 713
索引 739

相關詞條

熱門詞條

聯絡我們