具体描述
《SQL Server性能调优实战》是一线DBA技术专家精心之作,积作者多年的经验结晶和 实践,也是目前市场上为数不多通过存储原理来讲解性能调优,剖析SQLServer架构从而帮助读者快速高效调优数据库的图书。
作者简介
陈畅亮,程序员出身,经过几年的软件开发之后转职为DBA,热衷于技术分享。多年来活跃于博客园,是微软SQL Server方向最有价值的专家(MVP),受邀以演讲嘉宾身份参加了2015年DTCC(中国数据库技术大会)。对SQLServer的设计与优化有深刻认识,实战经验丰富,同时撰写了大量关于SQL Servet的技术文章。研究方向为SQL Server、MySQL、NoSQL,以及分布式环境下海量数据存储的设计与开发。吴一晴,2007年毕业于厦门集美大学诚毅学院,同年就职于厦门某物流软件科技公司,担任架构师职位,主要从事C#开发及.net框架维护。2010至2014年就职于厦门某电子商务技术公司,并开始为美国亚马逊旗下Quidsi公司从事SQLServer的数据库管理及运维工作。201 5年就职于国内某家装互联网020企业,担任数据库管理员职位,主要从事Linux、MySQL、MorlgoDB以及PostgreSQL等开源项目的管理和架构规划及运维工作。
目录信息
序1
序2
第1章 安装、配置SQL Server 1
1.1 SQL Server概述 1
1.1.1 简介 1
1.1.2 发展历史 1
1.2 SQL Server安装 2
1.2.1 硬件准备与性能 2
1.2.2 操作系统的选择 3
1.3 SQL Server配置 4
1.3.1 配置管理器 4
1.3.2 数据库实例配置 5
1.4 小结 6
第2章 影响SQL Server性能的因素 7
2.1 服务器硬件 8
2.1.1 内存 8
2.1.2 CPU 8
2.1.3 磁盘I/O 9
2.1.4 网络带宽 9
2.2 SQL Server版本对性能的限制 10
2.3 SQL Server系统的配置 10
2.3.1 内存配置 10
2.3.2 CPU配置 11
2.3.3 I/O及数据文件配置 11
2.4 数据库结构的设计 12
2.4.1 好的性能出自好的设计 12
2.4.2 约束对性能的影响 12
2.4.3 适当的冗余 13
2.5 T—SQL语句的编写 13
2.5.1 编写T—SQL语句的注意事项及小窍门 13
2.5.2 使用简单SQL语句 14
2.6 小结 14
第3章 T—SQL与性能调优 15
3.1 编写健壮的T—SQL语句 15
3.2 使用查询语句 17
3.2.1 SELECT语句 17
3.2.2 SELECT语句的性能 18
3.3 使用排序子句 19
3.3.1 排序子句 19
3.3.2 排序的性能影响 19
3.3.3 排序对Tempdb的影响 20
3.4 使用T—SQL汇总 21
3.4.1 GROUP BY 21
3.4.2 DISTINCT 22
3.4.3 GROUP BY与性能 22
3.5 UPDATE语句 22
3.5.1 UPDATE 23
3.5.2 UPDATE语句与事务影响 23
3.6 DELETE语句 25
3.6.1 DELETE、TRUNCATE TABLE 25
3.6.2 删除操作与事务日志 26
3.7 使用过滤条件(WHERE子句)26
3.7.1 合理优化因素 26
3.7.2 合理利用索引 27
3.8 连接查询 27
3.8.1 连接类型 27
3.8.2 认识连接操作 28
3.9 子查询 30
3.9.1 子查询与性能 31
3.9.2 IN、EXISTS与LEFT JOIN的性能对比 31
3.9.3 FOR XML子句 32
3.10 批量更新数据 34
3.10.1 BULK...INSERT 34
3.10.2 INSERT...SELECT 34
3.10.3 SELECT...INTO 35
3.10.4 OUTPUT子句 35
3.10.5 MERGE 36
3.10.6 BCP工具 36
3.11 运行时动态管理视图 36
3.12 小结 37
第4章 SQL Server的内存管理 38
4.1 Windows的内存管理 38
4.1.132位操作系统 39
4.1.264位操作系统 41
4.2 SQL Server的内存管理 41
4.2.1 SQLOS内存管理组件 41
4.2.2 内存中的数据 44
4.3 诊断内存瓶颈 46
4.3.1 资源管理器诊断示例 48
4.3.2 性能计数器诊断示例 48
4.4 案例分析 49
4.4.1 案例一:内存不足造成的磁盘超负荷 49
4.4.2 案例二:内存不足的信号(RESOURCE_SEMAPHORE)50
4.5 小结 53
第5章 SQL Server的任务调度 54
5.1 任务调度者 54
5.2 工作者 55
5.3 任务 57
5.4 任务调度与资源等待 58
5.5 CPU性能监控及示例 61
5.5.1 使用动态管理视图诊断 61
5.5.2 使用性能计数器诊断 62
5.5.3 MDW 63
5.6 小结 65
第6章 SQL Server执行计划分析 66
6.1 查看执行计划 66
6.2 查询优化器与执行计划的选择 70
6.2.1 统计信息 71
6.2.2 统计信息与执行计划(示例详解)74
6.3 常用的执行计划操作符 75
6.3.1 数据访问操作符 76
6.3.2 关联操作符 79
6.3.3 聚合操作符 83
6.4 执行计划缓存及重编译 86
6.4.1 语句级别的重编译 87
6.4.2 导致重编译的因素 87
6.4.3 监视和解决重编译问题 88
6.5 执行计划实践 88
6.5.1 案例一(参数嗅探)88
6.5.2 案例二(疯狂的重编译)93
6.6 小结 95
第7章 索引 96
7.1 索引概念 97
7.1.1 什么是索引 97
7.1.2 索引的类型 97
7.1.3 特殊的索引 98
7.2 索引的物理结构 99
7.2.1 基本概念 99
7.2.2 查看文件存储格式的几种方法 103
7.2.3 RID的物理结构 110
7.2.4 UNIQUIFIER物理结构 117
7.2.5 堆表行记录的物理结构 129
7.2.6 堆表非聚集索引的物理结构 149
7.2.7 聚集索引的物理结构 185
7.2.8 非聚集索引的物理结构 191
7.2.9 NULL位图物理结构 197
7.2.10 行溢出物理结构 203
7.2.11 LOB的物理结构 209
7.3 索引的选择 229
7.3.1 覆盖索引 230
7.3.2 索引的分析 231
7.4 查看缺失的索引 238
7.4.1 执行计划中查看缺失索引 238
7.4.2 查看所有缺失索引的字段 238
7.5 查看无效索引 240
7.6 案例分析:统计信息失效 240
7.7 小结 243
第8章 锁、事务与性能 244
8.1 锁、事务要解决的问题 244
8.2 事务的控制 249
8.3 锁粒度 250
8.4 锁模式 250
8.5 锁兼容性 251
8.6 阻塞、死锁及性能优化 253
8.7 锁的监控 255
8.7.1 与锁相关的性能计数器 255
8.7.2 锁相关的动态管理视图简介 256
8.7.3 SQL Profiler 256
8.7.4 死锁标记 256
8.8 轻量级锁闩锁 259
8.8.1 闩锁模式 259
8.8.2 闩锁的兼容性 260
8.8.3 查看闩锁 260
8.9 自定义事务报警 262
8.9.1 阻塞报警 262
8.9.2 死锁报警 264
8.10 小结 265
第9章 理解和使用Tempdb 266
9.1 Tempdb的工作 266
9.2 表变量、临时表 267
9.2.1 统计信息 269
9.2.2 临时表和表变量的索引 269
9.2.3 表结构修改 270
9.3 Tempdb的并发阻塞 270
9.4 监视Tempdb 274
9.4.1 性能计数器 274
9.4.2 动态管理视图 274
9.5 小结 275
第10章 SQL Server数据库性能监控 276
10.1 SQL Profiler/Trace 276
10.1.1 选择跟踪模板 276
10.1.2 选择跟踪事件 278
10.1.3 过滤跟踪 279
10.2 Data Collector与MDW 280
10.2.1 MDW的配置 280
10.2.2 查看性能报表 281
10.3 性能监控的性能计数器 284
10.4 扩展事件 285
10.5 小结 288
第11章 SQL Server数据库企业级配置与性能 289
11.1 数据库表的配置 289
11.1.1 数据压缩 289
11.1.2 分区表和分区视图 290
11.2 高可用性解决方案 290
11.2.1 企业数据库发展阶段 290
11.2.2 业务功能的数据同步 293
11.3 小结 298
· · · · · · (收起)
读后感
用户评价
这本书的封面设计给我留下了深刻的第一印象,简约而不失专业感,深邃的蓝色背景搭配银白色的字体,仿佛预示着即将开启一段深入SQL Server性能优化世界的旅程。翻开扉页,一股油墨的清香扑面而来,纸张的触感也相当不错,厚实而富有质感,这让我对接下来的阅读充满了期待。作者在开篇就阐述了性能调优的意义和重要性,并非仅仅是为了追求极致的速度,更是为了保障业务的稳定运行、降低服务器的TCO(总拥有成本),以及提升用户体验。从这一点出发,我便能感受到作者的专业度和对读者需求的深刻理解,他并没有将性能调优仅仅停留在技术层面,而是将其上升到了战略和业务价值的高度。
最让我感到欣慰的是,作者在书中反复强调了“持续优化”和“量化评估”的重要性。他并没有将性能优化视为一蹴而就的事情,而是倡导一种长期的、迭代的过程。通过建立一套完善的性能监控体系,定期进行性能评估,并根据评估结果进行调整和优化,从而实现数据库性能的持续提升。这种理念对于我们这些常年与数据库打交道的从业者来说,具有极大的启发意义,它不仅仅是一本技术书籍,更是一种先进的工作方法论。
本书最大的亮点之一在于其对SQL Server内部机制的深度剖析。作者并没有止步于表面操作,而是深入到SQL Server的内存管理、I/O子系统、锁机制、事务隔离级别等方面,详细讲解了它们是如何影响数据库性能的。例如,在讲解缓冲池时,作者用生动的比喻和图示,清晰地阐述了它在数据缓存中的作用,以及如何通过调整相关配置参数来最大化其效率。在I/O优化部分,作者不仅介绍了文件配置、磁盘阵列的选择,还深入讲解了SQL Server如何与操作系统进行I/O交互,以及如何通过优化查询来减少不必要的I/O操作。这种“黑盒”级别的揭示,让我对SQL Server的理解上升到了一个全新的高度。
在并发控制和锁机制方面,本书的讲解也是非常深入和到位的。作者详细解释了SQL Server的锁粒度、锁类型、死锁的产生原因以及如何避免和解决死锁问题。他通过生动的图示和案例,清晰地阐述了不同事务隔离级别对并发性能的影响,以及如何在保证数据一致性的前提下,选择最合适的隔离级别。对于那些经常需要处理高并发场景的DBA来说,这一章节的内容无疑是宝藏,能够帮助我们更好地理解和管理数据库的并发访问。
除了技术层面的优化,本书也非常注重实战操作和落地。作者提供了大量的T-SQL脚本和PowerShell脚本,这些脚本不仅可以直接在生产环境中使用,而且作者还详细解释了脚本的每一行代码的含义和作用,以及如何根据实际情况进行修改和扩展。我尝试着按照书中的指导,优化了我们系统中一个长期存在的性能问题,结果令人惊喜,响应时间缩短了近一半。这种“理论与实践相结合”的学习方式,让我能够快速将学到的知识应用到实际工作中,并看到切实的成效,这对于一个一线DBA来说,其价值是无法估量的。
本书的整体结构安排得非常合理,逻辑性强,章节之间的过渡自然流畅。从基础概念到高级主题,再到实战应用,层层递进,让读者能够循序渐进地掌握SQL Server性能优化的各项技能。每一章节都以清晰的目标导向开始,以总结性的内容结束,帮助读者巩固所学知识。即使是对于SQL Server不太熟悉的初学者,也能够通过阅读本书,建立起对性能优化的全面认识。
在阅读的过程中,我惊喜地发现,本书并没有像我之前接触过的某些技术书籍那样,一开始就抛出一堆晦涩难懂的概念和复杂的公式。相反,作者以一种非常循序渐进的方式,从SQL Server的基础架构入手,逐步深入到查询执行计划、索引优化、统计信息管理等核心领域。每一章节的讲解都配以大量的实际案例,这些案例的选择都非常贴合我们在日常工作中遇到的各种场景,比如高并发下的响应缓慢、复杂查询的性能瓶颈、数据库连接池的优化等等。更重要的是,作者在分析这些案例时,不仅仅给出了“怎么做”,更重要的是解释了“为什么这么做”,以及背后的原理是什么,这种“知其然,知其所以然”的教学方式,让我受益匪浅。
书中关于查询优化和索引策略的章节,是我最为期待的,也是让我觉得最有价值的部分。作者详细讲解了如何阅读和理解查询执行计划,并且如何根据执行计划中的关键信息(如扫描类型、连接顺序、成本估算等)来判断查询的性能瓶颈。他提供的“三步法”分析流程,简单易懂,却又十分有效,帮助我快速定位到那些隐藏在复杂SQL语句中的性能“毒瘤”。在索引优化方面,本书的内容更是详尽。作者不仅介绍了聚集索引、非聚集索引、覆盖索引、函数索引等不同类型的索引,还深入讲解了如何根据查询模式、数据分布和业务需求来选择最优的索引策略。特别是关于索引维护和碎片整理的部分,提供了非常实用的建议和脚本,让我能够更有效地管理数据库索引。
总而言之,《SQL Server性能调优实战》是一本非常优秀的、值得反复阅读的专业技术书籍。它不仅为我提供了宝贵的理论知识和实用的技术方法,更重要的是,它改变了我对数据库性能优化的认知和工作方式。我强烈推荐这本书给所有从事SQL Server数据库管理、开发和性能优化的技术人员,相信您也会像我一样,从中获益匪浅,并在实际工作中找到解决性能问题的“金钥匙”。
本书在性能监控和故障排查方面的内容也给我留下了深刻的印象。作者介绍了SQL Server提供的各种性能指标和工具,如DMV(动态管理视图)、PerfMon(性能监视器)、SQL Server Profiler等,并且详细讲解了如何利用这些工具来收集、分析和解读性能数据。他提出的“四象限”分析法,将常见的性能问题进行了分类,并且针对每种类型的问题,给出了系统的排查思路和解决方案,这对于在面对突发性能故障时,能够保持冷静并有条不紊地进行处理,起到了至关重要的作用。
索引那一章占了全书近1/3的篇幅,多是讲底层存储结构的,太深了,感觉没太大必要。其它章节还好,讲得还是不错的,对我帮助很大。
深入浅出,有些话题更深入就更好了
深入浅出,有些话题更深入就更好了
索引那一章占了全书近1/3的篇幅,多是讲底层存储结构的,太深了,感觉没太大必要。其它章节还好,讲得还是不错的,对我帮助很大。
深入浅出,有些话题更深入就更好了