早期的文章中,曾经提到过性能调优中的DETECT方法论,这里先简单回顾一下DETECT方法论。


Discover the problem :发现问题

Explore the conditions:探究原因

Track down possible approaches:提供可能解决的方式

Execute the most likelyapproach:执行最好可能的解决方式

Check of success :确认是否成功(如果没有成功,反复执行上面的步骤)

Tie up loose ends :完成剩余工作


首先看 Discover ,发现问题

是否已经简洁的描述了整个问题?

用户当前的基线在哪里?

用户期望的是什么?

并不是所以的问题都可以解决的


再看Explore,探究原因

取得证据

  • SqlProfiler跟踪 /Sql Trace
  • DMV 和 DMF
  • ShowPlan执行计划输出
  • 各种系统的性能计数器
  • sqlserver特有的性能计数器

检查最明显的问题(探究问题先不要深入)

Track down 提供可能的解决方式

第一阶段,建立证明假设的计划

第二阶段,建立解决问题的计划


执行最有可能的解决方案

第一阶段,执行测试计划来证明你的假设

第二阶段,执行解决问题的方案


Check,确认成功与否

第一阶段

你的计划证明了你的假设,还是推翻了他?

第二阶段

  • 你的计划是否改变了现象?
  • 瓶颈是否转移了?
  • 解决方案是否符合你原先的目标?

记住:该过程通常是递归反复执行的


Tie up 完成剩余工作,收尾

  • 性能调优是否达会有无法预计的边际效应?
  • 所做的修改是否真正解决了问题,会不会短时间又碰到相同问题?
  • 还需要做哪些跟踪的工作?


上面说了那么方法论,虽然很枯燥,但是还是有指导意义的。下面来点实际的知识。


瓶颈分析

瓶颈的定义

瓶颈=需求达到的速率>实际处理量

流程:

  • 决定是卡在哪一个点上
  • 决定在队列中等待的状况
  • 减少输入(需求达到的速率)或是增加同时的处理量
  • 决定收益
  • 决定成本

常见瓶颈的监视任务

  • 监视内存占用
  • 监视线程和CPU使用
  • 监视硬盘IO
  • 监视低性能查询
  • 监视存储过程、sql和用户活动
  • 监视当前锁定和用户互动

建立性能调优的计划

性能调优是反复的过程,一而再,再而三的循环,一次又一次趋近的修正,要利用文字记录以说明

  • 理出头绪,突显问题并证明
  • 系统的逼近目标
  • 有共识,知道彼此谈论的标地
  • 能够汇总比较
  • 当系统出现的多个瓶颈,找出最关键的,成本最低的先执行调优

执行性能调优的计划时,要确定对线上生产环境的影响


方法论--缩小




性能调优中常用的工作


  • windows事件查看器
  • windows系统监视器
  • SSMS中的当前活动窗口
  • T-SQL工具
  • Sql Profiler
  • 查询分析器
  • 数据库引擎优化顾问

windows事件查看器,主要是查看以下的事件日志

  • windows应用程序日志
  • windows系统日志
  • windows安全日志

windows系统监视器能够跟踪:

  • sql server I/O
  • sql server 内存
  • sql server用户
  • sql server 锁
  • 复制活动


SSMS中的活动监视器:

  • 活动用户任务
  • 资源等待
  • 数据文件I/O
  • 耗费大量资源的查询

T-SQL工具:

  • 系统存储过程
  • 全局变量
  • T-SQL语句
  • DBCC
  • 跟踪标记
  • DMF/DMF


Sql Profiler,跟踪并捕获sqlserver事件

  • 选择需要跟踪的事件
  • 选择跟踪模版
  • 选择需要捕获的数据
  • 有意义对数据进行分类

查询分析器

  • 显示查询执行计划
  • 显示服务器跟踪
  • 显示服务器端统计信息
  • 显示客户端统计信息

数据库引擎优化顾问

  • 分析瓶颈
  • 给出建议sql语句(索引和统计信息)



更多相关文章

  1. [O]SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
  2. Mysql完全手册(笔记二,使用数据与性能优化)
  3. MySQL 的COUNT(x)性能怎么样?
  4. MySQL延迟关联性能优化方法
  5. yahoo mysql性能监控工具使用
  6. 在进行性能测试时如何避免SQL Server的“重建统计”?
  7. SQL Server 2005与SQL Server 2000相比性能提高多少?
  8. ListView可复用适配器的封装及性能优化
  9. Android App性能信息获取方法

随机推荐

  1. javascript中this的指向问题
  2. 两个iframe之间实现锚点功能
  3. [转]在网页中加入声音文件,并且用JavaScri
  4. 使用HTML文件中的React调用.js文件中的Ja
  5. jQuery在.each循环中获取输入值
  6. Javascript字符串替换为动态创建的模式。
  7. Qunit:如何在不知道acceptCallCount的情况
  8. 如何从控制器内的javascript函数调用角范
  9. 使用单个函数隐藏多个输入
  10. 在laravel中的Http Post使用fetch api给