成功加入购物车
[美] 弗里奇 、[美] 达姆 著; 姚军 译 / 人民邮电出版社 / 2010-08 / 平装
售价 ¥ 38.00 5.5折
定价 ¥69.00
品相 九品
优惠 满包邮
延迟发货说明
上书时间2024-04-17
卖家超过10天未登录
SQL Server 2008查询性能优化
《SQLServer2008查询性能优化》通过大量实例,详细介绍了SQLServer数据库系统优化的各种方法和技巧。内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且提供了“宝典”式的最佳实践列表。
《SQLServer2008查询性能优化》适合于关心数据库应用系统性能的开发人员和数据库管理人员阅读。通过阅读《SQLServer2008查询性能优化》,不仅可以学习到数据库性能管理的许多知识和技巧,还有助于养成良好的编程习惯,为实现高性能的数据库应用系统打下基础。
弗里奇(GrantFritchey),为FMGlobal(一家行业领先的工程和保险公司)工作,担任首席DBA。他使用各种语言(如VB、C#和Java等)开发了许多大规模的应用程序,从版本6.0开始使用SQLServer。他曾经为3家失败的.com公司担任财务和咨询工作,还是DissectingSQLServerExecutionPlans一书的作者。
达姆(SajalDam),拥有位于印度班加罗尔的印度理工学院的计算机科学技术硕士学位,并且使用微软技术超过16年。他已经在设计数据库应用和管理软件开发方面拥有了很广泛的背景。Saial还在从前端网页到后端数据库的基于微软技术的应用程序上,具备了故障定位和性能优化的大量经验。他有许多为《财富》500强公司设计可伸缩的数据库解决方案和最大化数据库环境性能的经验。
第1章SQL查询性能调整11.1性能调整过程21.1.1核心过程21.1.2迭代过程41.2性能vs.价格71.2.1性能目标71.2.2“足够好”的调整71.3性能基线81.4工作的重点91.5SQLServer性能杀手101.5.1低质量的索引101.5.2不精确的统计111.5.3过多的阻塞和死锁111.5.4不基于数据集的操作111.5.5低质量的查询设计121.5.6低质量的数据库设计121.5.7过多的碎片121.5.8不可重用的执行计划131.5.9低质量的执行计划131.5.10频繁重编译计划131.5.11游标的错误使用131.5.12错误配置数据库日志141.5.13过多使用或者错误配置tempdb141.6小结14第2章系统性能分析152.1性能监视器工具152.2动态管理视图172.3硬件资源瓶颈182.3.1识别瓶颈182.3.2瓶颈解决方案192.4内存瓶颈分析192.4.1SQLServer内存管理202.4.2AvailableBytes232.4.3Pages/sec和PageFaults/sec计数器232.4.4BufferCacheHitRatio242.4.5PageLifeExpectancy242.4.6CheckpointPages/sec242.4.7Lazywrites/sec242.4.8MemoryGrantsPending252.4.9TargetServerMemory(KB)和TotalServerMemory(KB)252.5内存瓶颈解决方案252.5.1优化应用程序工作负载262.5.2为SQLServer分配更多内存272.5.3增加系统内存272.5.4更换32位处理器为64位处理器272.5.5启用3GB进程空间282.5.6在32位SQLServer中使用4GB以上内存282.6磁盘瓶颈分析292.6.1磁盘计数器302.6.2%DiskTime302.6.3CurrentDiskQueueLength312.6.4DiskTransfers/sec312.6.5DiskBytes/sec322.6.6Avg.DiskSec/Read和Avg.DiskSec/Write322.7磁盘瓶颈解决方案322.7.1优化应用程序工作负载332.7.2使用更快的磁盘驱动器332.7.3使用一个RAID阵列332.7.4使用SAN系统352.7.5恰当地对齐磁盘352.7.6使用电池后备的控制器缓存362.7.7添加系统内存362.7.8创建多个文件和文件组362.7.9将表和索引放在不同的磁盘上392.7.10将日志文件保存到独立的物理磁盘392.7.11表的分区402.8处理器瓶颈分析402.8.1%ProcessorTime412.8.2%PrivilegedTime412.8.3ProcessorQueueLength422.8.4ContextSwitches/sec422.8.5BatchRequests/sec422.8.6SQLCompilations/sec422.8.7SQLRecompilations/sec432.9处理器瓶颈解决方案432.9.1优化应用程序工作负载432.9.2消除过多的编译/重编译432.9.3使用更多或更快的处理器442.9.4使用大的二级(L2)/三级(L3)缓存442.9.5运行更高效的控制器/驱动程序442.9.6不运行不必要的软件452.10网络瓶颈分析452.10.1BytesTotal/sec452.10.2%NetUtilization462.11网络瓶颈解决方案462.11.1优化应用程序工作负载462.11.2增加网络适配器472.11.3节制和避免中断472.12SQLServer总体性能472.12.1丢失索引482.12.2数据库阻塞492.12.3不可重用的执行计划502.12.4总体表现502.13创建一个基线512.13.1创建性能计数器的一个可重用列表512.13.2使用性能计数器列表创建一个计数器日志542.13.3最小化性能监视器开销552.14以基线为标准的系统状态分析562.15小结57第3章SQL查询性能分析583.1SQLProfiler工具583.1.1Profiler跟踪593.1.2事件603.1.3数据列623.1.4过滤器643.1.5跟踪模板653.1.6跟踪数据653.2跟踪的自动化663.2.1使用GUI捕捉跟踪663.2.2使用存储过程捕捉跟踪673.3结合跟踪和性能监视器输出683.4SQLProfiler建议693.4.1限制事件和数据列693.4.2丢弃性能分析所用的启动事件703.4.3限制跟踪输出大小703.4.4避免在线数据列排序713.4.5远程运行Profiler713.4.6限制使用某些事件713.5没有Profiler情况下的查询性能度量713.6开销较大的查询723.6.1识别开销较大的查询733.6.2识别运行缓慢的查询773.7执行计划783.7.1分析查询执行计划803.7.2识别执行计划中开销较大的步骤823.7.3分析索引有效性833.7.4分析连接有效性843.7.5实际执行计划vs.估算执行计划883.7.6计划缓存893.8查询开销903.8.1客户统计903.8.2执行时间913.8.3STATISTICSIO923.9小结94第4章索引分析954.1什么是索引954.1.1索引的好处974.1.2索引开销984.2索引设计建议1004.2.1检查WHERE子句和连接条件列1004.2.2使用窄索引1024.2.3检查列的唯一性1034.2.4检查列数据类型1064.2.5考虑列顺序1074.2.6考虑索引类型1094.3聚簇索引1094.3.1堆表1104.3.2与非聚簇索引的关系1104.3.3聚簇索引建议1124.4非聚簇索引1174.4.1非聚簇索引维护1174.4.2定义书签查找1174.4.3非聚簇索引建议1184.5聚簇索引vs.非聚簇索引1184.5.1聚簇索引相对于非聚簇索引的好处1194.5.2非聚簇索引相对于聚簇索引的好处1204.6高级索引技术1214.6.1覆盖索引1224.6.2索引交叉1244.6.3索引连接1254.6.4过滤索引1264.6.5索引视图1284.6.6索引压缩1324.7特殊索引类型1344.7.1全文索引1344.7.2空间索引1354.7.3XML1354.8索引的附加特性1354.8.1不同的列排序顺序1354.8.2在计算列上的索引1364.8.3BIT数据类型列上的索引1364.8.4作为一个查询处理的CREATEINDEX语句1364.8.5并行索引创建1364.8.6在线索引创建1374.8.7考虑数据库引擎调整顾问1374.9小结137第5章数据库引擎调整顾问1395.1数据库引擎调整顾问机制1395.2数据库引擎调整顾问实例1435.2.1调整一个查询1435.2.2调整一个跟踪工作负载1465.3数据库引擎调整顾问的局限性1485.4小结149第6章书签查找分析1506.1书签查找的目的1506.2书签查找的缺点1526.3分析书签查找的起因1536.4解决书签查找1556.4.1使用一个聚簇索引1556.4.2使用一个覆盖索引1556.4.3使用索引连接1586.5小结160第7章统计分析1617.1统计在查询优化中的角色1617.2索引列上的统计1627.2.1更新统计的好处1627.2.2过时统计的缺点1647.3在非索引列上的统计1657.3.1在非索引列上统计的好处1667.3.2丢失非索引列上的统计的缺点1697.4分析统计1727.4.1密度1747.4.2多列索引上的统计1747.4.3过滤索引上的统计1757.5统计维护1767.5.1自动维护1777.5.2人工维护1797.5.3统计维护状态1817.6为查询分析统计的有效性1827.6.1解决丢失统计问题1827.6.2解决过时统计问题1847.7建议1867.7.1统计的向后兼容性1867.7.2自动创建统计1867.7.3自动更新统计1877.7.4自动异步更新统计1897.7.5收集统计的采样数量1897.8小结190第8章碎片分析1918.1碎片的成因1918.1.1UPDATE语句引起的页面分割1938.1.2INSERT语句引起的页面分割1968.2碎片开销1978.3分析碎片数量2008.4碎片解决方案2048.4.1卸载并重建索引2048.4.2使用DROP_EXISTING子句重建索引2058.4.3执行ALTERINDEXREBUILD语句2058.4.4执行ALTERINDEXREORGANIZE语句2078.5填充因子的重要性2098.6自动维护2128.7小结217第9章执行计划缓冲分析2189.1执行计划生成2189.1.1解析器2199.1.2代数化器2209.1.3优化2219.2执行计划缓冲2279.3执行计划组件2279.3.1查询计划2279.3.2执行上下文2279.4执行计划的老化2289.5分析执行计划缓冲2289.6执行计划重用2299.6.1即席工作负载2309.6.2预定义工作负载2319.6.3即席工作负载的计划可重用性2319.6.4预定义工作负载的计划可重用性2399.7查询计划Hash和查询Hash2489.8执行计划缓冲建议2519.8.1明确地参数化查询的可变部分2529.8.2使用存储过程实现业务功能2529.8.3使用sp_executesql编程以避免存储过程维护2529.8.4实现准备/执行模式以避免重传查询字符串2539.8.5避免即席查询2539.8.6对于动态查询sp_executesql优于EXECUTE2539.8.7小心地参数化查询的可变部分2549.8.8不要允许查询中对象的隐含解析2549.9小结254第10章存储过程重编译25610.1重编译的好处和缺点25610.2确认导致重编译的语句25810.3分析重编译起因26010.3.1架构或绑定变化26110.3.2统计变化26110.3.3延迟对象解析26410.3.4SET选项变化26610.3.5执行计划老化26610.3.6显式调用sp_recompile26710.3.7显式使用RECOMPILE子句26810.4避免重编译26910.4.1不要交替使用DDL和DML语句27010.4.2避免统计变化引起的重编译27110.4.3使用表变量27310.4.4避免在存储过程中修改SET选项27510.4.5使用OPTIMIZEFOR查询提示27610.4.6使用计划指南27710.5小结281第11章查询设计分析28211.1查询设计建议28211.2在小结果集上操作28311.2.1限制选择列表中的列数28311.2.2使用高选择性的WHERE子句28411.3有效地使用索引28411.3.1避免不可参数化的搜索条件28511.3.2避免WHERE子句列上的算术运算符28911.3.3避免WHERE子句列上的函数29011.4避免优化器提示29211.4.1连接提示29311.4.2索引提示29511.5使用域和参照完整性29611.5.1非空约束29711.5.2声明参照完整性29911.6避免资源密集型查询30111.6.1避免数据类型转换30111.6.2使用EXISTS代替COUNT(*)验证数据存在30311.6.3使用UNIONALL代替UNION30411.6.4为聚合和排序操作使用索引30511.6.5避免在批查询中的局部变量30611.6.6小心地命名存储过程30911.7减少网络传输数量31111.7.1同时执行多个查询31111.7.2使用SETNOCOUNT31111.8降低事务开销31211.8.1减少日志开销31211.8.2减少锁开销31411.9小结315第12章阻塞分析31612.1阻塞基础知识31612.2理解阻塞31712.2.1原子性31712.2.2一致性32012.2.3隔离性32012.2.4持久性32112.3数据库锁32112.3.1锁粒度32212.3.2锁升级32512.3.3锁模式32612.3.4锁兼容性33212.4隔离级别33212.4.1未提交读33312.4.2已提交读33312.4.3可重复读33512.4.4可序列化(Serializable)33812.4.5快照(Snapshot)34312.5索引对锁的作用34312.5.1非聚簇索引的作用34412.5.2聚簇索引的作用34612.5.3索引在可序列化隔离级别上的作用34612.6捕捉阻塞信息34712.6.1使用SQL捕捉阻塞信息34712.6.2Profiler跟踪和被阻塞进程报告事件34912.7阻塞解决方案35112.7.1优化查询35212.7.2降低隔离级别35212.7.3分区争用的数据35312.7.4争用数据上的覆盖索引35412.8减少阻塞的建议35412.9自动化侦测和收集阻塞信息35512.10小结359第13章死锁分析36013.1死锁基础知识36013.2使用错误处理来捕捉死锁36113.3死锁分析36213.3.1收集死锁信息36213.3.2分析死锁36413.4避免死锁36813.4.1按照相同的时间顺序访问资源36813.4.2减少被访问资源的数量36913.4.3最小化锁的争用36913.5小结370第14章游标开销分析37214.1游标基础知识37214.1.1游标位置37314.1.2游标并发性37414.1.3游标类型37614.2游标开销比较37814.2.1游标位置的开销比较37814.2.2游标并发性上的开销比较38014.2.3在游标类型上的开销比较38114.3默认结果集38314.3.1好处38414.3.2缺点38414.4分析SQLServer游标开销38614.5游标建议39014.6小结392第15章数据库工作负载优化39315.1工作负载优化基础知识39315.2工作负载优化步骤39415.3捕捉工作负载39715.4分析工作负载39915.5识别开销最大的查询40015.6确定开销最大的查询的基线资源使用40215.6.1总体资源使用40215.6.2详细资源使用40215.7分析和优化外部因素40515.7.1分析应用程序使用的批级别选项40515.7.2分析统计有效性40615.7.3分析碎片整理需求40615.8分析开销最大的查询的内部行为41015.8.1分析查询执行计划41015.8.2识别执行计划中开销较大的步骤41215.8.3分析处理策略的效率41215.9优化代价最大的查询41215.9.1修改现有索引41315.9.2分析连接提示的应用41515.9.3避免聚簇索引扫描操作41715.9.4修改过程41815.10分析对数据库工作负载的影响42015.11迭代各个优化阶段42115.12小结424第16章SQLServer优化检查列表42516.1数据库设计42516.1.1平衡不足和过多的规范化42616.1.2从实体完整性约束中得利42716.1.3从域和参照完整性约束中得利42816.1.4采用索引设计最佳实践43016.1.5避免在存储过程名称中使用sp_前缀43116.1.6最小化触发器的使用43116.2查询设计43216.2.1使用SETNOCOUNTON命令43216.2.2显式定义对象所有者43216.2.3避免不可参数化的搜索条件43216.2.4避免WHERE子句列上的算术运算符43316.2.5避免优化器提示43416.2.6远离嵌套视图43416.2.7确保没有隐含的数据类型转换43516.2.8最小化日志开销43516.2.9采用重用执行计划的最佳实践43516.2.10采用数据库事务最佳实践43616.2.11消除或减少数据库游标开销43716.3配置设置43716.3.1AffinityMask43716.3.2内存配置选项43716.3.3并行性开销阈值43816.3.4最大并行度43816.3.5优化即席工作负载43816.3.6查询调控器开销限制43916.3.7填充因子(%)43916.3.8被阻塞过程阈值43916.3.9数据库文件布局43916.3.10数据库压缩44016.4数据库管理44016.4.1保持统计最新44016.4.2保持最小数量的索引碎片数量44116.4.3循环使用SQL错误日志文件44116.4.4避免像AUTO_CLOSE或AUTO_SHRINK这样的自动化数据库功能44116.4.5最小化SQL跟踪开销44216.5数据库备份44216.5.1增量和事务日志备份频率44216.5.2备份分布44316.5.3备份压缩44416.6小结444
展开全部
配送说明
...
相似商品
为你推荐
开播时间:09月02日 10:30