《高性能MySQL 第3版》PDF下载

  • 购买积分:21 如何计算积分?
  • 作  者:BARON SCBWARTZ,PETER ZAITSEV,VADIM TKACBENKO著;宁海元,周振兴,彭立勋等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2013
  • ISBN:9787121198854
  • 页数:764 页
图书介绍:本书为畅销书升级版,曾获jolt图书大奖。它不但可以帮助mysql初学者提高使用技巧,更为有经验的mysql dba指出了开发高性能mysql应用的途径。

第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选择标识符(identifiier) 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 MySQL 5.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