SQLSERVER数据库性能优化【转载】

出处:https://blog.51cto.com/jimshu/1250066程序员

前言数据库

  我1998年第一次接触SQL Server 6.5 for Windows NT 4.0,当时的感受就认为SQL Server只是一个功能强大的Excel文件。如今回想起来,当年抱着这样一种态度,我开发的那些应用程序应该是很是幼稚的,其性能可想而知。记得那时候随便查询一笔记录就要花费十几秒,已经是司空见惯。当时做为程序员(“码农”)兼DBA,我彷佛只会抱怨这个数据库系统的“低级”、“质量差”,或者向boss提议升级服务器的硬件。因为一切都靠自学,我就没有检讨过自身的数据库技术水平。性能优化

  2003年“非典”期间,我冒着生命危险去参加MCDBA2000的培训课程。XF Kong老师经过系统讲解,使我对SQL Server 2000的了解和掌握再也不停留在肤浅的表面。随着逐步深刻走向SQL Server底层技术,我对数据库的应用访问和平常运维终于摆脱了低级阶段。以后,各类性能问题的表症和对策也就逐清晰起来。服务器

  最近几年看过Microsoft两位数据库“大拿”Howard Yin、Max Shen的文章,借助两位专家的研究成果,并参考一些技术书籍,借51CTO的这块风水宝地,我陆续会将SQL Server 性能优化的一系列心得与体会整理并发布出来。架构

 

 

1、概述并发

  《1、数据库设计与性能优化--概述》,即本文。http://jimshu.blog.51cto.com/3171847/1250066运维

  根据个人理解,OLTP的性能优化主要在于2个方面:数据库设计

(1)系统架构和设计优化工具

  要在SQL Server方案中实现最优的性能,最关键的是要有一个很好的数据库设计方案。在实际工做中,许多SQL Server方案每每是因为数据库设计得很差致使性能不好。性能

  系统架构的设计对系统的性能有着直接的影响,若是设计不当,甚至将面临推倒重来的严重局面。一些大型软件企业或正规的软件开发团队通常都有专职的数据库架构专家参与设计系统架构,并且这个过程可能很是漫长。而“码农”们兼职在设计时每每忽略一些重要问题,或者由于开发周期过短而根本时间没有考虑这些因素,例如,没有考虑到将来3~5年的数据增加量,没有考虑到访问压力,等等。

  在设计数据库、表、索引、视图等对象时,不只要熟悉这些对象的逻辑工做原理,更要了解这些对象可能存在的瓶颈,争取在设计阶段就实现优化。

  在数据库系统的维护阶段,须要经过一些工具对性能进行监视。

 

(2)查询优化

   SQL Server数据库查询速度慢的缘由有不少,除了系统架构设计方面的问题,查询效率也值得重视。

 

  我首先将重点放在系统架构和设计优化方面,如下分别从软件生命周期的角度、从理解瓶颈的角度进行详细论述。

 

2、从软件生命周期的角度

  根据软件工程瀑布模型(Waterfall Model),软件的生命周期由多个部分组成。数据库的优化应当从设计阶段就开始,并贯穿整个软件生命周期。

075711413.jpg

 

一、设计

  建议由专职的数据库架构专家参与设计。

  需求分析时要具备前瞻性,至少要规划将来3~5年数据增加量。

  《2、服务器优化(1)实现负载平衡》 http://jimshu.blog.51cto.com/3171847/1250070

  《2、服务器优化(2)性能评测与负载预估》 http://jimshu.blog.51cto.com/3171847/1251142

  《2、服务器优化(3)服务器端优化措施》 http://jimshu.blog.51cto.com/3171847/1251545

  《2、服务器优化(4)资源调控器管理工做负荷》 http://jimshu.blog.51cto.com/blog/3171847/1251546

  《2、服务器优化(5)数据库版本的选型》 http://jimshu.blog.51cto.com/3171847/1251547

  《2、服务器优化(6)WSRM管理多个实例》 http://jimshu.blog.51cto.com/3171847/1252417

 

