转自: http://www.cnblogs.com/MR_ke/archive/2010/08/25/1807856.html

sql 2005性能调优

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

  1. 1、检查SQL阻塞原因
  2.  
  3. select blocking_session_id, wait_duration_ms, session_id
  4.  
  5. from sys.dm_os_waiting_tasks
  6.  
  7. where blocking_session_id is not null
  8.  
  9. 2、检查前10个等待资源的SQL语句
  10.  
  11. select top 10 *
  12.  
  13. from sys.dm_os_wait_stats
  14.  
  15. order by wait_time_ms desc
  16.  
  17. 3、查询显示 CPU 平均占用率最高的前50SQL 语句
  18.  
  19. SELECT TOP 50 total_worker_time/execution_count AS [Avg CPU Time],
  20.  
  21. (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, *
  22.  
  23. FROM sys.dm_exec_query_stats
  24.  
  25. ORDER BY [Avg CPU Time] DESC
  26.  
  27. 4CPU 瓶颈通常由以下原因引起:查询计划并非最优、配置不当、设计因素不良或硬件资源不足。下面的常用查询可帮助您确定导致CPU瓶颈的原因。下面的查询使您能够深入了解当前缓存的哪些批处理或过程占用了大部分CPU资源。
  28.  
  29. SELECT TOP 50
  30.  
  31. SUM(qs.total_worker_time) AS total_cpu_time,
  32.  
  33. SUM(qs.execution_count) AS total_execution_count,
  34.  
  35. COUNT(*) AS number_of_statements,
  36.  
  37. qs.sql_handle
  38.  
  39. FROM sys.dm_exec_query_stats AS qs
  40.  
  41. GROUP BY qs.sql_handle
  42.  
  43. ORDER BY SUM(qs.total_worker_time) DESC
  44.  
  45. 5、下面的查询显示缓存计划所占用的CPU总使用率(带 SQL 文本)。
  46.  
  47. SELECT
  48.  
  49. total_cpu_time,
  50.  
  51. total_execution_count,
  52.  
  53. number_of_statements,
  54.  
  55. s2.text
  56.  
  57. ROM
  58.  
  59. (SELECT TOP 50
  60.  
  61. SUM(qs.total_worker_time) AS total_cpu_time,
  62.  
  63. SUM(qs.execution_count) AS total_execution_count,
  64.  
  65. COUNT(*) AS number_of_statements,
  66.  
  67. qs.sql_handle
  68.  
  69. FROM
  70.  
  71. sys.dm_exec_query_stats AS qs
  72.  
  73. GROUP BY qs.sql_handle
  74.  
  75. ORDER BY SUM(qs.total_worker_time) DESC) AS stats
  76.  
  77. CROSS APPLY sys.dm_exec_sql_text(stats.sql_handle) AS s2
  78.  
  79. 6、下面的示例查询显示已重新编译的前 25 个存储过程。plan_generation_num 指示该查询已重新编译的次数。
  80.  
  81. select top 25
  82.  
  83. sql_text.text,
  84.  
  85. sql_handle,
  86.  
  87. plan_generation_num,
  88.  
  89. execution_count,
  90.  
  91. dbid,
  92.  
  93. objectid
  94.  
  95. from sys.dm_exec_query_stats a
  96.  
  97. cross apply sys.dm_exec_sql_text(sql_handle) as sql_text
  98.  
  99. where plan_generation_num > 1
  100.  
  101. order by plan_generation_num desc
  102.  
  103. 7、效率较低的查询计划可能增大 CPU 占用率。下面的查询显示哪个查询占用了最多的 CPU 累计使用率。
  1. SELECT
  2.  
  3. highest_cpu_queries.plan_handle, highest_cpu_queries.total_worker_time, q.dbid, q.objectid, q.number, q.encrypted, q.[text]
  4.  
  5. from
  6.  
  7. (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
  8.  
  9. cross apply sys.dm_exec_sql_text(plan_handle) as q
  10.  
  11. order by highest_cpu_queries.total_worker_time desc
  1. 8、下面的查询显示一些可能占用大量 CPU 使用率的运算符(例如 ‘%Hash Match%’、‘%Sort%’)以找出可疑对象。
  2.  
  3. select *
  4.  
  5. from
  6.  
  7. sys.dm_exec_cached_plans
  8.  
  9. cross apply sys.dm_exec_query_plan(plan_handle)
  10.  
  11. where
  12.  
  13. cast(query_plan as nvarchar(max)) like '%Sort%'
  14.  
  15. or cast(query_plan as nvarchar(max)) like '%Hash Match%'
  16.  
  17. 9、如果已检测到效率低下并导致 CPU 占用率较高的查询计划,请对该查询中涉及的表运行 UPDATE STATISTICS 以查看该问题是否仍然存在。然后,收集相关数据并将此问题报告给 PerformancePoint Planning 支持人员。如果您的系统存在过多的编译和重新编译,可能会导致系统出现与 CPU 相关的性能问题。您可以运行下面的 DMV 查询来找出过多的编译/重新编译。
  18.  
  19. select * from sys.dm_exec_query_optimizer_info
  20.  
  21. where counter = 'optimizations' or counter = 'elapsed time'
  22.  
  23. 有错误的地方欢迎大家拍砖,希望交流和共享。

SQL server 性能调优的更多相关文章

  1. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

  2. sql server 性能调优之 资源等待PAGELATCH

    一.概述 在前几章介绍过 sql server 性能调优资源等待之PAGEIOLATCH,PAGEIOLATCH是出现在sql server要和磁盘作交互的时候,所以加个IO两个字.这次来介绍PAGE ...

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

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

  4. sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)

    一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU,  内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...

  5. sql server性能调优

    转自:https://www.cnblogs.com/woodytu/tag/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E5%9F%B9%E8%AE%AD/defaul ...

  6. [转]SQL Server 性能调优(io)

      目录 诊断磁盘io问题 常见的磁盘问题 容量替代了性能 负载隔离配置有问题 分区对齐配置有问题 总结 关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DA ...

  7. sql server 性能调优 资源等待之网络I/O

    原文:sql server 性能调优 资源等待之网络I/O 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果 ...

  8. sql server 性能调优 资源等待之内存瓶颈的三种等待类型

    原文:sql server 性能调优 资源等待之内存瓶颈的三种等待类型 一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),S ...

  9. CPU开销sql server 性能调优

    sql server 性能调优 CPU开销分析 一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU, 内存 ...

  10. 【目录】sql server 性能调优

    随笔分类 - sql server 性能调优 sql server 性能调优之 资源等待之网络I/O 摘要: 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql s ...

