SQL Server高级故障排除和性能优化
Dmitri Korotkevitch
宋锦珂 译
出版时间:2024年08月
页数:517
“这本书汇集了大量的技术、提示和脚本,来被动和主动地解决问题。我真希望25年前,当我开始使用SQL Server时,也有这样一本书就好了。”
——Thomas Grohser
SOL Server基础架构师

本书全面讲解了Microsoft SOL Server故障排除和性能优化的最佳实践。数据库工程师,包括数据库开发人员和数据库管理员,都将学习如何识别性能问题、并通过利用各种方法来排除系统故障,以及如何确定优化工作的优先级,从而尽可能获得最佳系统性能。
本书作者是Microsoft数据平台的MVP和Microsoft认证大师(MCM),他解释了SOL Server数据库组件之间的相互依赖关系。你将学会如何快速检测分析你的系统并找到问题的根本原因。本书中提到的所有技术与所有版本的SOL Server都兼容,并涵盖了基于云的SOL Server安装步骤。
● 了解性能问题是如何体现在SQL Server中的。
● 了解SQLServer的检测工具、检测方法和检测技术。
● 对SQLServer的安装进行健康检查。
● 了解SQLServer组件之间的依赖关系。
● 优化SQLServer来提高性能并减少瓶颈。
● 检测优化效果不佳的查询语句和查询执行计划中效率低下问题。
● 查找低效的索引和常见数据库设计问题。
● 将这些技术用于Microsoft Azure sQL数据库、Azure SQL托管的实例和针对SQL Server的Amazon RDS。
  1. 前言
  2. 第1章 SQL Server的安装和配置
  3. 1.1 硬件和OS考虑事项
  4. 1.1.1 CPU
  5. 1.1.2 内存
  6. 1.1.3 磁盘子系统
  7. 1.1.4 网络
  8. 1.1.5 OS和应用程序
  9. 1.1.6 虚拟化和云
  10. 1.2 配置你的SQL Server
  11. 1.2.1 SQL Server版本和补丁级别
  12. 1.2.2 即时文件初始化
  13. 1.2.3 tempdb配置
  14. 1.2.4 跟踪标志
  15. 1.2.5 服务器选项
  16. 1.3 配置你的数据库
  17. 1.3.1 数据库设置
  18. 1.3.2 事务日志设置
  19. 1.3.3 数据文件和文件组
  20. 1.4 分析SQL Server错误日志
  21. 1.5 合并实例和数据库
  22. 1.6 观察效应
  23. 1.7 总结
  24. 1.8 故障排除清单
  25. 第2章 SQL Server执行模型和等待统计
  26. 2.1 SQL Server:高层架构
  27. 2.2 SQLOS和执行模型
  28. 2.3 等待统计
  29. 2.4 与执行模型相关的动态管理视图
  30. 2.4.1 sys.dm_os_wait_stats
  31. 2.4.2 sys.dm_exec_session_wait_stats
  32. 2.4.3 sys.dm_os_waiting_tasks
  33. 2.4.4 sys.dm_exec_requests
  34. 2.4.5 sys.dm_os_schedulers
  35. 2.5 资源治理器概述
  36. 2.6 总结
  37. 第3章 磁盘子系统性能
  38. 3.1 SQL Server I/O子系统解析
  39. 3.1.1 调度和I/O
  40. 3.1.2 数据读取
  41. 3.1.3 数据写入
  42. 3.2 存储子系统:整体预览
  43. 3.2.1 sys.dm_io_virtual_file_stats视图
  44. 3.2.2 性能计数器和OS指标
  45. 3.2.3 虚拟化、HBA和存储层
  46. 3.3 检查点调优
  47. 3.4 I/O等待
  48. 3.4.1 ASYNC_IO_COMPLETION等待
  49. 3.4.2 IO_COMPLETION等待
  50. 3.4.3 WRITELOG等待
  51. 3.4.4 WRITE_COMPLETION等待
  52. 3.4.5 PAGEIOLATCH等待
  53. 3.5 总结
  54. 第4章 低效查询
  55. 4.1 低效查询的影响
  56. 4.2 基于计划缓存的执行统计
  57. 4.3 扩展事件和SQL Trace
  58. 4.4 查询存储
  59. 4.4.1 查询存储SSMS报告
  60. 4.4.2 使用查询存储DMV
  61. 4.5 第三方工具
  62. 4.6 总结
  63. 第5章 数据存储和优化查询语句
  64. 5.1 数据存储和访问模式
  65. 5.1.1 基于行的存储表
  66. 5.1.2 B-Tree索引
  67. 5.1.3 复合索引
  68. 5.1.4 非聚类索引(Nonclustered Indexes)
  69. 5.2 索引碎片
  70. 5.3 统计信息和基数估算
  71. 5.3.1 统计信息维护
  72. 5.3.2 基数估算模型
  73. 5.4 分析执行计划
  74. 5.4.1 行模式和批处理模式执行
  75. 5.4.2 实时查询统计和执行统计分析
  76. 5.5 常见问题和低效
  77. 5.5.1 低效代码
  78. 5.5.2 低效的Index Seek
  79. 5.5.3 错误的join类型
  80. 5.5.4 过多的键查询
  81. 5.6 为数据建立索引
  82. 5.7 总结
  83. 第6章 CPU负载
  84. 6.1 未优化的查询语句和T-SQL代码
  85. 6.1.1 低效的T-SQL代码
  86. 6.1.2 用于解决高CPU负载的脚本
  87. 6.1.3 需要注意未优化的查询模式
  88. 6.2 查询编译和计划缓存
  89. 6.2.1 参数敏感计划
  90. 6.2.2 参数值的独立性
  91. 6.3 编译和参数化
  92. 6.3.1 自动参数化
  93. 6.3.2 简单参数化
  94. 6.3.3 强制参数化
  95. 6.4 并行性
  96. 6.5 总结
  97. 第7章 内存问题
  98. 7.1 SQL Server的内存使用和配置
  99. 7.1.1 配置SQL Server的内存
  100. 7.1.2 多少内存才足够
  101. 7.2 内存分配
  102. 7.2.1 内存管理器
  103. 7.2.2 DBCC MEMORYSTATUS命令
  104. 7.3 查询执行和内存授权
  105. 7.3.1 优化内存密集型查询
  106. 7.3.2 内存授权反馈
  107. 7.3.3 控制内存授权大小
  108. 7.4 In-Memory OLTP的内存使用和检测
  109. 7.5 总结
  110. 第8章 锁、阻塞和并发
  111. 8.1 锁类型和锁行为
  112. 8.1.1 主要的锁类型
  113. 8.1.2 锁的兼容性
  114. 8.1.3 事务的隔离级别和锁行为
  115. 8.2 阻塞问题
  116. 8.2.1 实时检测阻塞
  117. 8.2.2 使用阻塞进程报告
  118. 8.2.3 事件通知和阻塞监控框架
  119. 8.3 死锁
  120. 8.3.1 死锁检测
  121. 8.3.2 锁和索引
  122. 8.4 乐观隔离级别
  123. 8.4.1 已提交读快照隔离级别
  124. 8.4.2 快照隔离级别
  125. 8.5 模式锁
  126. 8.6 锁升级
  127. 8.7 与锁相关的等待
  128. 8.7.1 LCK_M_U等待类型
  129. 8.7.2 LCK_M_S等待类型
  130. 8.7.3 LCK_M_X等待类型
  131. 8.7.4 LCK_M_SCH_S和LCK_M_SCH_M等待类型
  132. 8.7.5 意向LCK_M_I*等待类型
  133. 8.7.6 范围锁LCK_M_R*等待类型
  134. 8.8 总结
  135. 第9章 tempdb的使用和性能
  136. 9.1 临时对象:使用和最佳实践
  137. 9.1.1 临时表和表变量
  138. 9.1.2 临时对象缓存
  139. 9.1.3 表值参数
  140. 9.1.4 tempdb中的常规表和事务日志
  141. 9.2 tempdb内部的消费者
  142. 9.2.1 版本存储
  143. 9.2.2 溢出
  144. 9.3 常见的tempdb问题
  145. 9.3.1 系统页竞争
  146. 9.3.2 空间不足
  147. 9.4 tempdb的配置
  148. 9.5 总结
  149. 第10章 闩锁
  150. 10.1 介绍闩锁
  151. 10.2 页闩锁
  152. 10.2.1 解决热点问题:OPTIMIZE_FOR_SEQUENTIAL_KEY索引选项
  153. 10.2.2 解决热点问题:hash分区
  154. 10.2.3 解决热点问题:In-Memory OLTP
  155. 10.3 其他锁类型
  156. 10.4 总结
  157. 第11章 事务日志
  158. 11.1 事务日志内部原理
  159. 11.1.1 数据修改和事务日志
  160. 11.1.2 显式事务和自动提交事务及日志开销
  161. 11.1.3 延迟耐久性
  162. 11.1.4 In-Memory OLTP事务日志
  163. 11.1.5 虚拟日志文件
  164. 11.2 事务日志配置
  165. 11.3 日志截断问题
  166. 11.3.1 LOG_BACKUP日志重用等待
  167. 11.3.2 ACTIVE_TRANSACTION日志重用等待
  168. 11.3.3 AVAILABILITY_REPLICA日志重用等待
  169. 11.3.4 DATABASE_MIRRORING日志重用等待
  170. 11.3.5 REPLICATION日志重用等待
  171. 11.3.6 ACTIVE_BACKUP_OR_RESTORE日志重用等待
  172. 11.3.7 其他缓解策略
  173. 11.4 加速数据库恢复
  174. 11.5 事务日志吞吐量
  175. 11.6 总结
  176. 第12章 AlwaysOn Availability Groups
  177. 12.1 AlwaysOn Availability Groups概述
  178. 12.2 Availability Groups队列
  179. 12.3 同步复制和HADR_SYNC_COMMIT的风险
  180. 12.4 异步复制和可读的辅助节点
  181. 12.5 并行redo
  182. 12.6 Troubleshoot故障转移事件
  183. 12.6.1 Availability Groups和Windows Server故障转移集群
  184. 12.6.2 故障转移检测
  185. 12.6.3 当故障转移未发生时
  186. 12.7 总结
  187. 第13章 其他值得注意的等待类型
  188. 13.1 异步网络I/O等待
  189. 13.2 线程池(THREADPOOL)等待
  190. 13.3 备份相关等待
  191. 13.3.1 提高备份性能
  192. 13.3.2 BUFFERCOUNT和MAXTRANSFERSIZE选项
  193. 13.3.3 部分数据库备份
  194. 13.4 HTBUILD和其他HT*等待
  195. 13.5 抢占式等待
  196. 13.5.1 PREEMPTIVE_OS_WRITEFILEGATHER等待类型
  197. 13.5.2 PREEMPTIVE_OS_WRITEFILE等待类型
  198. 13.5.3 Authentication-Related等待类型
  199. 13.5.4 OLEDB等待
  200. 13.6 等待类型:小结
  201. 13.7 总结
  202. 第14章 数据库模式和索引分析
  203. 14.1 数据库模式分析
  204. 14.1.1 堆表
  205. 14.1.2 具有unique identifier数据类型的索引
  206. 14.1.3 宽且不唯一的聚集索引
  207. 14.1.4 不受信任的外键
  208. 14.1.5 没有索引的外键
  209. 14.1.6 冗余索引
  210. 14.1.7 高标识值
  211. 14.2 索引分析
  212. 14.2.1 sys.dm_db_index_usage_stats视图
  213. 14.2.2 sys.dm_db_index_operational_stats视图
  214. 14.2.3 整体视角:sp_Index_Analysis
  215. 14.3 总结
  216. 第15章 在虚拟化环境中的SQL Server
  217. 15.1 是否需要虚拟化,是个问题
  218. 15.2 在虚拟化环境中配置SQL Server
  219. 15.2.1 容量规划
  220. 15.2.2 CPU配置
  221. 15.2.3 内存
  222. 15.2.4 存储
  223. 15.2.5 网络
  224. 15.3 虚拟磁盘管理
  225. 15.4 备份策略与工具
  226. 15.5 在虚拟环境中的检测
  227. 15.5.1 CPU带宽不足
  228. 15.5.2 内存压力
  229. 15.5.3 磁盘子系统性能
  230. 15.6 总结
  231. 第16章 云中的SQL Server
  232. 16.1 云平台:一个30000英尺的视角
  233. 16.1.1 平台可靠性
  234. 16.1.2 限流
  235. 16.1.3 拓扑
  236. 16.2 连接网络连接和处理暂时性错误
  237. 16.2.1 访问数据库实例
  238. 16.2.2 暂时性错误
  239. 16.3 云中的SQL Server VM
  240. 16.3.1 I/O设置和性能
  241. 16.3.2 高可用性设置
  242. 16.3.3 跨区域延迟
  243. 16.4 托管的Microsoft Azure SQL服务
  244. 16.4.1 服务架构和设计考虑
  245. 16.4.2 故障排除的方法
  246. 16.5 Amazon SQL Server RDS
  247. 16.5.1 CloudWatch
  248. 16.5.2 Performance Insights
  249. 16.6 Google Cloud SQL
  250. 16.7 总结
  251. 附录 等待类型
