第1章 性能调校概观 1
1.1 什么是性能调校 5
1.2 建立性能的基线及相关文件 5
1.3 性能调校的步骤流程-DETECT 8
1.3.1 各阶段重点说明 9
1.3.2 练习DETECT方法 13
1.4 定义瓶颈 16
1.5 结语 17
第2章 SQLServer架构简介 19
2.1 SQLServer运行架构 21
2.1.1 SQLServer的存取架构 24
2.1.2 SQLServer的核心引擎 27
2.1.3 动态自我管理 31
2.2 各项硬件使用剖析 33
2.2.1 内存管理 33
2.2.2 中央处理器 48
2.2.3 硬盘子系统 54
2.3 仿真系统运作 61
2.4 本章参考资源 63
第3章 性能调校相关工具程序 65
3.1 综观的工具 69
3.1.1 SQLDiag概观 69
3.1.2 观察影响效率的属性 74
3.1.3 性能监视器 78
3.2 进一步的分析工具 84
3.2.1 SQLServerEnterpriseManager及T-SQLScript 84
3.2.2 SQLProfiler概观 87
3.2.3 相关的系统对象 99
3.3 针对特定对象的工具 100
3.3.1 QueryAnalyzer 100
3.3.2 网络监视器 103
3.3.3 DBCC 106
3.3.4 跟踪标记 109
3.4 压力测试工具程序 110
3.4.1 MicrosoftApplicationCenterTest 111
3.4.2 自行撰写压力测试程序 114
3.5 本章参考资料 117
第4章 数据库设计 119
4.1 数据库设计 121
4.1.1 硬盘子系统之设计 126
4.1.2 分割&并行运作 130
4.2.1 LogicalLogMarks 134
4.2 备份与还原 134
4.2.2 恢复模型 137
4.3 大量数据加载 139
4.4 结语 140
第5章 T-SQL语法 141
5.1 有效的查询参数 143
5.1.1 不要对数据字段做运算 144
5.1.3 不要对数据字段使用函数 146
5.1.2 不要用负向查询 146
5.1.4 使用OR运算符要小心 147
5.2 使用T-SQL的注意事项 148
5.3 自行撰写管理用的辅助存储过程 150
5.3.1 当做工具的T-SQL程序 150
5.3.2 将存储过程建立在tempdb系统数据库 156
5.4 SQLServer提供的公共变量 157
5.5 结语 165
第6章 索引与查询性能 167
6.1 索引概观 169
6.1.1 建立索引与相关的属性配置 170
6.1.2 聚集索引(ClusteredIndex)与非聚集索引 175
6.1.3 排序 179
6.1.4 并行建立索引 184
6.1.5 sysindexes系统数据表 184
6.1.6 是否值得建索引 188
6.2 建立最优化执行计划的各阶段 191
6.3 统计 193
6.3.1 更新统计 200
6.4 联结与查询效率 204
6.4.1 联结 204
6.4.2 Join语法 205
6.4.3 巢状循环联结 208
6.4.4 合并联结 209
6.4.5 哈希联结 210
6.4.6 联结与子查询 211
6.5 覆盖索引 213
6.6 在视图与计算字段上建立索引 217
6.6.1 如何有效地建立IndexedView 219
6.6.2 IndexedView的适用范围 224
6.7 查询提示 225
6.8 单一查询使用多个索引 230
6.9 数据不连续(Fragmentation) 231
6.10 结语 234
第7章 事务与锁管理 235
7.1 锁 237
7.1.1 锁的种类及范围 237
7.1.2 锁的兼容性 240
7.1.3 可锁定的资源 241
7.1.4 锁与事务隔离等级 243
7.1.5 动态的锁定管理 248
7.1.6 锁定超时 249
7.2 事务 252
7.2.1 批处理与事务 252
7.2.2 巢状事务 255
7.2.3 储存点 259
7.2.4 锁定提示 261
7.3 死锁 264
7.3.1 分布式死锁(DistributedDeadlock) 266
7.3.2 SQLServer无法侦测到的死锁实例 268
7.4 观察与分析系统的锁定状况 273
7.4.1 观察SQLServer当前执行的状况 274
7.4.2 观察与分析系统的锁定状况 281
7.4.3 死锁状况分析 283
7.5 一般产生阻塞的原因 289
7.5.1 费时的查询或事务 289
7.5.2 不正确的事务或事务隔离级别配置 290
7.5.3 事务未正确处理 290
7.5.4 未侦测到的分布式死锁 291
7.5.5 LockGranularity太高或太低 291
7.5.6 CompileBlocking 291
7.5.7 防止锁住他人的技巧 292
7.5.8 防止与处理死锁的技巧 293
第8章 前端应用程序设计 295
8.1 处理SQL语法时用户端与服务器的互动情形 297
8.1.1 用户端存取SQLServer的模式 299
8.1.2 准备再执行的模式 303
8.1.3 通过Master.dbo.Syscacheobjects系统数据表观察在缓存中的对象 307
8.1.4 测试各种执行SQL语法方式的性能 312
8.1.5 ConnectionPooling 313
8.2 游标 322
8.2.1 游标综述 322
8.2.2 默认结果集 324
8.2.3 服务器端游标 326
8.2.4 使用游标的T-SQL语法 331
8.2.5 与游标相关的系统存储过程 340
8.2.6 通过前端程序存取四种类型的游标 342
8.2.7 异步使用游标 346
8.2.8 使用游标时,应注意的事项 348
8.3 应用程序错误处理 350
附录A 性能调校计划 353
附录B 压力测试计划 359
附录C 参考资源 377
附录D Wintel的64位架构 383