/*------------------------------------------------------------------------------+
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : |
#|{>/------------------------------------------------------------------------\<}|
#|: | Author : 小爱(Beirut) |
#|: | Description: 查找占用upu 最多的一些脚本 |
#|: | SQL Version: 适用于 SQL 2012, SQL 2008 R2, SQL 2008 |
#|: | Copyright : 免费使用和共享e /^(o.o)^\ |
#|: | Create Date: 2012-04-13 16:50:20.577 |
#|: | Revision : Version: 1.1 持续更新ing |
#|{>\------------------------------------------------------------------------/<}|
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : |
#+-----------------------------------------------------------------------------*/
select GETDATE()
use tempdb
go
IF object_id('tempdb..#FindTopCPUQueries_set1') is not null DROP TABLE [dbo].[#FindTopCPUQueries_set1]
GO
declare @ServerTime datetime = getdate()
, @ConvertMiliSeconds bigint = 1000
, @FilterMoreThanMiliSeconds bigint = 1
, @FilterHours bigint = 2
, @execution_count bigint = 2
, @debugFlg bit = 0
if @debugFlg=1
select @ServerTime as ServerTime, @ConvertMiliSeconds as ConvertMiliSeconds
, @FilterMoreThanMiliSeconds as FilterMoreThanMiliSeconds, @FilterHours as FilterHours
, @execution_count as execution_count
select top 300 @@servername as servername,@ServerTime as runtime
,isnull(db_name(QueryText.dbid),'PreparedSQL') as DBName
,SUBSTRING(QueryText.text,(QueryStats.statement_start_offset/2)+1,
(isnull((
CASE QueryStats.statement_end_offset
WHEN -1 THEN DATALENGTH(QueryText.text)
WHEN 0 THEN DATALENGTH(QueryText.text)
ELSE QueryStats.statement_end_offset
END - QueryStats.statement_start_offset
)
,0)/2)+ 1
) AS QueryExecuted
,total_worker_time AS total_worker_time
,QueryStats.execution_count as execution_count
,statement_start_offset,statement_end_offset
,(
case when QueryText.dbid is null
then OBJECT_NAME(QueryText.objectid)
else OBJECT_NAME(QueryText.objectid, QueryText.dbid)
end
) as ObjectName
,query_hash
,plan_handle
,sql_handle into #FindTopCPUQueries_set1
from sys.dm_exec_query_stats as QueryStats
cross apply sys.dm_exec_sql_text(QueryStats.sql_handle) as QueryText
where QueryStats.query_hash in
(
select QueryStatsBaseTable.query_hash from sys.dm_exec_query_stats QueryStatsBaseTable
where last_execution_time > DATEADD(hh,-@FilterHours,GETDATE())
group by query_hash
having (sum(total_worker_time)/sum(execution_count))>@ConvertMiliSeconds and sum(execution_count)>@execution_count
)
order by total_worker_time/execution_count DESC;
if @debugFlg=1 select * from #FindTopCPUQueries_set1 order by QueryExecuted
if object_id('tempdb..#FindTopCPUQueries_set2') is not null DROP TABLE [dbo].[#FindTopCPUQueries_set2]
select servername,runtime,max(DBName) as DBName,max(QueryExecuted) as QueryExecuted
,(sum(total_worker_time)/sum(execution_count))/@ConvertMiliSeconds as AvgCPUTime
,sum(execution_count) as execution_count,query_hash, max(ObjectName) as ObjectName
into #FindTopCPUQueries_set2
from #FindTopCPUQueries_set1
group by query_hash,servername,runtime
order by AvgCPUTime desc
select * from #FindTopCPUQueries_set2
order by AvgCPUTime desc
--drop table #FindTopCPUQueries_set1
--drop table #FindTopCPUQueries_set2
分享到:
相关推荐
在 SQL Server 中,查询执行消耗 CPU 大的语句对于系统性能的优化至关重要。在这个文档中,我们将学习如何使用三个语句来查询执行消耗 CPU 大的 SQL 语句。 语句一:根据master数据库查询执行消耗CPU大的sql语句 ...
在执行计划中,选择开销最大的节点,然后右键点击“缺少索引详细信息”,系统会提供创建新索引的建议,以提高查询效率。 其次,方法二利用T-SQL查询来识别问题: 运行以下查询,该查询将返回过去执行时间中CPU使用...
总的来说,SQL Server 2008 R2的资源控制器为解决CPU和内存分配问题提供了强大工具,允许管理员更智能地控制服务器资源,从而提高整体系统性能和稳定性。通过定义和调整资源池与工作负载组,解决方案供应商可以确保...
在 SQL Server 系统中,DBMS 实际上处理自己的极其有效的操作系统队列和线程,因此,超线程仅在 CPU 利用率已经很高、系统上的物理 CPU 超载的情况下使用。当 SQL Server 在多个计划程序上对执行任务请求进行排队时...
在SQL Server性能优化中,使用CPU计数器是至关重要的工具,可以帮助我们识别和解决可能导致系统瓶颈的问题。本文主要探讨了几个关键的CPU资源消耗点,以及如何通过监控和调整来提升SQL Server的性能。 首先,上下文...
SQL查询效率的高低直接关系到数据的响应速度和系统的使用体验,尤其在大规模或复杂数据环境中,如联机事务处理(OLTP)或决策支持系统(DSS),查询效率的影响更为显著。 #### 二、影响SQL查询效率的主要因素 通过...
SQL查询分析器是数据库管理系统中的一个重要工具,它用于解析、优化和执行SQL语句。在“sql查询分析器分离版本”这个主题下,我们可以探讨以下几个关键知识点: 1. **SQL查询分析器的基本功能**: SQL查询分析器是...
本文将围绕标题“SQL效率查询”及其描述“直接运行函数,可以查看数据库中哪些SQL比较占用资源”的核心思想,详细介绍如何通过特定的SQL脚本来分析SQL执行效率。 #### 一、理解SQL效率查询的重要性 - **提升用户...
在SQL Server 2008中,设置最大连接数是一项重要的系统配置,它关乎到数据库服务器的性能和稳定性。此设置决定了同一时间可以有多少个客户端连接到SQL Server实例。了解并正确配置这个参数对于数据库管理员来说至关...
SQL查询优化是数据库管理中的一项重要任务,旨在提高查询效率,减少资源消耗,尤其是在处理大量数据时。本文将深入探讨几个关键的优化策略。 首先,影响SQL性能的主要原因之一是对大结果集进行高成本操作,例如排序...
SQL查询优化是数据库管理系统中至关重要的一个环节,其目的是提高数据检索速度,减轻服务器负载,提升系统的整体性能。本文将详细探讨SQL查询优化的常见原因、优化方法以及T-SQL编写时应注意的要点。 查询速度慢的...
在IT领域,尤其是在数据库管理与优化方面,SQL查询性能是一个至关重要的议题。当遇到SQL查询缓慢的情况时,可能由多种复杂的原因导致。根据提供的文件标题、描述和部分内容,我们可以深入探讨这48个可能导致SQL查询...
Microsoft SQL Server作为一种广泛使用的数据库管理系统,内置了查询优化器来自动优化SQL查询操作。虽然SQL Server的查询优化功能越来越强大,但编程人员编写的查询语句的质量仍然对查询性能有着决定性的影响。 ...
查看 SQL 语句的执行计划的方法是在 SQL Server 查询工具的工具栏中点击“显示估计的执行计划”,或使用快捷键“Ctrl+L”。 - **执行计划的阅读顺序**:从右到左,从上到下。 - **每个步骤代表**:获取查询最终输出...
1. **SQL监视**:SQLTracker可以实时监控数据库中的SQL语句,记录每个查询的执行细节,包括执行时间、CPU使用率、I/O操作等,帮助识别慢查询和性能瓶颈。 2. **性能分析**:通过分析SQL语句的执行计划,SQLTracker...
当SQL查询执行缓慢时,这可能意味着资源浪费、用户体验下降以及整体系统效率降低。本压缩包文件"sql 查询慢的48个原因分析.doc"提供了对这一问题的深入探讨,旨在帮助用户识别并解决SQL查询速度减慢的各种因素。以下...
SQL Server的自动查询优化技术主要由基于开销的查询优化器来执行。当提交一个SQL语句时,查询优化器会自动选择开销值最小的执行计划来执行。这个开销通常以CPU的使用率和磁盘I/O作为判断依据。在查询优化过程中,SQL...
查询事件跟踪(SQL Trace)是SQL Server中一种功能,允许系统记录特定类型的事件,如SQL语句的执行、锁定问题、死锁等。通过设置跟踪,我们可以收集关于服务器活动的详细信息,这些信息对于性能调优、故障排查和审计...
频繁的编译和重新编译可能导致额外的CPU开销。例如,当SQL Server遇到未缓存的查询或存储过程时,它会进行编译。如果这种情况频繁发生,可以考虑优化查询以减少编译次数,或者启用“强制参数化”设置,这有助于减少...