书名:SQL Server高级故障排除和性能优化
作者:Dmitri Korotkevitch
译者:宋锦珂 译
国内出版社:中国电力出版社
出版时间:2024年08月
页数:517
书号:978-7-5198-8854-1
原版书书名:SQL Server Advanced Troubleshooting and Performance Tuning
原版书出版商:O'Reilly Media
Dmitri Korotkevitch
 
Dmitri Korotkevitch是Microsoft数据平台MVP和微软认证大师(SOL Server),他拥有多年的IT工作经验,包括作为应用程序开发人员和数据库开发人员、数据库管理员和数据库架构师来使用Microsoft SQL Server。Dmitri擅长复杂的OLTP系统的设计、开发和性能优化,这些系统每秒要全天候处理数千次事务。目前,他领导着Chewy.com的数据库服务团队,为世界各地的客户提供SOL Server的咨询服务和培训。
 
 
本书封面上的动物是一只西部穴居猫头鹰(学名:Athene cunicularia)。雅典娜属的猫头鹰被称为“小猫头鹰”,它们的名字代表了传统上与希腊女神雅典娜相关的小猫头鹰。穴居猫头鹰很小,但腿比大多数猫头鹰长。它们集中分布在北美和南美,不过正如其俗名所暗示的那样,它们生活在空旷地区的洞穴中,而不是像大多数猫头鹰那样生活在树上。
穴居猫头鹰有16个现存亚种。它们之间在外观上略有不同,但大多数都有棕色的头部和翅膀,有白色斑点、突出的白色眉毛和白色的下巴斑块。胸部和腹部也是白色的,根据亚种的不同,会有不同的棕色图案。穴居猫头鹰的幼崽看起来很相似,但缺乏白色斑点。雄性和雌性在外观上也很相似,但雄性的颜色较浅,这是因为它们白天在户外活动的时间更多,而且它们的羽毛颜色会因阳光而褪色。
猫头鹰通常在地松鼠的洞穴中筑巢。如果找不到合适的洞穴,它们会自己挖洞。成对的猫头鹰通常会终身交配。雌鸟每窝产卵4~12枚,孵化期为3~4周。蛋孵化后,父母双方共同喂养雏鸟。它们主要吃小型啮齿动物和大型昆虫。与其他猫头鹰不同,它们也吃水果和种子。
穴居猫头鹰在加拿大属于濒危物种,而在墨西哥和美国一些州属于受威胁的物种。不过,它们广泛分布于南美洲的开阔地区,因此被列为最不受关注的保护动物。O’Reilly封面上的许多动物都属于濒临灭绝的物种;所以它们对世界都很重要。
购买选项
定价:148.00元
书号:978-7-5198-8854-1
出版社:中国电力出版社