图书介绍

SQL Server 2008查询性能优化【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

SQL Server 2008查询性能优化
  • (美)弗里奇,(美)达姆著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115230294
  • 出版时间:2010
  • 标注页数:444页
  • 文件大小:87MB
  • 文件页数:462页
  • 主题词:关系数据库-数据库管理系统,SQL Server 2008

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

SQL Server 2008查询性能优化PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 SQL查询性能调整1

1.1 性能调整过程2

1.1.1 核心过程2

1.1.2 迭代过程4

1.2 性能vs.价格7

1.2.1 性能目标7

1.2.2 “足够好”的调整7

1.3 性能基线8

1.4 工作的重点9

1.5 SQL Server性能杀手10

1.5.1 低质量的索引10

1.5.2 不精确的统计11

1.5.3 过多的阻塞和死锁11

1.5.4 不基于数据集的操作11

1.5.5 低质量的查询设计12

1.5.6 低质量的数据库设计12

1.5.7 过多的碎片12

1.5.8 不可重用的执行计划13

1.5.9 低质量的执行计划13

1.5.10 频繁重编译计划13

1.5.11 游标的错误使用13

1.5.12 错误配置数据库日志14

1.5.13 过多使用或者错误配置tempdb14

1.6 小结14

第2章 系统性能分析15

2.1 性能监视器工具15

2.2 动态管理视图17

2.3 硬件资源瓶颈18

2.3.1 识别瓶颈18

2.3.2 瓶颈解决方案19

2.4 内存瓶颈分析19

2.4.1 SQL Server存管理20

2.4.2 Available Bytes23

2.4.3 Pages/sec和Page Faults/sec计数器23

2.4.4 Buffer Cache Hit Ratio24

2.4.5 Page Life Expectancy24

2.4.6 Checkpoint Pages/sec24

2.4.7 Lazy writes/sec24

2.4.8 Memory Grants Pending25

2.4.9 Target Server Memory(KB)和Total Server Memory(KB)25

2.5 内存瓶颈解决方案25

2.5.1 优化应用程序工作负载26

2.5.2 为SQL Server分配更多内存27

2.5.3 增加系统内存27

2.5.4 更换32位处理器为64位处理器27

2.5.5 启用3GB进程空间28

2.5.6 在32位SQL Server中使用4GB以上内存28

2.6 磁盘瓶颈分析29

2.6.1 磁盘计数器30

2.6.2 %Disk Time30

2.6.3 Current Disk Queue Length31

2.6.4 Disk Transfers/sec31

2.6.5 Disk Bytes/sec32

2.6.6 Avg.Disk Sec/Read和Avg.Disk Sec/Write32

2.7 磁盘瓶颈解决方案32

2.7.1 优化应用程序工作负载33

2.7.2 使用更快的磁盘驱动器33

2.7.3 使用一个RAID阵列33

2.7.4 使用SAN系统35

2.7.5 恰当地对齐磁盘35

2.7.6 使用电池后备的控制器缓存36

2.7.7 添加系统内存36

2.7.8 创建多个文件和文件组36

2.7.9 将表和索引放在不同的磁盘上39

2.7.10 将日志文件保存到独立的物理磁盘39

2.7.11 表的分区40

2.8 处理器瓶颈分析40

2.8.1 %Processor Time41

2.8.2 %Privileged Time41

2.8.3 Processor Queue Length142

2.8.4 Context Switches/sec42

2.8.5 Batch Requests/sec42

2.8.6 SQL Compilations/sec42

2.8.7 SQL Recompilations/sec43

2.9 处理器瓶颈解决方案43

2.9.1 优化应用程序工作负载43

2.9.2 消除过多的编译/重编译43

2.9.3 使用更多或更快的处理器44

2.9.4 使用大的二级(L2)/三级(L3)缓存44

2.9.5 运行更高效的控制器/驱动程序44

2.9.6 不运行不必要的软件45

2.10 网络瓶颈分析45

2.10.1 Bytes Total/sec45

2.10.2 %Net Utilization46

2.11 网络瓶颈解决方案46

2.11.1 优化应用程序工作负载46

2.11.2 增加网络适配器47

2.11.3 节制和避免中断47

2.12 SQL Server总体性能47

2.12.1 丢失索引48

2.12.2 数据库阻塞49

2.12.3 不可重用的执行计划50

2.12.4 总体表现50

2.13 创建一个基线51

2.13.1 创建性能计数器的一个可重用列表51

