首页
登录 | 注册

一、数据库设计与性能优化--概述

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jimshu.blog.51cto.com/3171847/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 性能优化的一系列心得与体会整理并发布出来。



一、概述

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

  根据我的理解,OLTP的性能优化主要在于2个方面:

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

  要在SQL Server方案中实现最优的性能,最关键的是要有一个很好的数据库设计方案。在实际工作中,许多SQL Server方案往往是由于数据库设计得不好导致性能很差。

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

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

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


(2)查询优化

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


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


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

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



1、设计

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

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

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

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

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

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

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

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


2、开发

  查询优化,索引优化

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

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

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

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

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

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


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


3、测试、部署

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

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

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

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

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

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

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

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


4、日常运维

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

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

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

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

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

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

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

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



三、从理解瓶颈的角度

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



1、CPU



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

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

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

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

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

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


2、内存

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

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

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

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

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

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


3、磁盘I/O

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

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

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

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

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

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

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


四、结语

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


本文出自 “我们一起追过的MSSQL” 博客,请务必保留此出处http://jimshu.blog.51cto.com/3171847/1250066


本文网址:http://www.bnee.net/article/24896.html

相关文章

  • 一.抓取批量耗时最久的SQL: 2.执行次数最多的TOP10SQL" db2 "select substr(stmt_text,1,500) as stmt_text,NUM_EXECUTIONS,TOTAL_USR_C ...
  •      设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事.在开发工具.数据库设计.应用程序的结构.查询设计.接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能.本文以SQL Server为例,从 ...
  • 分布式实时分析数据库citus数据插入性能优化之二 在上回的分布式实时分析数据库citus数据插入性能优化 提到citus的master上执行计划生成比较耗费时间,下面尝试通过修改源码绕过master的执行计划生成. 环境 软硬件配置 Ce ...
  • 大型DB2数据库性能优化实战案例: http://www.db2china.net/home/space.php?uid=26946&do=blog&id=30427 感觉这些调优的方法和操作其实都见识过,看来东西就这些,就 ...
  • 出处:http://www.eygle.com/blog链接:http://www.eygle.com/archives/2005/08/ecinieoracleouo.html很多朋友经常问起学习Oracle的方法,在这里我把写在< ...
  • 性能优化方法和技巧
    系列目录 性能优化方法和技巧性能优化的方法和技巧:概述性能优化的方法和技巧:代码性能优化的方法和技巧:工具 这是一个可以用一本书来讲的话题,用一系列博客来讲,可能会比较单薄一点,这里只捡重要的说,忽略很多细节,当然以后还可以补充和扩展这个话 ...
  • JVM系列之一:JVM内存模型和性能优化
    JVM内存模型优点 内置基于内存的并发模型:      多线程机制 同步锁Synchronization 大量线程安全型库包支持 基于内存的并发机制,粒度灵活控制,灵活度高于数据库锁. 多核并行计算模型 基于线程的异步模型. JVM性能的人 ...