SQL Server在运行一段时间,随着数据的积累,SQL运行效率会逐步降低,为了使用业务系统正常动作,经常IT部门需要花高价请SQL调优专家来解决。其实调优也不复杂,主要是找到影响效率的SQL,然后对症下药,这里给出几个技巧,相信对大家非常实用。
1、检查SQL阻塞原因

select blocking_session_id, wait_duration_ms, session_id
from sys.dm_os_waiting_tasks
where blocking_session_id is not null

2、检查前10个等待资源的SQL语句

select top 10 *
from sys.dm_os_wait_stats
order by wait_time_ms desc

3、查询显示 CPU 平均占用率最高的前50个SQL 语句

SELECT TOP 50 total_worker_time/execution_count AS [Avg CPU Time],
(SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN      statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2) FROM sys.dm_exec_sql_text(sql_handle)) AS query_text, *
FROM sys.dm_exec_query_stats
ORDER BY [Avg CPU Time] DESC

4、CPU 瓶颈通常由以下原因引起:查询计划并非最优、配置不当、设计因素不良或硬件资源不足。下面的常用查询可帮助您确定导致CPU瓶颈的原因。下面的查询使您能够深入了解当前缓存的哪些批处理或过程占用了大部分CPU资源。

SELECT TOP 50
SUM(qs.total_worker_time) AS total_cpu_time,
SUM(qs.execution_count) AS total_execution_count,
COUNT(*) AS  number_of_statements,
qs.sql_handle
FROM sys.dm_exec_query_stats AS qs
GROUP BY qs.sql_handle
ORDER BY SUM(qs.total_worker_time) DESC

5、下面的查询显示缓存计划所占用的CPU总使用率(带 SQL 文本)。

SELECT
total_cpu_time,
total_execution_count,
number_of_statements,
s2.text
ROM
(SELECT TOP 50
SUM(qs.total_worker_time) AS total_cpu_time,
SUM(qs.execution_count) AS total_execution_count,
COUNT(*) AS  number_of_statements,
qs.sql_handle
FROM
sys.dm_exec_query_stats AS qs
GROUP BY qs.sql_handle
ORDER BY SUM(qs.total_worker_time) DESC) AS stats
CROSS APPLY sys.dm_exec_sql_text(stats.sql_handle) AS s2

6、下面的示例查询显示已重新编译的前 25 个存储过程。plan_generation_num 指示该查询已重新编译的次数。

select top 25
sql_text.text,
sql_handle,
plan_generation_num,
execution_count,
dbid,
objectid
from sys.dm_exec_query_stats a
cross apply sys.dm_exec_sql_text(sql_handle) as sql_text
where plan_generation_num > 1
order by plan_generation_num desc

7、效率较低的查询计划可能增大 CPU 占用率。下面的查询显示哪个查询占用了最多的 CPU 累计使用率。

SELECT
highest_cpu_queries.plan_handle, highest_cpu_queries.total_worker_time, q.dbid, q.objectid, q.number, q.encrypted, q.[text]
from
(select top 50 qs.plan_handle,  qs.total_worker_time from sys.dm_exec_query_stats qs  order by qs.total_worker_time desc) as highest_cpu_queries
cross apply sys.dm_exec_sql_text(plan_handle) as q
order by highest_cpu_queries.total_worker_time desc

8、下面的查询显示一些可能占用大量 CPU 使用率的运算符(例如 ‘%Hash Match%’、‘%Sort%’)以找出可疑对象。

select *
from
sys.dm_exec_cached_plans
cross apply sys.dm_exec_query_plan(plan_handle)
where
cast(query_plan as nvarchar(max)) like '%Sort%'
or cast(query_plan as nvarchar(max)) like '%Hash Match%'

9、如果已检测到效率低下并导致 CPU 占用率较高的查询计划,请对该查询中涉及的表运行 UPDATE STATISTICS 以查看该问题是否仍然存在。然后,收集相关数据并将此问题报告给 PerformancePoint Planning 支持人员。如果您的系统存在过多的编译和重新编译,可能会导致系统出现与 CPU 相关的性能问题。您可以运行下面的 DMV 查询来找出过多的编译/重新编译。

select * from sys.dm_exec_query_optimizer_info
where counter = 'optimizations' or counter = 'elapsed time'

转载于:https://www.cnblogs.com/MR_ke/archive/2010/08/25/1807856.html