2.13.2 使用性能计数器列表创建一个计数器日志54

2.13.3 最小化性能监视器开销55

2.14 以基线为标准的系统状态分析56

2.15 小结57

第3章 SQL查询性能分析58

3.1 SQL Profiler工具58

3.1.1 Profiler跟踪59

3.1.2 事件60

3.1.3 数据列62

3.1.4 过滤器64

3.1.5 跟踪模板65

3.1.6 跟踪数据65

3.2 跟踪的自动化66

3.2.1 使用GUI捕捉跟踪66

3.2.2 使用存储过程捕捉跟踪67

3.3 结合跟踪和性能监视器输出68

3.4 SQL Profiler建议69

3.4.1 限制事件和数据列69

3.4.2 丢弃性能分析所用的启动事件70

3.4.3 限制跟踪输出大小70

3.4.4 避免在线数据列排序71

3.4.5 远程运行Profiler71

3.4.6 限制使用某些事件71

3.5 没有Profiler情况下的查询性能度量71

3.6 开销较大的查询72

3.6.1 识别开销较大的查询73

3.6.2 识别运行缓慢的查询77

3.7 执行计划78

3.7.1 分析查询执行计划80

3.7.2 识别执行计划中开销较大的步骤82

3.7.3 分析索引有效性83

3.7.4 分析连接有效性84

3.7.5 实际执行计划vs.估算执行计划88

3.7.6 计划缓存89

3.8 查询开销90

3.8.1 客户统计90

3.8.2 执行时间91

3.8.3 STATISTICS IO92

3.9 小结94

第4章 索引分析95

4.1 什么是索引95

4.1.1 索引的好处97

4.1.2 索引开销98

4.2 索引设计建议100

4.2.1 检查WHERE子句和连接条件列100

4.2.2 使用窄索引102

4.2.3 检查列的唯一性103

4.2.4 检查列数据类型106

4.2.5 考虑列顺序107

4.2.6 考虑索引类型109

4.3 聚簇索引109

4.3.1 堆表110

4.3.2 与非聚簇索引的关系110

4.3.3 聚簇索引建议112

4.4 非聚簇索引117

4.4.1 非聚簇索引维护117

4.4.2 定义书签查找117

4.4.3 非聚簇索引建议118

4.5 聚簇索引vs.非聚簇索引118

4.5.1 聚簇索引相对于非聚簇索引的好处119

4.5.2 非聚簇索引相对于聚簇索引的好处120

4.6 高级索引技术121

4.6.1 覆盖索引122

4.6.2 索引交叉124

4.6.3 索引连接125

4.6.4 过滤索引126

4.6.5 索引视图128

4.6.6 索引压缩132

4.7 特殊索引类型134

4.7.1 全文索引134

4.7.2 空间索引135

4.7.3 XML135

4.8 索引的附加特性135

4.8.1 不同的列排序顺序135

4.8.2 在计算列上的索引136

4.8.3 BIT数据类型列上的索引136

4.8.4 作为一个查询处理的CREATE INDEX语句136

4.8.5 并行索引创建136

4.8.6 在线索引创建137

4.8.7 考虑数据库引擎调整顾问137

4.9 小结137

第5章 数据库引擎调整顾问139

5.1 数据库引擎调整顾问机制139

5.2 数据库引擎调整顾问实例143

5.2.1 调整一个查询143

5.2.2 调整一个跟踪工作负载146

5.3 数据库引擎调整顾问的局限性148

5.4 小结149

第6章 书签查找分析150

6.1 书签查找的目的150

6.2 书签查找的缺点152

6.3 分析书签查找的起因153

6.4 解决书签查找155

6.4.1 使用一个聚簇索引155

6.4.2 使用一个覆盖索引155

6.4.3 使用索引连接158

6.5 小结160

第7章 统计分析161

7.1 统计在查询优化中的角色161

7.2 索引列上的统计162

7.2.1 更新统计的好处162

7.2.2 过时统计的缺点164

7.3 在非索引列上的统计165

7.3.1 在非索引列上统计的好处166

7.3.2 丢失非索引列上的统计的缺点169

7.4 分析统计172

7.4.1 密度174

7.4.2 多列索引上的统计174

7.4.3 过滤索引上的统计175

7.5 统计维护176

7.5.1 自动维护177

7.5.2 人工维护179

7.5.3 统计维护状态181

7.6 为查询分析统计的有效性182

7.6.1 解决丢失统计问题182

7.6.2 解决过时统计问题184

