| 作者 |
| 黄钊吉陈畅亮 吴一晴 |
| 丛书名 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9787201808061 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------SQL Server 性能优化与管理的艺术[按需印刷]--------------------------- 全书共15章,分为三部分,第一部分(第1~2章)为概述部分,阐述SQL Server方面的“性能”及相关概念。并给出常规的性能及性能相关的问题侦测的“方法论”,读者可以通过这两章的介绍,对SQL Server性能问题有一个高层次的认识。第二部分(第3~10章)为知识准备部分,这部分介绍了SQL Server性能相关的基础知识。只有了解了性能及影响性能的相关部分,才能准确地、高效地进行优化。第三部分(第11~15章)为工具使用及优化演示,在多服务器、大数据的环境下,不应该再使用原始的故障侦测方法,借用各种工具能更全面、更高效地找到问题并且解决问题。 通过这三部分的介绍,可以使读者有一个清晰的性能优化及管理方面的认识,并且通过大量演示,让读者能够较快地进入实战阶段。《SQL Server 性能优化与管理的艺术》的重点主要集中在第二部分,既介绍了性能相关的部分,以便后续使用,也给出了一个后续深入学习的“清单”,读者不应止步于本书,可以根据书中的知识点,进行更深入的学习。 ---------------------------SQL Server性能调优实战[按需印刷]--------------------------- 本书是一线DBA技术专家精心之作,积作者多年的经验结晶和**实践,也是目前市场上为数不多通过存储原理来讲解性能调优,剖析SQLServer架构从而帮助读者快速高效调优数据库的图书。书中首先简要介绍了SQLServer与性能实践相关的一些基础语法及配置信息,提出与数据库性能相关的几个概要信息,再根据SQLServer数据的内部实现原理讲解如何调整和优化SQLServer数据库实例的配置;接着介绍SQLServer数据库存储引擎的语句优化,执行计划内部原理以及索引等综合因素分析如何优化数据库语句,保证数据库的稳定性及效率;*后从SQLServer的数据库性能监控及高可用性解决方案,提出性能监控及设计层面的优化。 |
| 目录 |
---------------------------SQL Server 性能优化与管理的艺术[按需印刷]--------------------------- 《SQL Server 性能优化与管理的艺术》 前 言 第一部分 SQL Server性能优化概述 第1章 性能概述 2 1.1 何为性能 2 1.2 性能指标 3 1.3 性能目标 3 1.4 影响性能的常见因素 4 1.4.1 应用程序的体系结构 4 1.4.2 应用程序设计 5 1.4.3 事务和隔离级别 5 1.4.4 T-SQL代码 5 1.4.5 硬件资源 6 1.4.6 SQL Server配置 6 1.5 小结 8 第2章 初探优化 9 2.1 优化论 9 2.2 定义问题 10 2.2.1 使用工具找到性能瓶颈 12 2.2.2 通过性能数据进行分类 12 2.3 根据性能数据分析问题 14 2.4 验证处理手段及部署 14 2.5 问题归档 15 2.6 小结 15 第二部分 SQL Server性能优化理论知识 第3章 体系结构 18 3.1 SQL Server查询体系 18 3.2 数据库事务 22 3.2.1 事务特性 22 3.2.2 事务类型 22 3.3 查询的生命周期 23 3.3.1 SQL Server组件 23 3.3.2 缓冲池 23 3.3.3 简单的SELECT查询过程 23 3.4 执行模型 28 3.5 SQLOS 30 3.6 SQL Server 内存 30 3.6.1 物理内存和虚拟内存 30 3.6.2 SQL Server 内存 32 3.6.3 内存问题诊断 34 3.6.4 优化SQL Server内存配置 34 3.6.5 优化Ad-Hoc 工作负载 36 3.7 小结 38 第4章 硬件资源 39 4.1 CPU 39 4.1.1 SQL Server工作负载类型 39 4.1.2 CPU评估 40 4.1.3 CPU配置 43 4.2 存储系统 43 4.2.1 磁盘I/O 43 4.2.2 驱动器类型 44 4.2.3 RAID配置 45 4.2.4 配置存储系统 46 4.2.5 检查读写速率 46 4.3 CPU 性能侦测 48 4.3.1 侦测CPU压力 48 4.3.2 研究CPU相关的等待信息 49 4.3.3 查找CPU消耗高的查询 50 4.3.4 常见高CPU利用率的原因 51 4.4 I/O性能侦测 59 4.5 小结 59 第5章 查询优化器 60 5.1 查询过程 60 5.2 查询优化器 62 5.2.1 产生执行计划 62 5.2.2 连接 63 5.3 执行引擎 66 5.3.1 数据访问操作 66 5.3.2 聚合操作 70 5.3.3 并行执行 73 5.4 统计信息和开销预估 73 5.4.1 统计信息 73 5.4.2 统计信息维护 77 5.4.3 计算列上的统计信息 78 5.4.4 过滤索引上的统计信息 79 5.4.5 预估数量错误 81 5.4.6 更新统计信息 81 5.5 优化器工作过程 83 5.6 小结 88 第6章 索引及统计信息 89 6.1 索引基础 90 6.1.1 为什么要索引 90 6.1.2 索引的主要类型 91 6.1.3 索引元数据 91 6.2 索引存储基础 92 6.2.1 SQL Server存储基础 92 6.2.2 页的组织 95 6.2.3 检查工具 98 6.2.4 页碎片 110 6.3 索引统计信息 113 6.3.1 索引层级的统计信息 113 6.3.2 索引使用的统计信息 117 6.3.3 索引操作的统计信息 120 6.3.4 索引物理统计信息 126 6.4 索引误区及使用建议 127 6.4.1 常见误区 127 6.4.2 索引使用建议 135 6.4.3 关于索引的查询建议 137 6.5 索引维护 143 6.5.1 索引碎片 143 6.5.2 索引统计信息维护 155 6.6 索引工具 156 6.6.1 缺失索引DMO 156 6.6.2 使用DMO 158 6.6.3 数据库引擎优化顾问 159 6.6.4 使用DMO侦测索引问题 162 6.7 索引策略 165 6.7.1 堆 165 6.7.2 聚集索引 167 6.7.3 非聚集索引 168 6.7.4 索引存储 182 6.7.5 索引视图 185 6.8 索引分析 187 6.8.1 索引方法论 187 6.8.2 监控 188 6.8.3 分析 199 6.8.4 实施 212 6.8.5 重复 213 6.9 案例 213 6.10 小结 215 第7章 等待 216 7.1 等待简介 217 7.1.1 什么是等待 217 7.1.2 为什么需要等待信息 218 7.1.3 保存等待信息 218 7.2 查询等待 219 7.3 并行执行 219 7.3.1 CXPACKET 220 7.3.2 CXPACKET潜在问题 221 7.3.3 降低CXPACKET等待 221 7.3.4 CXPACKET深度分析 222 7.3.5 CXPACKET建议 222 7.4 多任务等待 223 7.4.1 SOS_SCHEDU-LER_YIELD 223 7.4.2 多任务类型 225 7.4.3 多任务潜在问题 226 7.4.4 降低多任务等待 226 7.5 I/O 等待 227 7.6 备份和还原等待 231 7.7 锁定等待 231 7.8 数据库日志等待 233 7.9 外部资源等待 235 7.10 其他常见的等待类型 237 7.11 小结 238 第8章 执行计划 239 8.1 基础知识 239 8.1.1 查询提交 240 8.1.2 预估与实际执行计划 241 8.1.3 执行计划重用 242 8.1.4 清除缓存的执行计划 243 8.1.5 执行计划格式 243 8.1.6 使用DMO获取缓存中的执行计划 243 8.1.7 使用SQL Trace自动获取执行计划 244 8.2 图形化执行计划 244 8.2.1 基础知识 245 8.2.2 单表查询 245 8.2.3 表关联 252 8.2.4 筛选数据 256 8.2.5 常见操作符 258 8.2.6 INSERT/UPDATE/DELETE的执行计划 261 8.2.7 复杂查询 264 8.3 控制执行计划 280 8.3.1 查询提示 281 8.3.2 联接提示 293 8.3.3 表提示 297 8.4 扩展信息 298 8.4.1 阅读庞大的执行计划 298 8.4.2 并行操作 305 8.4.3 强制参数化 306 8.4.4 使用计划指南 307 8.5 案例 313 8.6 小结 316 第9章 锁、阻塞和死锁 317 9.1 并发和事务 318 9.1.1 悲观并发和乐观并发 319 9.1.2 事务 320 9.1.3 丢失更新 325 9.2 锁的基础 327 9.2.1 锁定概述 327 9.2.2 锁资源/锁类型 328 9.2.3 锁模式 329 9.2.4 锁的持续时间 330 9.2.5 锁的所有权 330 9.2.6 锁的元数据 331 9.3 高级锁概念 332 9.3.1 锁兼容性 332 9.3.2 锁模式转换 333 9.3.3 意向锁 335 9.3.4 键范围锁 335 9.3.5 锁升级 336 9.3.6 其他类型的锁 338 9.3.7 非锁定引起的阻塞 339 9.4 控制锁行为 339 9.4.1 通过隔离级别控制并发性和锁定行为 340 9.4.2 设定锁的超时时间 340 9.4.3 锁提示 341 9.5 悲观并发的故障侦测 341 9.5.1 侦测锁定 341 9.5.2 阻塞的故障排查 344 9.6 乐观并发 348 9.6.1 行版本存储 349 9.6.2 行版本存储工作机制 349 9.6.3 基于快照的隔离模式 349 9.6.4 监控和管理版本存储 350 9.6.5 管理版本存储 351 9.6.6 选择并发模式 353 9.7 死锁 354 9.7.1 死锁类型 354 9.7.2 自动死锁侦测 356 9.7.3 捕获死锁 356 9.7.4 读懂死锁图 363 9.7.5 最小化死锁 364 9.8 监控和处理 366 9.8.1 使用DMV捕获阻塞信息 366 9.8.2 使用Extended Events和blocked_process_report事件捕获 368 9.8.3 阻塞问题解决方案 368 9.8.4 建议 369 9.9 小结 371 第10章 TempDB 372 10.1 TempDB简介 372 10.1.1 TempDB是什么 372 10.1.2 什么操作会用到TempDB 373 10.2 TempDB上的常见问题及监控 378 10.2.1 空间问题 378 10.2.2 TempDB的I/O瓶颈 382 10.2.3 过多的DDL操作导致系统表上的瓶颈 383 10.3 优化TempDB 383 10.3.1 配置TempDB 384 10.3.2 优化TempDB 385 10.3.3 扩充阅读 386 10.4 小结 386 第三部分 工具使用 第11章 使用传统工具定位瓶颈 388 11.1 使用性能监视器及PAL收集和分析性能 389 11.1.1 性能监视器 389 11.1.2 数据收集器集 392 11.1.3 使用PAL分析 403 11.2 使用DMO获取性能数据 407 11.2.1 DMO介绍 407 11.2.2 示例 407 11.3 使用Profiler获取性能数据 414 11.3.1 用法及注意事项 414 11.3.2 Profiler示例 416 11.3.3 SQL Trace示例 419 11.4 DBCC命令 422 11.4.1 DBCC SQLPERF 422 11.4.2 DBCC INPUTBUFFER 424 11.4.3 DBCC TRACEON/TRACEOFF 425 11.4.4 DBCC SHOWCONTIG 425 11.4.5 DBCC OPENTRAN 426 11.5 小结 427 第12章 使用新工具定位瓶颈 428 12.1?PSSDIAG 428 12.2 PowerShell 434 12.2.1 简介 434 12.2.2 打开PowerShell 434 12.2.3 使用PowerShell侦测服务器问题 435 12.3 小结 438 第13章 Extended Events 439 13.1 简介 439 13.2 创建扩展事件 444 13.3 查询收集的数据 449 13.3.1 监视实时数据 449 13.3.2 使用T-SQL查看 451 13.4 案例 452 13.5 小结 458 第14章 其他工具 459 14.1 SQLDiag 459 14.2 数据库性能优化顾问 462 14.2.1 使用DTA进行单查询分析 462 14.2.2 使用DTA进行全库分析 466 14.3 Windows事件日志及 SQL Server Errorlog 470 14.3.1 Windows事件日志 470 14.3.2 SQL Server 错误日志 471 14.4 小结 472 第15章 优化服务器配置 473 15.1 数据库工作负载特点 473 15.1.1 基础知识 473 15.1.2 工作负载配置 474 15.2 工作负载优化步骤 477 15.2.1 数据库设计 477 15.2.2 查询设计 478 15.2.3 数据库服务器配置 478 15.2.4 数据库管理 479 15.2.5 数据库备份 480 15.3 小结 481 ---------------------------SQL Server性能调优实战[按需印刷]--------------------------- Contents 序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.1 32位操作系统 39 4.1.2 64位操作系统 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 |