简介 1
目录 1
第一部分 学习手册 5
模块1:性能概述 5
概述 5
运行性能的目标 5
OLTP系统 6
决策支持系统 6
折衷 6
OLTP与决策支持间的折衷 6
运行性能如何测度 6
响应时间与信息吞吐量 6
解决方法 7
影响运行性能的因素 7
应用程序 7
结构/资源 7
数据库管理系统 7
并发作业 7
哪些能够得到改进 8
调整服务器的资源使用率 8
调整数据库 8
调整进程 8
解决竞争与并发问题 8
SQL Server结构概述 9
运行性能调整方法(续) 9
运行性能调整方法 9
SQL Server组成 10
内核 10
句法分析程序、优化程序和编译器 10
SQL Server如何处理查询 10
Windows NT SQL Server的新特点:异步检查点 11
SQL Server如何使用内存缓冲区 11
写高速缓存控制器 12
SQL Server如何与客户接口 12
SQL Server如何与客户/工作站通讯 12
SQL Server for Windows NT 13
SQL Server 13
SQL Server如何使用文件 13
可调整的结构 14
高容量 14
对称多处理(SMP) 14
单进程多线程 14
完全32位 14
异步I/O 14
使用Windows NT服务 15
SQL Server实现的比较 15
单进程和多线程的实现 15
复习 16
选择一种文件系统:FAT、HPFS或NTFS 17
概述 17
模块2:平台优化 17
调整操作系统 18
调整网络操作系统 18
调整网络连接 18
调整缓冲区容量 19
最小化网络服务 19
使“写高速缓存”无效 19
调整SQL Server 19
选择排序顺序 20
调整临时数据库 21
SQL Server的内存分配 22
内存使用 22
配置过程高速缓存 23
过程高速缓存 24
关于过程高速缓存的信息 24
调整过程高速缓存 24
设定用户连接 24
动态用户连接 25
sp_configure过程 25
恢复间隔 25
用户连接 25
内存 25
最大工作线程 26
最大异步I/O 26
保留资源使用 26
检测工具 26
过程高速缓存 26
锁 26
打开数据库、打开对象、设备 26
在RAM中的tempdb 26
检测什么 27
确定内存使用:DBCC MEMUSAGE 27
内存使用 28
缓冲区高速缓存 28
过程高速缓存 28
SQL Monitor(sp_monitor) 28
sp_who 29
对sysprocesses表的样本查询 30
sysprocesses表 30
检测性能统计:DBCC SQLPERF 31
DBCC SQLPERF(IOStats) 31
Log Writes(日志写) 31
Batch Writes(批量写) 32
Page Reads(页读) 32
Page Writes(页写) 32
Transactions(事务) 32
DBCC SQLPERF(LRUStats) 32
Cache Hit Ratio(高速缓存命中率) 32
SQL Server for Windows NT新增:“空闲页扫描”极限 33
scan Limit Reaehed(扫描极限达到次数) 33
建议 33
Scan Limit/Cache Size(扫描极限/高速缓存容量) 33
Free Page Scan(Average/Maximum)(空闲页扫描(平均值/最大值)) 33
Cache Flushes(高速缓存刷新次数) 33
DBCC SQL PREF(NETStats) 34
Network Reads(网络读次数) 34
Network Write(网络写次数) 34
Command Queue Length(命令队列长度) 34
Max Command Queue Length(最大命令队列长度) 34
Worker Threads(工作线程) 34
Max Worker Threads(最大工作线程数) 34
Network Threads(网络线程) 34
Microsoft Windows NT性能检测器 35
最大网络线程 35
复习 36
实验 36
平台优化 36
模块3:数据存储结构 37
概述 37
数据概念 37
管理员角度(概念角度) 38
服务器角度(内部角度) 38
数据存储结构 38
数据存储 38
设备 38
页间如何链接 39
页 39
扩展 39
数据库 39
分配单元 39
数据页 40
行的大小和性能 40
行的大小和数据类型 41
行的大小 41
空和非空 41
数据类型 41
索引页 42
索引结构 42
表和索引 42
保留索引 43
聚集索引:详图 43
非聚集索引:详图 44
非聚集索引 44
比较聚集和非聚集索引 45
获取有关表和索引的信息 45
sysindexes 45
sp_helpindex tablename 45
SET STATISTICS IO ON 45
估计表大小 46
预计性能 46
sp_spaceused过程 47
sp_spaceused为整个数据库的输出 47
sp_estspace过程 48
使用sp_estspace 48
数据存取 49
DBCC CHECKTABLE 49
通过表扫描提取 50
使用索引检索 50
实验 51
数据存储结构 51
数据更新的影响 51
插入 52
在没有聚集索引的表中加行 52
在有聚集索引的表中加行 52
性能影响 52
页分割 53
分配页的算法 53
溢出页 54
具有单调数据的页分配 54
删除 55
性能影响 55
修改 56
修改步骤 56
局部修改 56
动态索引重组织 57
动态索引重组织的实质 57
选择压缩数据页 57
FILLFACTOR 58
益处 58
FILLFACTOR(接前) 59
聚集索引和非聚集索引的比较 60
数据存储结构 60
实验 60
段 61
益处 61
SQL Server为Windows NT新增功能:自动数据拆卸 61
段的实现 61
建议 62
段的实现 62
复习 62
模块4:为查询选择索引 63
概述 63
为什么使用索引 63
使用索引以避免表扫描 63
用户分析 64
弄清Microsoft SQL Server是如何工作的 64
数据分析 64
使用索引以限制表扫描范围 64
明智地使用索引 64
使用索引可避免排序 64
选择有用的索引 65
一般性考虑原则 65
关键性考虑原则 65
选择率(Selectivity) 65
表扫描 66
数据分布 66
选择率:例子 66
选择合适的索引类型 67
实验 67
为查询选择索引 67
聚集索引的有效候选类型 68
考虑因素 68
常见的错误认识 68
非聚集索引的有效候选类型 68
考虑因素 69
复合索引的有效候选类型 69
考虑因素 69
复合索引与多重单列索引的对比 70
SQL Server for Windows NT新增功能 70
覆盖索引 70
覆盖索引:例子 71
考虑因素 71
聚集和非聚集索引的比较 72
查询的索引匹配 72
用于数据范围的索引:例子 73
在price列上建立聚集索引 73
在price列上建立非聚集索引 73
在Price、title列上建立覆盖索引 73
表中无索引 73
用于AND连接的索引:例子 74
挑选对上例的评价方案 74
用于OR连接的索引:例子 74
挑选对上例的评价方案 74
评价上例的几种选择方案 75
用于SELECT*的索引:例子 75
课堂讨论 75
用于多重查询的索引 76
挑选上例的评价方案 76
不要索引的情况 77
索引选择准则 77
决定所有查询的优先级 77
决定每个查询的选择率 77
常见的错误认识 78
决定其他必需的索引 78
决定待建立的非聚集索引类型 78
为聚集索引选择最适合的列 78
决定应该索引哪些列 78
为每张表真写活动表 78
测试查询的性能 79
事务分析 79
为每张表填写活动表 80
复习 80
实验 81
为查询选择索引 81
模块5:查询优化器概述 82
概述 82
查询优化器的目的 82
优化方式确定效率最高的查询计划 82
SQL Server使用基于开销的优化方式 83
性能检测 83
编译 84
查询优化 84
数据库存取例程 84
什么场合用查询优化 84
语法分析过程 84
标准化过程 84
索引统计 85
分布页 85
SQL Server是如何计算分布级的 86
分布级的一个例子 87
计算分布级数 87
课堂实例 87
查询优化器概述 88
修改统计 88
实验 88
以下情形下应UPDATE STATISTICS 89
SET语句 89
SHOWPLAN 89
NOEXEC 89
STATISTICS TIME 90
STATISTICS IO 90
SHOWPLAN:实例 90
SHOWPLAN的输出 90
嵌套循环 90
复习 91
阶段一:查询分析 92
查询分析 92
模块6:查询优化过程 92
概述 92
搜索参数 93
非搜索参数 93
转换非搜索参数 94
使用非搜索参数来避免索引的使用 94
OR(或)子句 94
连接子句 95
自连接(Self-Join) 95
实验 96
查询优化的过程 96
阶段二:索引选择 96
确定子句的选择率 97
如果统计数字存在 97
确定是否存在一个有用的索引 97
考虑 97
如果没有统计数字 98
使用统计数字的例外 98
混合数据类型 98
未知数值 98
确定连接子句的选择率 99
连接子句 99
确定页的存取数量 99
在price列上建立聚集索引的情况 100
计算页存取数的例子 100
对于唯一索引的情况 100
对于非聚集索引的情况 100
对于聚集索引的情况 100
对于没有索引情况 100
对于覆盖索引的情况 100
在price列上建立非聚集索引的情况 101
在Priec,title列上建立覆盖索引的情况 101
阶段三:连接选择 101
选择最佳方案 101
计算总开销 102
单表与多表的处理 102
单表处理 102
多表处理 102
追踪标识的输出 103
追踪标识 103
304,310和302追踪标识输出 104
课上讨论 104
复习 105
模块7:查询优化器的处理策略 106
概述 106
表扫描和索引存取 106
表扫描 106
索引存取 107
实验 107
查询优化器的处理策略 107
缺点 108
优点 108
OR过程策略(动态索引) 108
OR处理策略(动态索引):举例 109
用于OR处理策略的查询方案 109
实验 110
查询优化器的处理策略 110
连接顺序策略 110
帮助优化器 111
连接策略的嵌套迭代 111
策略 111
性能 111
连接策略的嵌套迭代:举例 112
执行 112
指导 112
titles到titleauthor之间的连接:举例 113
处理步骤 113
titleauthor到titles之间的连接:举例 114
处理步骤 114
三路连接:举例 115
关键点 115
实验 116
查询优化器的处理策略 116
重新格式化策略 116
缺点 117
重新格式化策略的查询方案 117
FORCEPLAN 117
优化器的特殊情况 118
实验 118
查询优化的处理策略 118
聚集 119
用于聚集的查询方案 119
单独的聚集:举例 120
双聚集:举例 120
覆盖查询 121
SQL Server for Windows NT的新增功能 121
实验 122
查询优化器的处理策略 122
ORDER BY 122
GROUP BY 123
建议 123
建议 123
SQL Server for Windows NT的新增功能 123
实验 124
查询优化器的处理策略 124
视图 124
视图:例子 125
复习 126
实验 126
查询优化器的处理策略 126
存储过程如何工作 127
分析 127
模块8:使用存储过程 127
概述 127
正规化 128
查询处理 128
存储过程和查询的比较 128
非预先设计的查询 128
特殊情况:视图 128
过程的高速缓存 129
重新编译存储过程 130
重新编译选项 130
存储过程和触发器 131
存储过程的益处 131
性能 131
数据完整性强制措施 132
复习 132
设计改变执行效率 132
安全性 132
存取能力 132
实验 133
利用存储过程 133
模块9:非正规化 134
概述 134
性能设计 134
数据库一致性 134
易理解 134
快速性能 134
正规化设计 135
范式 135
性能设计 135
逻辑数据库设计 135
非正规化优点和弊端 136
性能影响 136
折衷方案 136
非正规化设计 136
优点 137
弊端 137
决定进行非正规化操作 137
考虑冗余数据与连接 137
维护冗余数据 138
使用存储过程进行修改操作 138
用触发器进行修改 138
涉及多少行 138
什么是修改考虑 138
数据项一起被访问的频率怎样 138
非正规化技术 139
复制列 139
重定义列 139
重定义表 139
复制整表 139
复制列 139
性能优点 140
选择用于复制的稳定列 140
性能优点 140
精确复制 140
有效候选 140
复制外部键:例子 141
复制属性:例子 141
折衷 142
派生列 142
有效候选 142
几点考虑 142
性能优点 143
派生列:例子 143
重定义列 143
几点考虑 144
性能优点 144
有效候选 144
虚构键列 144
为虚构键创建自动唯一值 145
列摘要 145
有效候选 145
性能优点 145
正文数据类型:例子 146
有效候选 146
几点考虑 146
可选择的解决方案 146
可选择方案 147
几点考虑 147
有效候选 147
图像数据类型:例子 147
重定义表 148
复制和分割表 148
有效候选 148
几点考虑 148
通过列复制/分割数据 149
有效候选 149
几点考虑 149
性能优点 149
通过行复制/分割数据 150
有效候选 150
几点考虑 150
性能优点 151
网关环境 151
复制整表 151
几点考虑 151
有效候选 151
复习 152
实验 152
非正规操作 152
模块10:数据库的一致性和并发性 153
概述 153
允许并发(性)就必须强调一致(性) 153
级别3 154
级别2 154
级别0 154
一致性的级别 154
级别1 154
锁定 155
SQL Server for Windows NT新增功能:改进的锁定管理器 155
为什么需要锁定 155
暂时的数据更新(未提交的相关性) 155
数据更新丢失 155
页与行级锁定 156
页锁定 156
共享的页锁定(S) 156
锁定的粒度 156
不正确的数据合计 156
排他的页锁定(X) 157
数据更新的页锁定(U) 157
HOLDLOCK关键字 157
表锁定 157
共享表锁定(S) 157
排他的表锁定(X) 157
集中共享/集中排他锁定(IS或IX) 158
升级列表锁定 158
锁定:举例 158
带有索引和搜寻参数的语句 158
锁定的兼容性 159
在不同事务期间可得到的锁定类型的摘要 159
没有索引或搜寻参数的语句 159
HOLDLOCK(3级锁定) 159
关键字 160
锁定如何加强一致性 160
死锁和活锁 161
死锁 161
如果避免死锁 161
活锁 161
索引中的并发性 162
索引锁定 162
SQL Server用来避免索引锁定的办法 162
设置锁定数目 163
sp_lock 163
锁定类型 163
实验 164
数据库一致性和并发性 164
影响性能的因素 164
等待释放锁定 164
频繁死锁 165
创建索引 165
大量的修改事务 165
减少锁定争用 165
采用低的填充因子或缓冲行 165
采用存储过程 166
只有必要时使用HOLDLOCK 166
调度某些行为到非高峰时间 166
避免多用户数据库的不一致性 166
避免查询中用户交互 166
创建单独的历史表 166
避免热点 166
保持事务简短并且在一个程序组中 166
日志 167
SQL Server for Windows NT的新增功能:更有效的日志分配 167
在客户服务器交互作用中优化并发性 168
优化客户服务器交互性 168
在客户机上缓冲所有的行 168
在客户机上仅缓冲键值 168
有限的SELECT语句 169
客户服务器交互中的控制锁定 169
连续滚动 169
优化的并发控制(OCC) 170
不利之处 170
浏览处理技术 170
SQL Server浏览模式 171
SELECT...FOR BROWSE 171
处理步骤 171
游标 172
游标模型元素 172
性能考虑 172
用游标浏览 173
对修改敏感性 173
复习 174
模块11:其他性能内容 175
概述 175
维护和性能 175
安排数据库卸出 176
SOL Server for Windows NT新增功能:快速备份和恢复 176
输入/输出数据采用大量拷贝程序(bcp) 176
建议 177
SQL Server for windows NT新增功能:协商报文的大小 177
执行大量的修改事务 177
实验/演示 178
建立索引 178
设置恢复间隔 179
标题更新统计 179
WITH SORTED_DATA 179
客户程序设计忠告 180
负载平衡 181
批量与交互 181
客户与服务器 181
卸下规则和缺省检查 181
卸下数据 181
卸下处理 182
排序数据 182
工作负载分解到多个服务器上 182
备份数据 182
分布与集中处理 183
容量 184
速度 184
将应用程序分散到硬盘上 184
使用超级服务器的优点 184
易扩充性 185
容错 185
易管理性 185
均质性 185
超级服务器的优点(续) 185
磁盘性能 185
随机I/O与顺序I/O 186
驱动器镜像 186
驱动镜像和双工 186
决定镜像什么 187
数据和事务日志设备的镜像 187
远程访问SQLServer 188
远程访问服务(RAS) 188
特点和功能 188
性能考虑 188
复习 188
实验 189
其他性能问题 189
模块12:问题分析 190
概述 190
性能调整方法 190
分析用户需求 190
优化查询 191
选择索引 191
测试存储过程 191
性能调整方法(续) 191
开发存储过程 191
分析每个数据库的各种事务 191
优化平台 191
设计正规化数据库 191
基准模拟产生环境 192
监控器性能 192
确定性能问题 192
用户行为 193
产生环境 193
查询 193
存储过程 194
查询优化器 194
事务 194
如果是一个SELECT语句 194
数据库 195
索引 195
逻辑设计 195
物理设计 195
评估非正规化 195
调整,再测试,监控,重复 196
安排维护 196
确定基线性能 196
表扫描的开销 196
如何提高表扫描性能 196
如何设置基准 197
一个好的基准应该做什么 197
为什么使用基准 197
基准使用指南 198
性能回顾 198
平台优化复习 199
数据存储结构复习 199
选择查询索引复习 200
查询优化器复习 201
存储过程复习 201
非正规化复习 202
数据库一致性和并发性复习 202
其他性能问题复习 203
实验 204
问题分析 204
isq1在实验中的应用 207
课程数据库:perfdb 207
isq1/w在实验中的应用 207
第二部分 实验手册 207
命名规则 207
实验1:实验指导 207
实验2:平台优化 209
目标 209
开始之前 209
练习1:内存使用:DBCC MEMUSAGE 209
练习2:监控资源使用情况:DBCC SQLPERF 211
练习3:Windows NT性能监视器 212
练习2:每个表的多重索引 213
练习1:表大小和I/O 213
目的 213
开始之前 213
实验3:数据存储结构 213
练习3:FILLFACTOR 216
练习4:大键 216
开始之前 216
实验4:为查询选择索引 218
目的 218
练习1:选择率 218
练习2:选择索引 219
练习3:覆盖查询 221
练习4:OR的索引 221
如果时间允许 222
练习5:为两个查询建立索引 222
实验5:查询优化器概述 223
目的 223
练习1:分布步骤 223
实验6:查询优化阶段 225
目标 225
前言 225
练习1:确定检索参数 225
实验7:查询优化器的处理策略 227
目的 227
开始之前 227
练习1:执行方案——表扫描 227
练习2:评价结果集和索引使用法 227
练习3:OR处理策略 230
练习4:连接顺序策略 231
练习5:重新格式化策略 233
练习6:聚合和覆盖查询 236
练习7:ORDER BY和GROUP BY 238
练习8:综合 239
练习9:决定理想响应时间 241
实验8:使用存储过程 243
目的 243
开始之前 243
练习1:重新编译存储过程 243
目的 247
练习1:复制列 247
实验9:非正规化 247
练习2:计算数据 248
练习3:分割表 248
练习4:分割表的条件 249
练习5:虚构键 249
实验10:数据库的一致性和并发性 251
目的 251
在实验开始前 251
练习1:表和页锁定 251
练习2:升级点 253
练习3:行填充 254
实验11:其他的性能问题 256
目的 256
练习1:大量的修改事务 256
练习2:处理数据库活动 257
练习1:安装图书馆数据库 258
练习2:图书馆实例研究 258
介绍 258
实验12:问题分析 258
历史信息需求 259
图书核查过程 260
图书馆功能 261
练习3:重新检查非正规Library数据库 265
练习4:分析Loanbook事务 270
练习5:分析事务Loanbook的事务混合 277
在你开始工作前 277
练习6:选择索引 277
你的目标 278
在开始工作之前 278
练习7:优化查询 279
练习8:安排运行维护 280
练习9:改善returnbook事务的性能 281
第三部分 实验答案 287
实验1.实验指导 287
课程数据库:perfdb 287
实验2:平台优化 289
Objective 289
开始之前 289
练习1:内存使用:DBCC MEMUSAGE 289
练习2:监控资源使用情况:DBCC SQLPERF 290
练习3:Windows NT性能监视器 291
实验3:数据存储结构 292
目的 292
开始之前 292
练习1:表大小和I/O 292
练习2:每个表的多重索引 292
练习3:FILLFACTOR 294
练习4:大键 295
开始之前 295
实验4:为查询选择索引 297
目的 297
练习1:选择率 297
练习2:选择索引 298
练习3:覆盖查询 300
练习4:OR的索引 301
练习5:为两个查询建立索引 301
如果时间允许 301
实验5:查询优化器概述 302
目的 302
练习1:分布步骤 302
实验6:查询优化阶段 304
目的 304
前言 304
练习1:确定检索参数 304
练习2:评价结果集和索引使用法 306
开始之前 306
练习1:执行方案——表扫描 306
实验7:查询优化器的处理策略 306
目的 306
练习3:OR处理策略 309
练习4:连接顺序策略 310
练习5:重新格式化策略 312
练习6:聚合和覆盖查询 314
练习7:ORDER BY和GROUP BY 317
练习8:综合 317
练习9:决定理想响应时间 319
实验8:使用存储过程 321
目的 321
开始之前 321
练习1:重新编译存储过程 321
练习1:复制列 324
实验9:非正规化 324
目的 324
练习2:计算数据 325
练习3:分割表 325
练习4:分割表的条件 326
练习5:虚构键 326
实验10:数据库的一致性和并发性 328
目的 328
在实验开始前 328
练习1:表和页锁定 328
练习2:升级点 330
练习3:行填充 330
练习1:大量的修改事务 333
实验11:其他的性能问题 333
目的 333
练习2:处理数据库活动 334
实验12:问题分析 335
练习1:安装图书馆数据库 335
练习2:图书馆实例研究 335
练习3:重新检查非正规Libra-y数据库 335
练习4:分析Loanbook事务 336
练习5:分析事务Loanbook的事务混合 337
在你开始工作前 337
你的目标 338
练习7:查询优化 338
在开始工作之前 338
练习6:选择索引 338
练习8:安排运行维护 340
练习9:改善returnbook事务的性能 340
第四部分 附录 343
附录A 调用OS/2 343
附录B OS\22.0对MS—SQL Server的支持 345
附录C 调整Microsoft LAN MANAGER 347
附录D 事务分析矩阵 350
附录E 表格信息矩阵 352
附录F 查询测试矩阵 354
附录G SHOWPLAN输出 356
附录H 创建自动的单一键 358
附录I 快速参考 360
附录J 有关SQL Server的出版物 364