7.7 建议186

7.7.1 统计的向后兼容性186

7.7.2 自动创建统计186

7.7.3 自动更新统计187

7.7.4 自动异步更新统计189

7.7.5 收集统计的采样数量189

7.8 小结190

第8章 碎片分析191

8.1 碎片的成因191

8.1.1 UPDATE语句引起的页面分割193

8.1.2 INSERT语句引起的页面分割196

8.2 碎片开销197

8.3 分析碎片数量200

8.4 碎片解决方案204

8.4.1 卸载并重建索引204

8.4.2 使用DROP_EXISTING子句重建索引205

8.4.3 执行ALTER INDEX REBUILD语句205

8.4.4 执行ALTER INDEX REORGANIZE语句207

8.5 填充因子的重要性209

8.6 自动维护212

8.7 小结217

第9章 执行计划缓冲分析218

9.1 执行计划生成218

9.1.1 解析器219

9.1.2 代数化器220

9.1.3 优化221

9.2 执行计划缓冲227

9.3 执行计划组件227

9.3.1 查询计划227

9.3.2 执行上下文227

9.4 执行计划的老化228

9.5 分析执行计划缓冲228

9.6 执行计划重用229

9.6.1 即席工作负载230

9.6.2 预定义工作负载231

9.6.3 即席工作负载的计划可重用性231

9.6.4 预定义工作负载的计划可重用性239

9.7 查询计划Hash和查询Hash248

9.8 执行计划缓冲建议251

9.8.1 明确地参数化查询的可变部分252

9.8.2 使用存储过程实现业务功能252

9.8.3 使用sp_executesql编程以避免存储过程维护252

9.8.4 实现准备/执行模式以避免重传查询字符串253

9.8.5 避免即席查询253

9.8.6 对于动态查询sp_executesql优于EXECUTE253

9.8.7 小心地参数化查询的可变部分254

9.8.8 不要允许查询中对象的隐含解析254

9.9 小结254

第10章 存储过程重编译256

10.1 重编译的好处和缺点256

10.2 确认导致重编译的语句258

10.3 分析重编译起因260

10.3.1 架构或绑定变化261

10.3.2 统计变化261

10.3.3 延迟对象解析264

10.3.4 SET选项变化266

10.3.5 执行计划老化266

10.3.6 显式调用sp_recompile267

10.3.7 显式使用RECOMPILE子句268

10.4 避免重编译269

10.4.1 不要交替使用DDL和DML语句270

10.4.2 避免统计变化引起的重编译271

10.4.3 使用表变量273

10.4.4 避免在存储过程中修改SET选项275

10.4.5 使用OPTIMIZE FOR查询提示276

10.4.6 使用计划指南277

10.5 小结281

第11章 查询设计分析282

11.1 查询设计建议282

11.2 在小结果集上操作283

11.2.1 限制选择列表中的列数283

11.2.2 使用高选择性的WHERE子句284

11.3 有效地使用索引284

11.3.1 避免不可参数化的搜索条件285

11.3.2 避免WHERE子句列上的算术运算符289

11.3.3 避免WHERE子句列上的函数290

11.4 避免优化器提示292

11.4.1 连接提示293

11.4.2 索引提示295

11.5 使用域和参照完整性296

11.5.1 非空约束297

11.5.2 声明参照完整性299

11.6 避免资源密集型查询301

11.6.1 避免数据类型转换301

11.6.2 使用EXISTS代替COUNT(*)验证数据存在303

11.6.3 使用UNION ALL代替UNION304

11.6.4 为聚合和排序操作使用索引305

11.6.5 避免在批查询中的局部变量306

11.6.6 小心地命名存储过程309

11.7 减少网络传输数量311

11.7.1 同时执行多个查询311

11.7.2 使用SET NOCOUNT311

11.8 降低事务开销312

11.8.1 减少日志开销312

11.8.2 减少锁开销314

11.9 小结315

第12章 阻塞分析316

12.1 阻塞基础知识316

12.2 理解阻塞317

12.2.1 原子性317

12.2.2 一致性320

12.2.3 隔离性320

12.2.4 持久性321

12.3 数据库锁321

12.3.1 锁粒度322

12.3.2 锁升级325

12.3.3 锁模式326

12.3.4 锁兼容性332

12.4 隔离级别332

12.4.1 未提交读333

12.4.2 已提交读333

12.4.3 可重复读335

12.4.4 可序列化(Serializable)338