随机推荐

  1. [物理学与PDEs]第2章 流体力学

    [物理学与PDEs]第2章第1节 理想流体力学方程组 1.1 预备知识 [物理学与PDEs]第2章第1节 理想流体力学方程组 1.2 理想流体力学方程组 [物理学与PDEs]第2章第1节 理想流体力学 ...

  2. 项目中用到的logback列子

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender ...

  3. ubuntu14.04 wifi频繁掉线解决

    uname -r sudo lspci -knn sudo lshw -numeric -class network sudo ifconfig -a sudo route -nv sudo rfki ...

  4. C# 导出 Excel 和相关打印设置

    源地址:http://blog.csdn.net/wanmingtom/article/details/6125599 Excel.Application myExcel = new Excel.Ap ...

  5. TRUNCATE与 DELETE

    源地址:http://zhidao.baidu.com/link?url=9zB64BuXiAXNPF-zxvd6VLGTKb2FsUzQ-FsRAeQaYzycOGT5uGPXb-oB44TuYoP ...

  6. [SQL]SQL中把一个字段的数据分多行显示

    其实你完全可以写个自定义函数就OK了 . =================================================================== create func ...

  7. Hibernate注解:一对多外键关联

    情形:两个表,cms_mode是主表,cms_model_field是子表,cms_model_field的model_id字段关联到cms_model的主键. # # Source for tabl ...

  8. js json与字符串转换

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. 【转】android的一些开源项目

    自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会不定期的更新这篇文章. ...

  10. Grid Infrastructure Single Client Access Name (SCAN) Explained (文档 ID 887522.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.1 and laterExalogic Elastic Cloud ...