sql 2005性能调优
转自:http://www.cnblogs.com/MR_ke/archive/2010/08/25/1807856.html
SQL Server在运行一段时间,随着数据的积累,SQL运行效率会逐步降低,为了使用业务系统正常动作,经常IT部门需要花高价请SQL调优专家来解决。其实调优也不复杂,主要是找到影响效率的SQL,然后对症下药,这里给出几个技巧,相信对大家非常实用。
1、检查SQL阻塞原因
|
1
2
3
|
select blocking_session_id,from sys.dm_os_waiting_taskswhere blocking_session_idis not null |
2、检查前10个等待资源的SQL语句
|
1
2
3
|
select top 10from sys.dm_os_wait_statsorder by wait_time_msdesc |
3、查询显示 CPU 平均占用率最高的前50个SQL 语句
|
1
2
3
4
|
SELECT TOP 50AS [Avg CPUTime],(SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN statement_end_offsetthen LEN(CONVERT(nvarchar(max),ELSE statement_end_offsetend -statement_start_offset)/2)FROM sys.dm_exec_sql_text(sql_handle))AS query_text,FROM sys.dm_exec_query_statsORDER BY [Avg CPUTime]DESC |
4、CPU 瓶颈通常由以下原因引起:查询计划并非最优、配置不当、设计因素不良或硬件资源不足。下面的常用查询可帮助您确定导致CPU瓶颈的原因。下面的查询使您能够深入了解当前缓存的哪些批处理或过程占用了大部分CPU资源。
|
1
2
3
4
5
6
7
8
|
SELECT TOP 50SUM(qs.total_worker_time)AS total_cpu_time,SUM(qs.execution_count)AS total_execution_count,COUNT(*)AS number_of_statements,qs.sql_handleFROM sys.dm_exec_query_statsAS qsGROUP BY qs.sql_handleORDER BY SUM(qs.total_worker_time)DESC |
5、下面的查询显示缓存计划所占用的CPU总使用率(带 SQL 文本)。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SELECTtotal_cpu_time,total_execution_count,number_of_statements,s2.textROM(SELECT TOP 50SUM(qs.total_worker_time)AS total_cpu_time,SUM(qs.execution_count)AS total_execution_count,COUNT(*)AS number_of_statements,qs.sql_handleFROMsys.dm_exec_query_statsAS qsGROUP BY qs.sql_handleORDER BY SUM(qs.total_worker_time)DESC)AS statsCROSS APPLYAS s2 |
6、下面的示例查询显示已重新编译的前 25 个存储过程。plan_generation_num 指示该查询已重新编译的次数。
|
1
2
3
4
5
6
7
8
9
10
11
|
select top 25sql_text.text,sql_handle,plan_generation_num,execution_count,dbid,objectidfrom sys.dm_exec_query_statscross applyas sql_textwhere plan_generation_numorder by plan_generation_numdesc |
7、效率较低的查询计划可能增大 CPU 占用率。下面的查询显示哪个查询占用了最多的 CPU 累计使用率。
|
1
2
3
4
5
6
|
SELECThighest_cpu_queries.plan_handle,from(select top 50from sys.dm_exec_query_statsorder by qs.total_worker_timedesc)as highest_cpu_queriescross applyas qorder by highest_cpu_queries.total_worker_timedesc |
8、下面的查询显示一些可能占用大量 CPU 使用率的运算符(例如 ‘%Hash Match%’、‘%Sort%’)以找出可疑对象。
|
1
2
3
4
5
6
7
|
select *fromsys.dm_exec_cached_planscross applywherecast(query_planas nvarchar(max))like '%Sort%'or cast(query_planas nvarchar(max))like '%Hash |
9、如果已检测到效率低下并导致 CPU 占用率较高的查询计划,请对该查询中涉及的表运行 UPDATE STATISTICS 以查看该问题是否仍然存在。然后,收集相关数据并将此问题报告给 PerformancePoint Planning 支持人员。如果您的系统存在过多的编译和重新编译,可能会导致系统出现与 CPU 相关的性能问题。您可以运行下面的 DMV 查询来找出过多的编译/重新编译。
|
1
2
|
select *from sys.dm_exec_query_optimizer_infowhere counter'optimizations' or counter'elapsed |
sql 2005性能调优的更多相关文章
- SQL server 性能调优
转自: http://www.cnblogs.com/MR_ke/archive/2010/08/25/1807856.html sql 2005性能调优 SQL Server在运行一段时间,随着数据 ...
- SQL Server 性能调优培训引言
原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...
- sql server 性能调优之 资源等待PAGELATCH
一.概述 在前几章介绍过 sql server 性能调优资源等待之PAGEIOLATCH,PAGEIOLATCH是出现在sql server要和磁盘作交互的时候,所以加个IO两个字.这次来介绍PAGE ...
- sql server 性能调优之 资源等待 LCk
一. 概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 “sql server 锁与事务拨云见日”.下面还是使用sys.dm_os_wait_stats 来查看,并找出 ...
- sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)
一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU, 内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...
- 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 ...
- [转]SQL Server 性能调优(io)
目录 诊断磁盘io问题 常见的磁盘问题 容量替代了性能 负载隔离配置有问题 分区对齐配置有问题 总结 关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DA ...
- sql server 性能调优 资源等待之网络I/O
原文:sql server 性能调优 资源等待之网络I/O 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果 ...
- sql server 性能调优 资源等待之内存瓶颈的三种等待类型
原文:sql server 性能调优 资源等待之内存瓶颈的三种等待类型 一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),S ...
随机推荐
- strncpy, strncpy_s
Defined in header <string.h> (1) char *strncpy( char *dest, const char *src, size_t co ...
- grid - 网格项目层级
网格项目可以具有层级和堆栈,必要时可能通过z-index属性来指定. 1.在这个例子中,item1和item2的开始行都是1,item1列的开始是1,item2列的开始是2,并且它们都跨越两列.两个网 ...
- JAVA使用Logback发送日志到控制台、文件、ELK的最简单用法
一.简述 本文讲JAVA使用Logback发送日志到控制台.文件.ELK的最简单用法. 二.教程 1.新建pom.xml项目引入下列依赖: <dependencies> <!--Be ...
- 一步步教你轻松学KNN模型算法
一步步教你轻松学KNN模型算法( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解. ...
- 【go】golang中置new()函数和make()函数的区别
Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives),其功能相似,却有本质区别. 1.new 官方文档 // The new built-in f ...
- Easyui中 alert 带回调函数的 消息框
带回调函数的 消息框: $.messager.alert({ title:'消息', msg:'电话号码 只能是数字!', icon: 'info', width: 300, top:200 , // ...
- 让rpc支持双向通信
rpc采用了C/S模型,不支持双向通信:client只能远程调用server端的RPC接口,但client端则没有RPC供server端调用,这意味着,client端能够主动与server端通信,但s ...
- linux内核剖析(七)Linux进程间通信的几种方式总结
进程间通信概述 进程通信的目的 数据传输 一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据 多个进程想要操作共享数据,一个进程对共享数据 通知事 一个进程需要向另 ...
- Django 复习
Django 基础1 day49 老师的博客:https://www.cnblogs.com/yuanchenqi/articles/6083427.html http://www.cnblogs.c ...
- C#中,重新排列panel中的按钮
https://www.cnblogs.com/hfzsjz/archive/2010/08/13/1799068.html void ArrangeButtons(Panel pn) { , y = ...