12.4.5 快照(Snapshot)343

12.5 索引对锁的作用343

12.5.1 非聚簇索引的作用344

12.5.2 聚簇索引的作用346

12.5.3 索引在可序列化隔离级别上的作用346

12.6 捕捉阻塞信息347

12.6.1 使用SOL捕捉阻塞信息347

12.6.2 Profiler跟踪和被阻塞进程报告事件349

12.7 阻塞解决方案351

12.7.1 优化查询352

12.7.2 降低隔离级别352

12.7.3 分区争用的数据353

12.7.4 争用数据上的覆盖索引354

12.8 减少阻塞的建议354

12.9 自动化侦测和收集阻塞信息355

12.10 小结359

第13章 死锁分析360

13.1 死锁基础知识360

13.2 使用错误处理来捕捉死锁361

13.3 死锁分析362

13.3.1 收集死锁信息362

13.3.2 分析死锁364

13.4 避免死锁368

13.4.1 按照相同的时间顺序访问资源368

13.4.2 减少被访问资源的数量369

13.4.3 最小化锁的争用369

13.5 小结370

第14章 游标开销分析372

14.1 游标基础知识372

14.1.1 游标位置373

14.1.2 游标并发性374

14.1.3 游标类型376

14.2 游标开销比较378

14.2.1 游标位置的开销比较378

14.2.2 游标并发性上的开销比较380

14.2.3 在游标类型上的开销比较381

14.3 默认结果集383

14.3.1 好处384

14.3.2 缺点384

1 4.4 分析SQL Server游标开销386

14.5 游标建议390

14.6 小结392

第15章 数据库工作负载优化393

15.1 工作负载优化基础知识393

15.2 工作负载优化步骤394

15.3 捕捉工作负载397

15.4 分析工作负载399

15.5 识别开销最大的查询400

15.6 确定开销最大的查询的基线资源使用402

15.6.1 总体资源使用402

15.6.2 详细资源使用402

15.7 分析和优化外部因素405

15.7.1 分析应用程序使用的批级别选项405

15.7.2 分析统计有效性406

15.7.3 分析碎片整理需求406

15.8 分析开销最大的查询的内部行为410

15.8.1 分析查询执行计划410

15.8.2 识别执行计划中开销较大的步骤412

15.8.3 分析处理策略的效率412

15.9 优化代价最大的查询412

15.9.1 修改现有索引413

15.9.2 分析连接提示的应用415

15.9.3 避免聚簇索引扫描操作417

15.9.4 修改过程418

15.10 分析对数据库工作负载的影响420

15.11 迭代各个优化阶段421

15.12 小结424

第16章 SQL Server优化检查列表425

16.1 数据库设计425

16.1.1 平衡不足和过多的规范化426

16.1.2 从实体完整性约束中得利427

16.1.3 从域和参照完整性约束中得利428

16.1.4 采用索引设计最佳实践430

16.1.5 避免在存储过程名称中使用sp_前缀431

16.1.6 最小化触发器的使用431

16.2 查询设计432

16.2.1 使用SET NOCOUNT ON命令432

16.2.2 显式定义对象所有者432

16.2.3 避免不可参数化的搜索条件432

16.2.4 避免WHERE子句列上的算术运算符433

16.2.5 避免优化器提示434

16.2.6 远离嵌套视图434

16.2.7 确保没有隐含的数据类型转换435

16.2.8 最小化日志开销435

16.2.9 采用重用执行计划的最佳实践435

16.2.10 采用数据库事务最佳实践436

16.2.11 消除或减少数据库游标开销437

16.3 配置设置437

16.3.1 Affinity Mask437

16.3.2 内存配置选项437

16.3.3 并行性开销阈值438

16.3.4 最大并行度438

16.3.5 优化即席工作负载438

16.3.6 查询调控器开销限制439

16.3.7 填充因子(%)439

16.3.8 被阻塞过程阈值439

16.3.9 数据库文件布局439

16.3.10 数据库压缩440

16.4 数据库管理440

16.4.1 保持统计最新440

16.4.2 保持最小数量的索引碎片数量441

16.4.3 循环使用SQL错误日志文件441

16.4.4 避免像AUTO_CLOSE或AUTO_SHRINK这样的自动化数据库功能441

16.4.5 最小化SQL跟踪开销442

16.5 数据库备份442

16.5.1 增量和事务日志备份频率442

16.5.2 备份分布443

16.5.3 备份压缩444

16.6 小结444

热门推荐