`

Sql Server CPU 性能排查及优化的相关 Sql

 
阅读更多

 

--Begin Cpu 分析优化的相关 Sql 

--使用DMV来分析SQL Server启动以来累计使用CPU资源最多的语句。例如下面的语句就可以列出前50名。
select 
    c.last_execution_time,c.execution_count,c.total_logical_reads,c.total_logical_writes,c.total_elapsed_time,c.last_elapsed_time, 
    q.[text]
from 
    (select top 50 qs.*
    from sys.dm_exec_query_stats qs
    order by qs.total_worker_time desc) as c
    cross apply sys.dm_exec_sql_text(plan_handle) as q
order by c.total_worker_time desc
go

-- 返回最经常运行的100条语句
SELECT TOP 100 cp.cacheobjtype,cp.usecounts,cp.size_in_bytes,qs.statement_start_offset,qs.statement_end_offset,qt.dbid    ,qt.objectid
                        ,SUBSTRING(qt.text,qs.statement_start_offset/2, 
                        (case when qs.statement_end_offset = -1 
                        then len(convert(nvarchar(max), qt.text)) * 2 
                        else qs.statement_end_offset end -qs.statement_start_offset)/2)     as statement 
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
inner join sys.dm_exec_cached_plans as cp on qs.plan_handle=cp.plan_handle
where cp.plan_handle=qs.plan_handle
and cp.usecounts>4
ORDER BY [dbid],[Usecounts] DESC

-- 返回做IO数目最多的50条语句以及它们的执行计划
select top 50 
    (total_logical_reads/execution_count) as avg_logical_reads,
    (total_logical_writes/execution_count) as avg_logical_writes,
    (total_physical_reads/execution_count) as avg_phys_reads,
     Execution_count, 
    statement_start_offset as stmt_start_offset, statement_end_offset as stmt_end_offset,
substring(sql_text.text, (statement_start_offset/2), 
case 
when (statement_end_offset -statement_start_offset)/2 <=0 then 64000
else (statement_end_offset -statement_start_offset)/2 end) as exec_statement,  sql_text.text,plan_text.*
from sys.dm_exec_query_stats  
cross apply sys.dm_exec_sql_text(sql_handle) as sql_text
cross apply sys.dm_exec_query_plan(plan_handle) as plan_text
order by 
 (total_logical_reads + total_logical_writes) /Execution_count Desc

-- 计算signal wait占整wait时间的百分比
-- 指令等待 CPU 资源的时间占总时间的百分比。如果超过 25% ,说明 CPU 紧张
select convert(numeric(5,4),sum(signal_wait_time_ms)/sum(wait_time_ms)) 
from Sys.dm_os_wait_stats 

-- 计算'Cxpacket'占整wait时间的百分比
-- Cxpacket:Sql Server 在处理一句代价很大的语句,要不就是没有合适的索引或筛选条件没能筛选足够的记录,使得语句要返回大量的结果,当 >5% 说明有问题
declare @Cxpacket bigint
declare @Sumwaits bigint
select @Cxpacket = wait_time_ms
from Sys.dm_os_wait_stats
where wait_type = 'Cxpacket'
select @Sumwaits = sum(wait_time_ms)
from Sys.dm_os_wait_stats
select convert(numeric(5,4),@Cxpacket/@Sumwaits)


-- 查询当前数据库上所有用户表格在Row lock上发生阻塞的频率
declare @dbid int
select @dbid = db_id()
Select dbid=database_id, objectname=object_name(s.object_id)
, indexname=i.name, i.index_id    --, partition_number
, row_lock_count, row_lock_wait_count
, [block %]=cast (100.0 * row_lock_wait_count / (1 + row_lock_count) as numeric(15,2))
, row_lock_wait_in_ms
, [avg row lock waits in ms]=cast (1.0 * row_lock_wait_in_ms / (1 + row_lock_wait_count) as numeric(15,2))
from sys.dm_db_index_operational_stats (@dbid, NULL, NULL, NULL) s,     sys.indexes i
where objectproperty(s.object_id,'IsUserTable') = 1
and i.object_id = s.object_id
and i.index_id = s.index_id
order by row_lock_wait_count desc
--返回sqlserver中最慢的10条语句
select distinct top 10  
    substring(t.text, (s.statement_start_offset/2)+1, (((case s.statement_end_offset when -1 then datalength(t.text) else s.statement_end_offset end) - s.statement_start_offset)/2) + 1) as SqlText  
    , (case when s.statement_start_offset > 0 then substring(t.text, 0, (s.statement_start_offset/2)+1) else '' end) as SqlParameters  
    , s.execution_count as ExecutionCount  
    , (s.max_elapsed_time/1000) as MaxElapsedTimeMs  
    , (s.min_elapsed_time/1000) as MinElapsedTimeMs  
    , isnull((s.total_elapsed_time/1000) / nullif(s.execution_count, 0), 0) as AvgElapsedTimeMs  
    , s.creation_time as LogCreatedOn  
    , s.last_execution_time as LastExecutionTime  
    , isnull(s.execution_count / nullif(datediff(s, s.creation_time, getdate()), 0), 0) as FrequencyPerSec  
from  
    sys.dm_exec_query_stats as s  
        cross apply  
    sys.dm_exec_sql_text(s.sql_handle) as t  
order by  
    isnull((s.total_elapsed_time/1000) / nullif(s.execution_count, 0), 0) desc
--End Cpu 分析优化的相关 Sql 
分享到:
评论

相关推荐

    SQLSERVER排查CPU占用高的情况

    ### SQL Server 排查 CPU 占用高情况详解 #### 背景介绍 SQL Server 是一款广泛使用的数据库管理系统,在企业级应用中占有重要地位。然而,在实际的应用场景中,可能会遇到诸如 CPU 使用率异常增高、系统响应变慢等...

    SQLServer的性能调优:解决查询速度慢的五种方法

    本文主要通过一下几个方面介绍:使用SQLDMV查找慢速查询、通过APM解决方案查询报告、SQLServer扩展事件、SQLAzure查询性能洞察等相关内容。本文来自博客园,由火龙果软件Anna编辑、推荐。SQLServer的一个重要功能是...

    sqlserver cpu使用率高排查

    SQL Server CPU 使用率高排查 在使用 SQL Server 过程中,可能会出现 CPU 使用率高达 100% 的情况,这种情况可能是由于多种原因导致的。下面将从几个方面对此进行分析和排查。 1. Max degree of Parallelism 设置...

    Spotlight on SQL Server

    "Spotlight on SQL Server"很可能是指一款专门针对SQL Server的监控和性能优化工具,它可以帮助管理员深入了解SQL Server的运行状态,识别并解决性能瓶颈。 1. **SQL Server基础知识**:SQL Server是一个全面的...

    SQLServer 性能检测收集工具

    总的来说,这个工具集提供了一个强大而全面的解决方案,帮助SQL Server管理员监控系统健康状况,定位性能问题,以及进行故障排查。通过对这些组件的理解和使用,我们可以更有效地管理和优化SQL Server环境,提高系统...

    SQL Server SQL优化

    ### SQL Server SQL优化 #### 一、SQL优化的重要性与原则 在SQL Server的实际运行过程中,随着数据量的增长和用户访问频率的提升,数据库性能问题逐渐显现。根据所谓的“二八法则”,即大约20%的慢查询消耗了系统...

    SQL SERVER 2005/2008 Express Profiler

    总的来说,SQL Server 2005/2008 Express Profiler 是一个强大的工具,通过它,你可以有效地监控和优化SQL Server 2008 Express数据库的性能,确保系统稳定运行并解决可能出现的问题。安装文件"SqlExpressProfiler....

    sql server数据库查看器

    8. **性能监控**:部分工具会集成性能监视器,实时展示SQL Server的性能指标,如CPU使用率、内存使用、磁盘I/O等,帮助诊断和优化性能问题。 9. **报表生成**:有的数据库查看器能自动生成报表,展示数据库统计信息...

    sql server健康检查脚本

    SQL Server健康检查脚本通常包含一系列查询,这些查询旨在收集关于服务器状态的关键信息,包括但不限于CPU使用率、内存使用情况、磁盘I/O性能、数据库事务日志的增长、备份状况、索引碎片、锁和阻塞等。通过执行这些...

    SQLServer一键卸载.zip

    "SQLServer 2012 一键卸载工具"就是为了解决这个问题而设计的,它提供了简洁、方便的方式来移除SQL Server 2012实例。 SQL Server 2012是一个功能强大的关系型数据库管理系统,它包含了多种服务组件,如数据库引擎...

    SQL Server数据库状态监控 – 错误日志

    SQL Server和SQL Server Agent服务在Windows事件日志中分别以"MSSQLSERVER"和"SQLSERVERAGENT"作为来源,提供了一定程度的错误和信息记录。 - **SQL Server错误日志**:SQL Server的错误日志与Windows事件日志类似...

    SQL Server 巡检报告v1.0(word).doc.rar

    《SQL Server数据库巡检手册》是一份详细的指南,旨在帮助管理员对SQL Server环境进行系统性的检查和维护。这份文档发布于2015年9月15日,分为三个主要部分,分别是“巡检报告”、“巡检脚本”和“巡检方法”。通过...

    SQL Server 资料

    本文提供了逐步指引,使用公开可用的工具如 SQLServer Profiler、性能监视器、DMV、SQLServer 扩充事件和数据收集器来诊断和排查常见性能问题。这些工具可以帮助 DBA 快速地诊断和解决性能问题,从而提高 SQL Server...

    Professional+SQL+Server+2012+Internals+and+Troubleshooting+

    综上所述,《Professional SQL Server 2012 Internals and Troubleshooting》这本书深入浅出地介绍了 SQL Server 2012 的各个方面,不仅覆盖了其内部架构和硬件配置,还包括了性能监控和故障排查等多个方面。...

    sql server 2005 智能感应插件sqlassis

    1. **性能监控**:该插件可能提供了一套全面的性能监控工具,帮助管理员实时查看SQL Server的资源使用情况,如CPU、内存、磁盘I/O等,以便及时发现并解决问题。 2. **自动化调整**:sqlassis可能具备自动调整数据库...

    SQLServer 2008 出现红叉错误的解决方法

    1. **定期更新**:保持SQL Server 2008及其相关组件的最新版本。 2. **优化配置**:根据实际需求合理配置服务参数,避免资源浪费或不足。 3. **监控性能**:定期检查服务器性能指标,及时发现并解决问题。 4. **备份...

    解决SQLserver挂起小工具

    利用“SQLserver挂起小工具”SQLup.exe,可以简化问题排查和解决的过程,使得非专业人员也能有效地处理这一问题。但为了保证系统的稳定性和安全性,我们在使用这类工具时应遵循正确的操作流程,并保持对最新技术支持...

Global site tag (gtag.js) - Google Analytics