Performance analysis of SQL Server — about CPU

--查询编译以来 cpu耗时总量最多的前50条(Total_woker_time)
SELECT TOP 50
total_worker_time/1000 AS [总消耗CPU 时间(ms)],
execution_count [运行次数],
qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
last_execution_time AS [最后一次执行时间],
max_worker_time /1000 AS [最大执行时间(ms)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(CASE WHEN qs.statement_end_offset = -1
THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
AS [使用CPU的语法], qt.text [完整语法],
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY total_worker_time DESC
sql server系统作为一个整体性,它都是紧密相连的,例如:解决了sql语句中I/O开销较多的问题,那对应的CPU开销也会减少,反之解决了CPU开销最多的,那对应I/O开销也会减少。解决I/O开销后CPU耗时也减少,是因为CPU下的Worker线程需要扫描I/O页数就少了,出现的资源锁的阻塞也减少了

2.数据库CPU很高,查询问题的SQL,根据时间“等待毫秒”,查出问题的SQL SELECT spid, blocked, DB_NAME(sp.dbid)
AS DBName, program_name, waitresource, sp.waittime 等待毫秒, sp.stmt_start,
lastwaittype, sp.loginame, sp.Status, sp.hostname, a.[Text] AS [TextData],
SUBSTRING(A.text, sp.stmt_start / 2, (CASE WHEN sp.stmt_end = -1 THEN
DATALENGTH(A.text) ELSE sp.stmt_end END - sp.stmt_start) / 2) AS [current_cmd]
FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS
A WHERE spid > 50 --and lastwaittype=‘HADR_SYNC_COMMIT‘ AND Status<>‘sleeping‘
ORDER BY sp.waittime desc;

3.案例分享
SQL Server导致CPU爆高,一般是异常SQL引起,怀疑是服务器的磁盘性能问题,停SQL服务,用测试一下磁盘的性能,磁盘性能的确不怎样,但是也没差到这样的地步。后来发现一条查询SQL,有3亿条,查询taskid字段没有索引,导致查询IO很慢,进而影响CPU爆高。后重建一张新的tb_log表,并在taskid字段加上索引,性能问题解决。

原文地址:https://blog.51cto.com/songlihuan/2481125

时间: 2024-10-07 21:34:59

Performance analysis of SQL Server — about CPU的相关文章

Performance analysis of SQL server disk I / O

IO 是sql server最重要的资源, 在生产环境下数据库的sqlserver服务启动后一个星期,就可以通过dmv来分析优化.MS SQL Server提供了一些动态管理视图和函数供我们分析磁盘I/O性能. 一.按照物理读的页面数排序 前50名SELECT TOP 50qs.total_physical_reads,qs.execution_count,qs.total_physical_reads/qs.execution_count AS [avg I/O],qs. creation_t

SQL Server 解决CPU 高占用的一般step

第一步: 看这些CPU是不是SQL Server用的. 第二步: 确定SQL Server 有没有引发17883\17884错误 第三步: 找出使用CPU最高的语句进行优化.(sys.dm_exec_query_stats    sys.exec_sql_text  ) sys.dm_exec_query_stats.total_work_time 代表着占用CPU 的时间. sys.dm_exec_query_stats.plan_generate_num代表着重编译的次数.---编译也是要C

SQL Server 占用CPU较高的解决方法

触发原因:月底系统结账的时候对ERP的操作较多,有用户反馈系统之间的数据传输很久没有同步.随即到服务器上查看,没有发现有程序导致的问题,看了一下CPU的使用率,发现SQL Server占用率在百分之九十以上. 解决过程:首先Baidu了一下,看了一下可能的原因应该是索引问题.之前有仔细看过SQL Server索引相关的书籍和查找优化索引的方法.所以立即使用SQL Server Profiler开始检测对CPU使用率高的SQL statement. 经过检测发现更新数据传输的语句占用CPU很高(u

SQL Server与CPU核数

背景环境: 两台服务器,配置4u(每U6核),48G内存,安装好系统: 问题: 无法正常安装SQL Server群集,群集不支持24核CPU. 解决办法: CPU改为8核后,能正常安装成功,然后升级到SP3补丁,才能支持24核. 参考: http://903706.blog.51cto.com/893706/406110

SQL Server 查看CPU情况

--CPU相关视图 SELECT * FROM sys.dm_os_sys_info SELECT * FROM sys.dm_exec_sessions SELECT * FROM sys.sysprocesses SELECT * FROM sys.dm_os_tasks SELECT * FROM sys.dm_os_workers SELECT * FROM sys.dm_os_threads SELECT * FROM sys.dm_os_schedulers SELECT * FRO

SQL Server 造成cpu 使用率高的 6 原因

第一种: 编译和重编译执行计划. 第二种: 排序与聚合. 第三种: 表格连接操作. 第四种: max degree of parallelism. 第五种: max worker threads. 第六种: cost threadhold parallelism  //   每一个语句它的复杂都有一个cost 值作为度量,当这个cost 值超过cost threadhold parallelism时SQL Server 就会用多线程的方式来提高语句的执行速度.所以把cost threadhold

微软SQL Server第三方工具使用分享

监控并优化SQL Server性能,以及识别和解决SQL Server数据库中的性能瓶颈,这些对于数据库管理员(DBA),开发人员和应用程序支持团队来说都是一项艰巨的任务. SQL Server第三方性能监控工具要比产品自带的工具更加灵活,而且它们会为性能相关的数据提供一个集中存储库.此外,它们易于使用并且还能提供对所有 SQL Server性能的实时可视化.第三方监控工具可以协助监控SQL Server和数据库性能,解决基于阈值和趋势预警的潜在问题,并隔离产生应用程序性能问题的根本原因. 这些

(转)SQL Server 性能调优(cpu)

摘自:http://www.cnblogs.com/Amaranthus/archive/2012/03/07/2383551.html 研究cpu压力工具 perfom SQL跟踪 性能视图 cpu相关的wait event Signal wait time SOS_SCHEDULER_YIELD等待 CXPACKET等待 CMEMTHREAD等待 调度队列 cpu密集型查询 高CPU使用率的创建几种状况 miss index 统计数据丢失 非SARG谓词 隐式类型转化 参数探测器 ad ho

【转】Microsoft&#174; SQL Server&#174; 2012 Performance Dashboard Reports

http://www.cnblogs.com/shanyou/archive/2013/02/12/2910232.html SQL Server Performance Dashboard Reports是一组Reporting Services的报表,和SQL Server Management Studio中所介绍的报表一起使用.这些报表允许数据库管理员快速地确定他们的系统中是否存在瓶颈,瓶颈是否正在发生,捕获这些附加的诊断数据可能会对解决问题更有帮助.例如,系统正在等待disk IO,这