MySQL高性能书籍_第3版(中文)
2023-10-24 21:01:23 0 举报
AI智能生成
MySQL高性能书籍 书签
作者其他创作
大纲/内容
第1章 MySQL 架构与历史0; 37
1.1 MySQL 逻辑架构0; 37
1.1.1 连接管理与安全性0; 38
1.1.2 优化与执行0; 39
1.2 并发控制0; 39
1.2.1 读写锁0; 40
1.2.2 锁粒度0; 40
1.3 事务0; 42
1.3.1 隔离级别0; 44
1.3.2 死锁0; 45
1.3.3 事务日志0; 46
1.3.4 MySQL 中的事务0; 46
1.4 多版本并发控制0; 48
1.5 MySQL 的存储引擎0; 49
1.5.1 InnoDB 存储引擎0; 52
1.5.2 MyISAM 存储引擎0; 53
1.5.3 MySQL 内建的其他存储引擎0; 55
1.5.4 第三方存储引擎0; 58
1.5.5 选择合适的引擎0; 60
1.5.6 转换表的引擎0; 63
1.6 MySQL 时间线(Timeline)0; 65
1.7 MySQL 的开发模式0; 68
1.8 总结0; 69
第2章 MySQL 基准测试0; 71
2.1 为什么需要基准测试0; 71
2.2 基准测试的策略0; 73
2.2.1 测试何种指标0; 74
2.3 基准测试方法0; 76
2.3.1 设计和规划基准测试0; 77
2.3.2 基准测试应该运行多长时间0; 78
2.3.3 获取系统性能和状态0; 79
2.3.4 获得准确的测试结果0; 80
2.3.5 运行基准测试并分析结果0; 82
2.3.6 绘图的重要性0; 83
2.4 基准测试工具0; 85
2.4.1 集成式测试工具0; 85
2.4.2 单组件式测试工具0; 86
2.5 基准测试案例0; 88
2.5.1 http_load0; 89
2.5.2 MySQL 基准测试套件0; 90
2.5.3 sysbench0; 91
2.5.4 数据库测试套件中的dbt2 TPC-C 测试0; 96
2.5.5 Percona 的TPCC-MySQL 测试工具0; 99
2.6 总结0; 101
第3章 服务器性能剖析0; 103
3.1 性能优化简介0; 103
3.1.1 通过性能剖析进行优化0; 105
3.1.2 理解性能剖析0; 107
3.2 对应用程序进行性能剖析0; 108
3.2.1 测量PHP 应用程序0; 110
3.3 剖析MySQL 查询0; 113
3.3.1 剖析服务器负载0; 113
3.3.2 剖析单条查询0; 117
3.3.3 使用性能剖析0; 123
3.4 诊断间歇性问题0; 124
3.4.1 单条查询问题还是服务器问题0; 125
3.4.2 捕获诊断数据0; 129
3.4.3 一个诊断案例0; 134
3.5 其他剖析工具0; 142
3.5.1 使用USER_STATISTICS 表0; 142
3.5.2 使用strace0; 143
3.6 总结0; 144
第4章 Schema 与数据类型优化0; 147
4.1 选择优化的数据类型0; 147
4.1.1 整数类型0; 149
4.1.2 实数类型0; 149
4.1.3 字符串类型0; 150
4.1.4 日期和时间类型0; 157
4.1.5 位数据类型0; 159
4.1.6 选择标识符(identifier)0; 161
4.1.7 特殊类型数据0; 163
4.2 MySQL schema 设计中的陷阱0; 163
4.3 范式和反范式0; 165
4.3.1 范式的优点和缺点0; 166
4.3.2 反范式的优点和缺点0; 166
4.3.3 混用范式化和反范式化0; 167
4.4 缓存表和汇总表0; 168
4.4.1 物化视图0; 170
4.4.2 计数器表0; 171
4.5 加快ALTER TABLE 操作的速度0; 172
4.5.1 只修改.frm 文件0; 173
4.5.2 快速创建MyISAM 索引0; 175
4.6 总结0; 176
第5章 创建高性能的索引0; 177
5.1 索引基础0; 177
5.1.1 索引的类型0; 178
5.2 索引的优点0; 188
5.3 高性能的索引策略0; 189
5.3.1 独立的列0; 189
5.3.2 前缀索引和索引选择性0; 189
5.3.3 多列索引0; 193
5.3.4 选择合适的索引列顺序0; 195
5.3.5 聚簇索引0; 198
5.3.6 覆盖索引0; 207
5.3.7 使用索引扫描来做排序0; 211
5.3.8 压缩(前缀压缩)索引0; 213
5.3.9 冗余和重复索引0; 214
5.3.10 未使用的索引0; 217
5.3.11 索引和锁0; 217
5.4 索引案例学习0; 219
5.4.1 支持多种过滤条件0; 219
5.4.2 避免多个范围条件0; 221
5.4.3 优化排序0; 222
5.5 维护索引和表0; 223
5.5.1 找到并修复损坏的表0; 223
5.5.2 更新索引统计信息0; 224
5.5.3 减少索引和数据的碎片0; 226
5.6 总结0; 228
第6章 查询性能优化0; 231
6.1 为什么查询速度会慢0; 231
6.2 慢查询基础:优化数据访问0; 232
6.2.1 是否向服务器请求了不需要的数据0; 232
6.2.2 MySQL 是否在扫描额外的记录0; 234
6.3 重构查询的方式0; 237
6.3.1 一个复杂查询还是多个简单查询0; 237
6.3.2 切分查询0; 238
6.3.3 分解关联查询0; 239
6.4 查询执行的基础0; 240
6.4.1 MySQL 客户端/服务器通信协议0; 241
6.4.2 查询缓存0; 244
6.4.3 查询优化处理0; 244
6.4.4 查询执行引擎0; 258
6.4.5 返回结果给客户端0; 259
6.5 MySQL 查询优化器的局限性0; 259
6.5.1 关联子查询0; 259
6.5.2 UNION 的限制0; 264
6.5.3 索引合并优化0; 264
6.5.4 等值传递0; 265
6.5.5 并行执行0; 265
6.5.6 哈希关联0; 265
6.5.7 松散索引扫描0; 265
6.5.8 最大值和最小值优化0; 267
6.5.9 在同一个表上查询和更新0; 268
6.6 查询优化器的提示(hint)0; 268
6.7 优化特定类型的查询0; 272
6.7.1 优化COUNT() 查询0; 272
6.7.2 优化关联查询0; 275
6.7.3 优化子查询0; 275
6.7.4 优化GROUP BY 和DISTINCT0; 275
6.7.5 优化LIMIT 分页0; 277
6.7.6 优化SQL_CALC_FOUND_ROWS0; 279
6.7.7 优化UNION 查询0; 279
6.7.8 静态查询分析0; 280
6.7.9 使用用户自定义变量0; 280
6.8 案例学习0; 287
6.8.1 使用MySQL 构建一个队列表0; 287
6.8.2 计算两点之间的距离0; 290
6.8.3 使用用户自定义函数0; 293
6.9 总结0; 294
第7章 MySQL 高级特性0; 295
7.1 分区表0; 295
7.1.1 分区表的原理0; 296
7.1.2 分区表的类型0; 297
7.1.3 如何使用分区表0; 298
7.1.4 什么情况下会出问题0; 299
7.1.5 查询优化0; 302
7.1.6 合并表0; 303
7.2 视图0; 306
7.2.1 可更新视图0; 308
7.2.2 视图对性能的影响0; 309
7.2.3 视图的限制0; 310
7.3 外键约束0; 311
7.4 在MySQL 内部存储代码0; 312
7.4.1 存储过程和函数0; 314
7.4.2 触发器0; 315
7.4.3 事件0; 317
7.4.4 在存储程序中保留注释0; 319
7.5 游标0; 319
7.6 绑定变量0; 320
7.6.1 绑定变量的优化0; 322
7.6.2 SQL 接口的绑定变量0; 322
7.6.3 绑定变量的限制0; 324
7.7 用户自定义函数0; 325
7.8 插件0; 326
7.9 字符集和校对0; 327
7.9.1 MySQL 如何使用字符集0; 328
7.9.2 选择字符集和校对规则0; 331
7.9.3 字符集和校对规则如何影响查询0; 332
7.10 全文索引0; 335
7.10.1 自然语言的全文索引0; 336
7.10.2 布尔全文索引0; 338
7.10.3 MySQL5.1 中全文索引的变化0; 339
7.10.4 全文索引的限制和替代方案0; 340
7.10.5 全文索引的配置和优化0; 342
7.11 分布式(XA)事务0; 343
7.11.1 内部XA 事务0; 343
7.11.2 外部XA 事务0; 344
7.12 查询缓存0; 345
7.12.1 MySQL 如何判断缓存命中0; 345
7.12.2 查询缓存如何使用内存0; 347
7.12.3 什么情况下查询缓存能发挥作用0; 349
7.12.4 如何配置和维护查询缓存0; 352
7.12.5 InnoDB 和查询缓存0; 355
7.12.6 通用查询缓存优化0; 356
7.12.7 查询缓存的替代方案0; 357
7.13 总结0; 357
第8章 优化服务器设置0; 361
8.1 MySQL 配置的工作原理0; 362
8.1.1 语法、作用域和动态性0; 363
8.1.2 设置变量的副作用0; 364
8.1.3 入门0; 367
8.1.4 通过基准测试迭代优化0; 368
8.2 什么不该做0; 369
8.3 创建MySQL 配置文件0; 371
8.3.1 检查MySQL 服务器状态变量0; 375
8.4 配置内存使用0; 376
8.4.1 MySQL 可以使用多少内存?0; 376
8.4.2 每个连接需要的内存0; 377
8.4.3 为操作系统保留内存0; 377
8.4.4 为缓存分配内存0; 378
8.4.5 InnoDB 缓冲池(Buffer Pool)0; 378
8.4.6 MyISAM 键缓存(Key Caches)0; 380
8.4.7 线程缓存0; 382
8.4.8 表缓存(Table Cache)0; 383
8.4.9 InnoDB 数据字典(Data Dictionary)0; 384
8.5 配置MySQL 的I/O 行为0; 385
8.5.1 InnoDB I/O 配置0; 385
8.5.2 MyISAM 的I/O 配置0; 397
8.6 配置MySQL 并发0; 399
8.6.1 InnoDB 并发配置0; 400
8.6.2 MyISAM 并发配置0; 401
8.7 基于工作负载的配置0; 402
8.7.1 优化BLOB 和TEXT 的场景0; 403
8.7.2 优化排序(Filesorts)0; 404
8.8 完成基本配置0; 405
8.9 安全和稳定的设置0; 407
8.10 高级InnoDB 设置0; 410
8.11 总结0; 412
第9章 操作系统和硬件优化0; 413
9.1 什么限制了MySQL 的性能0; 413
9.2 如何为MySQL 选择CPU0; 414
9.2.1 哪个更好:更快的CPU 还是更多的CPU0; 414
9.2.2 CPU 架构0; 416
9.2.3 扩展到多个CPU 和核心0; 417
9.3 平衡内存和磁盘资源0; 418
9.3.1 随机I/O 和顺序I/O0; 419
9.3.2 缓存,读和写0; 420
9.3.3 工作集是什么0; 421
9.3.4 找到有效的内存/磁盘比例0; 422
9.3.5 选择硬盘0; 423
9.4 固态存储0; 425
9.4.1 闪存概述0; 426
9.4.2 闪存技术0; 427
9.4.3 闪存的基准测试0; 428
9.4.4 固态硬盘驱动器(SSD)0; 429
9.4.5 PCIe 存储设备0; 431
9.4.6 其他类型的固态存储0; 432
9.4.7 什么时候应该使用闪存0; 432
9.4.8 使用Flashcache0; 433
9.4.9 优化固态存储上的MySQL0; 435
9.5 为备库选择硬件0; 438
9.6 RAID 性能优化0; 439
9.6.1 RAID 的故障转移、恢复和镜像0; 441
9.6.2 平衡硬件RAID 和软件RAID0; 442
9.6.3 RAID 配置和缓存0; 443
9.7 SAN 和NAS0; 446
9.7.1 SAN 基准测试0; 447
9.7.2 使用基于NFS 或SMB 的SAN0; 448
9.7.3 MySQL 在SAN 上的性能0; 448
9.7.4 应该用SAN 吗0; 449
9.8 使用多磁盘卷0; 450
9.9 网络配置0; 452
9.10 选择操作系统0; 454
9.11 选择文件系统0; 455
9.12 选择磁盘队列调度策略0; 457
9.13 线程0; 458
9.14 内存交换区0; 458
9.15 操作系统状态0; 460
9.15.1 如何阅读vmstat 的输出0; 461
9.15.2 如何阅读iostat 的输出0; 462
9.15.3 其他有用的工具0; 464
9.15.4 CPU 密集型的机器0; 464
9.15.5 I/O 密集型的机器0; 465
9.15.6 发生内存交换的机器0; 466
9.15.7 空闲的机器0; 466
9.16 总结0; 467
第10章 复制0; 469
10.1 复制概述0; 469
10.1.1 复制解决的问题0; 470
10.1.2 复制如何工作0; 471
10.2 配置复制0; 472
10.2.1 创建复制账号0; 473
10.2.2 配置主库和备库0; 473
10.2.3 启动复制0; 475
10.2.4 从另一个服务器开始复制0; 477
10.2.5 推荐的复制配置0; 479
10.3 复制的原理0; 481
10.3.1 基于语句的复制0; 481
10.3.2 基于行的复制0; 482
10.3.3 基于行或基于语句:哪种更优0; 482
10.3.4 复制文件0; 484
10.3.5 发送复制事件到其他备库0; 485
10.3.6 复制过滤器0; 486
10.4 复制拓扑0; 488
10.4.1 一主库多备库0; 488
10.4.2 主动- 主动模式下的主- 主复制0; 489
10.4.3 主动- 被动模式下的主- 主复制0; 491
10.4.4 拥有备库的主- 主结构0; 492
10.4.5 环形复制0; 493
10.4.6 主库、分发主库以及备库0; 494
10.4.7 树或金字塔形0; 496
10.4.8 定制的复制方案0; 496
10.5 复制和容量规划0; 501
10.5.1 为什么复制无法扩展写操作0; 502
10.5.2 备库什么时候开始延迟0; 502
10.5.3 规划冗余容量0; 503
10.6 复制管理和维护0; 504
10.6.1 监控复制0; 504
10.6.2 测量备库延迟0; 505
10.6.3 确定主备是否一致0; 505
10.6.4 从主库重新同步备库0; 506
10.6.5 改变主库0; 507
10.6.6 在一个主-主配置中交换角色0; 512
10.7 复制的问题和解决方案0; 513
10.7.1 数据损坏或丢失的错误0; 513
10.7.2 使用非事务型表0; 516
10.7.3 混合事务型和非事务型表0; 516
10.7.4 不确定语句0; 517
10.7.5 主库和备库使用不同的存储引擎0; 517
10.7.6 备库发生数据改变0; 517
10.7.7 不唯一的服务器ID0; 518
10.7.8 未定义的服务器ID0; 518
10.7.9 对未复制数据的依赖性0; 518
10.7.10 丢失的临时表0; 519
10.7.11 不复制所有的更新0; 520
10.7.12 InnoDB 加锁读引起的锁争用0; 520
10.7.13 在主-主复制结构中写入两台主库0; 522
10.7.14 过大的复制延迟0; 524
10.7.15 来自主库的过大的包0; 527
10.7.16 受限制的复制带宽0; 527
10.7.17 磁盘空间不足0; 528
10.7.18 复制的局限性0; 528
10.8 复制有多快0; 528
10.9 MySQL 复制的高级特性0; 530
10.10 其他复制技术0; 532
10.11 总结0; 534
第11章 可扩展的MySQL0; 537
11.1 什么是可扩展性0; 537
11.1.1 正式的可扩展性定义0; 539
11.2 扩展MySQL0; 543
11.2.1 规划可扩展性0; 543
11.2.2 为扩展赢得时间0; 544
11.2.3 向上扩展0; 545
11.2.4 向外扩展0; 546
11.2.5 通过多实例扩展0; 561
11.2.6 通过集群扩展0; 562
11.2.7 向内扩展0; 566
11.3 负载均衡0; 568
11.3.1 直接连接0; 570
11.3.2 引入中间件0; 573
11.3.3 一主多备间的负载均衡0; 576
11.4 总结0; 577
第12章 高可用性0; 579
12.1 什么是高可用性0; 579
12.2 导致宕机的原因0; 580
12.3 如何实现高可用性0; 581
12.3.1 提升平均失效时间(MTBF)0; 581
12.3.2 降低平均恢复时间(MTTR)0; 583
12.4 避免单点失效0; 584
12.4.1 共享存储或磁盘复制0; 585
12.4.2 MySQL 同步复制0; 587
12.4.3 基于复制的冗余0; 591
12.5 故障转移和故障恢复0; 592
12.5.1 提升备库或切换角色0; 594
12.5.2 虚拟IP 地址或IP 接管0; 594
12.5.3 中间件解决方案0; 595
12.5.4 在应用中处理故障转移0; 596
12.6 总结0; 596
第13章 云端的MySQL0; 599
13.1 云的优点、缺点和相关误解0; 600
13.2 MySQL 在云端的经济价值0; 602
13.3 云中的MySQL 的可扩展性和高可用性0; 603
13.4 四种基础资源0; 604
13.5 MySQL 在云主机上的性能0; 605
13.5.1 在云端的MySQL 基准测试0; 607
13.6 MySQL 数据库即服务(DBaaS)0; 609
13.6.1 Amazon RDS0; 609
13.6.2 其他DBaaS 解决方案0; 610
13.7 总结0; 611
第14章 应用层优化0; 613
14.1 常见问题0; 613
14.2 Web 服务器问题0; 615
14.2.1 寻找最优并发度0; 617
14.3 缓存0; 618
14.3.1 应用层以下的缓存0; 619
14.3.2 应用层缓存0; 620
14.3.3 缓存控制策略0; 622
14.3.4 缓存对象分层0; 623
14.3.5 预生成内容0; 624
14.3.6 作为基础组件的缓存0; 625
14.3.7 使用HandlerSocket和memcached0; 625
14.4 拓展MySQL0; 626
14.5 MySQL 的替代品0; 626
14.6 总结0; 627
第15章 备份与恢复0; 629
15.1 为什么要备份0; 630
15.2 定义恢复需求0; 631
15.3 设计MySQL 备份方案0; 632
15.3.1 在线备份还是离线备份0; 633
15.3.2 逻辑备份还是物理备份0; 634
15.3.3 备份什么0; 637
15.3.4 存储引擎和一致性0; 639
15.4 管理和备份二进制日志0; 641
15.4.1 二进制日志格式0; 642
15.4.2 安全地清除老的二进制日志0; 643
15.5 备份数据0; 643
15.5.1 生成逻辑备份0; 643
15.5.2 文件系统快照0; 646
15.6 从备份中恢复0; 653
15.6.1 恢复物理备份0; 654
15.6.2 还原逻辑备份0; 655
15.6.3 基于时间点的恢复0; 658
15.6.4 更高级的恢复技术0; 660
15.6.5 InnoDB 崩溃恢复0; 661
15.7 备份和恢复工具0; 664
15.7.1 MySQL Enterprise Backup0; 664
15.7.2 Percona XtraBackup0; 664
15.7.3 mylvmbackup0; 665
15.7.4 Zmanda Recovery Manager0; 665
15.7.5 mydumper0; 665
15.7.6 mysqldump0; 665
15.8 备份脚本化0; 667
15.9 总结0; 669
第16章 MySQL 用户工具0; 671
16.1 接口工具0; 671
16.2 命令行工具集0; 672
16.3 SQL 实用集0; 673
16.4 监测工具0; 673
16.4.1 开源的监控工具0; 674
16.4.2 商业监控系统0; 676
16.4.3 Innotop 的命令行监控0; 678
16.5 总结0; 682
附录A MySQL 分支与变种0; 685
附录B MySQL 服务器状态0; 691
附录C 大文件传输0; 719
附录D EXPLAIN0; 723
附录E 锁的调试0; 739
附录F 在MySQL 上使用Sphinx0; 749
索引0; 775
0 条评论
下一页