sql 2005性能调优相关推荐

  1. SQL Server 性能调优(cpu)

    SQL Server 性能调优(cpu) 研究cpu压力工具 perfom SQL跟踪 性能视图 cpu相关的waitevent Signal wait time SOS_SCHEDULER_YIEL ...

  2. SQL Server 性能调优3 之索引(Index)的维护

    SQL Server 性能调优3 之索引(Index)的维护 热度1 评论 16 作者:溪溪水草 SQL Server 性能调优3 之索引(Index)的维护 前言 前一篇的文章介绍了通过建立索引来提 ...

  3. SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践

    SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践 前言:自从上一篇文章发出之后,收到了很朋友的关注.很多朋友要求多多实践,而不是纯粹的理论.确实,从打算出这个系列开始,我就本 ...

  4. SQL Server 性能调优(方法论)

    SQL Server 性能调优(方法论) 目录 确定思路 wait event的基本troubleshooting 虚拟文件信息(virtual file Statistics) 性能指标 执行计划缓 ...

  5. sql server 性能调优之 资源等待 LCk

    一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 "sql server 锁与事务拨云见日".下面还是使用sys.dm_os_wait_sta ...

  6. 读SQL Server性能调优实战——陈畅亮、吴一晴著

    sqlserver 微软 安装 根据业务特点来考虑 1.分析产品业务数据的增长量 预估某些关键业务数据在一定时间内的增长量,预估数据在未来的增长数据, 2.了解产品业务操作类型.考虑业务是以查询为主还 ...

  7. SQL Server性能调优入门(图文版)

    第一步,在业务高峰期抓取样本数据(2个小时左右).采用的工具是sqlserver自带的profiler,也叫事件探查器,如下图: 进入后,点击最左面的按钮,建立一个新的跟踪: 登录需要用DBO权限,所 ...

  8. SQL 2016 性能调优培训来了!!! 还免费!!!

    MicrosoftSQL Server 2016 可提供突破性的 In-Memory 性能.无与伦比的安全性.端到端移动商业智能和高级分析功能,其强大的数据处理能力,扩展性和高可用性,足以承载企业级的 ...

  9. sql查询非11位非数字_非生产环境SQL查询性能调优技巧

    sql查询非11位非数字 It is a common misconception that you need real production data, or production like dat ...

  10. oracle sql以及性能调优

    目 录 1.选用适合的ORACLE优化器 2 2.访问Table的方式 3 3.共享SQL语句 3 4.选择最有效率的表名顺序(只在基于规则的优化器中有效) 5 5.WHERE子句中的连接顺序. 6 ...

最新文章

  1. pre标签 首行会自动换行解决方案
  2. Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1问题总结及解决方案...
  3. 图文并茂详解iptables 防火墙工作原理及知识点
  4. VTK:IO之ReadRectilinearGrid
  5. oracle 双引号替换,oracle - Oracle SQL-Loader在值中有效地处理内部双引号 - SO中文参考 - www.soinside.com...
  6. 倍增:喷泉 深度解析(洛谷P7167)
  7. python转json的函数_pandas.DataFrame.to_json按行转json的方法
  8. 如果你还不明白Hello,World!
  9. YOLO系列专题——YOLOv3理论篇
  10. Linux服务器authorized_keys添加公钥后登录仍需要密码
  11. 2021计算机专硕调剂院校,2021年已公布的调剂院校专业
  12. ./node_modules/.bin/webpack指令出错,该如何解决???
  13. deepin允许root登录_[多图|需要root]在安卓手机上运行 UOS v20 arm64 版
  14. 使用浏览器抓包获取API
  15. 无人驾驶汽车系统入门(十八)——使用pure pursuit实现无人车轨迹追踪
  16. 区块链在车联网数据共享领域的研究进展
  17. MOS管符号识别MOS管不同功能MOS管与寄生电容
  18. 阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促 1
  19. OpenStack Dashboard
  20. 学习自旋电子学的笔记01:微磁模拟软件OOMMF的教程(中文版)7-7.3.4章

热门文章

  1. 第三方物流(Third Party Logistics,3PL)
  2. VS2008开发Silverlight程序用到的插件
  3. Camtasia 2021mac版
  4. 为什么需要注册中心?是用 Eureka 还是 Nacos?
  5. 从今天起,我不再使用 Java Date了!
  6. mysql数据库过滤数据_MySQL数据库常规操作一些简单绕过过滤的方法
  7. linux中级之netfilter防火墙(firewalld)
  8. Codeforces #430 dv.2 842A ,842B
  9. python第三篇:python、flask关系映射
  10. 客户端考试之渐进增强与优雅降级