二、开发

  查询优化,索引优化

  《3、索引优化(1)堆上的非汇集索引》http://jimshu.blog.51cto.com/3171847/1252419

  《3、索引优化(2)汇集索引》 http://jimshu.blog.51cto.com/3171847/1252420

  《3、索引优化(3)汇集索引上的非汇集索引》 http://jimshu.blog.51cto.com/3171847/1252421

  《3、索引优化(4)索引碎片》 http://jimshu.blog.51cto.com/3171847/1254954

  《3、索引优化(5)索引设计指南》 http://jimshu.blog.51cto.com/3171847/1254956

  《3、索引优化(6)筛选索引》 http://jimshu.blog.51cto.com/3171847/1254965

 

  《查询优化(1)。。。》 、《查询优化(n)。。。》 将列入下一个专题。

 

三、测试、部署

  数据库物理优化,例如,数据库存储位置的设计。系统资源的优化。

  《4、物理优化(1)范式化》 http://jimshu.blog.51cto.com/3171847/1257298

  《4、物理优化(2)索引视图》http://jimshu.blog.51cto.com/3171847/1257306

  《4、物理优化(3)计算列及其索引》 http://jimshu.blog.51cto.com/3171847/1257310

  《4、物理优化(4)分区视图》 http://jimshu.blog.51cto.com/3171847/1258453

  《4、物理优化(5)表和索引分区》 http://jimshu.blog.51cto.com/3171847/1258459

  《4、物理优化(6)数据库引擎优化顾问》 http://jimshu.blog.51cto.com/3171847/1258469

  《4、物理优化(7)查看索引使用状况》 http://jimshu.blog.51cto.com/blog/3171847/1258817

 

四、平常运维

  数据库性能监测,资源优化。

  《5、性能监视(1)事件探查器》 http://jimshu.blog.51cto.com/3171847/1259089

  《5、性能监视(2)Windows性能日志》 http://jimshu.blog.51cto.com/3171847/1259091

  《5、性能监视(3)SQL 跟踪》 http://jimshu.blog.51cto.com/3171847/1259093

  《5、性能监视(4)扩展事件》 http://jimshu.blog.51cto.com/blog/3171847/1259321

  《5、性能监视(5)管理数据仓库》 http://jimshu.blog.51cto.com/3171847/1259322

  《5、性能监视(6)数据库审核》 http://jimshu.blog.51cto.com/3171847/1259323

  《5、性能监视(7)SQLDIAG》 http://jimshu.blog.51cto.com/3171847/1262406

 

 

3、从理解瓶颈的角度

  从数据库原理和实践经验来看,影响SQL Server有主要瓶颈有如下3项:

164230647.png

 

一、CPU

 

  《6、CPU优化(1)CPU技术分类》 http://jimshu.blog.51cto.com/3171847/1265166

  《6、CPU优化(2)超线程》 http://jimshu.blog.51cto.com/3171847/1265237

  《6、CPU优化(3)处理器组》 http://jimshu.blog.51cto.com/3171847/1265438

  《6、CPU优化(4)NUMA架构》http://jimshu.blog.51cto.com/3171847/1266977

  《6、CPU优化(5)最大并行度》 http://jimshu.blog.51cto.com/3171847/1266978

  《6、CPU优化(6)DMV与计数器》 http://jimshu.blog.51cto.com/3171847/1269174

 

二、内存

  《7、内存优化(1)启用AWE》 http://jimshu.blog.51cto.com/3171847/1269942

  《7、内存优化(2)动态内存分配》 http://jimshu.blog.51cto.com/3171847/1270005

  《7、内存优化(3)使用DMV》 http://jimshu.blog.51cto.com/3171847/1270018

  《7、内存优化(4)内存计数器》 http://jimshu.blog.51cto.com/3171847/1271576

  《7、内存优化(5)内存压力分析》

  《7、内存优化(6)SQL Server 2012内存管理的革新》

 

三、磁盘I/O

  《8、IO优化(1)磁盘簇》 http://jimshu.blog.51cto.com/3171847/1298514

  《8、IO优化(2)SQLIO工具》 http://jimshu.blog.51cto.com/3171847/1298515

  《8、IO优化(3)稀疏列》 http://jimshu.blog.51cto.com/3171847/1298558

  《8、IO优化(4)数据压缩》 http://jimshu.blog.51cto.com/3171847/1299047

  《8、IO优化(5)文件组》 http://jimshu.blog.51cto.com/3171847/1299170

  《8、IO优化(6)tempdb》 http://jimshu.blog.51cto.com/3171847/1299175

  《8、IO优化(7)减小IO竞争》 http://jimshu.blog.51cto.com/3171847/1299191

 

4、结语

  《9、OLTP 性能调整与优化--结语》 http://jimshu.blog.51cto.com/3171847/1300717