如何通过sql语句获取cpu使用率

fcyz 2010-10-10 06:43:48
在baidu和google中寻找了半天了,也没有找到可以通过sql语句获取CPU使用率等性能上的办法。希望各位高手多多帮助。
...全文
506 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fcyz 2010-11-21
最后还是用net的程序去取了,呵呵,谢谢各位热心人呀!
回复
feng_family 2010-10-12
做什么系统还要获取CPU使用率?
回复
王向飞 2010-10-11
--单次执行耗费CPU时间最长的查询计划
SELECT TOP 5 total_worker_time,last_worker_time,max_worker_time,min_worker_time,
SUBSTRING(st.text,(qs.statement_start_offset/2)+1,
((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
-qs.statement_start_offset)/2)+1) AS statement_text
FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY max_worker_time DESC

很明显只是查询数据库内部的内存耗时,跟你问的完全两码事。
回复
ForFumm 2010-10-10
[Quote=引用 9 楼 duanzhi1984 的回复:]
引用 8 楼 dawugui 的回复:
SQL code
不懂,帮顶,学习,蹭分.

[/Quote]
.
回复
duanzhi1984 2010-10-10
[Quote=引用 8 楼 dawugui 的回复:]
SQL code
不懂,帮顶,学习,蹭分.
[/Quote]
。。
回复
dawugui 2010-10-10
不懂,帮顶,学习,蹭分.
回复
obuntu 2010-10-10
使用率可以通过perfmon的processor 和process 计数器的%processor time 、%privileged time来查看。
在2005和2008上提供了一些DMO管理对象,可以实现类似的功能。。
一般以sys.dm_os 开头的就是。。具体看联机丛书。

但要获得具体的使用率,目前只看到这样的一个脚本,而且只能获取过去很短的一段时间的,并只能在2008上使用。

DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks)FROM sys.dm_os_sys_info);

SELECT TOP(30) SQLProcessUtilization AS [SQL Server Process CPU Utilization],
SystemIdle AS [System Idle Process],
100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization],
DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [Event Time]
FROM (
SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int')
AS [SystemIdle],
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]',
'int')
AS [SQLProcessUtilization], [timestamp]
FROM (
SELECT [timestamp], CONVERT(xml, record) AS [record]
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND record LIKE N'%<SystemHealth>%') AS x
) AS y
ORDER BY record_id DESC;



回复
billpu 2010-10-10
应该没提供现成的方法或者函数,为了弥补sqlserver应用方面的不足,2005开始不是推出了clr,你可以用clr调用.net中提供的的方法
回复
zsh0809 2010-10-10
Oracle使用V$OSSTAT视图 查询cpu使用率

OS统计数据
  在仔细检查用户的性能问题时,John还需要排除主机系统是瓶颈的可能性。在采用Oracle 10g以前,
他可以使用操作系统(OS)工具,如sar 和vmstat,并推断出一些确定争用问题的度量指标。在Oracle
10g中,在数据库中自动采集OS级别的度量指标。为了查看潜在的主机争用问题,John对V$OSSTAT视图执
行下面的查询:
  select * from v$osstat;
  代码清单6给出的输出结果显示了所采集的OS级别的各种度量指标元素。所有时间元素都以厘秒为单
位。从代码清单6显示的结果中John了解到,系统的一个CPU有51025805厘秒空闲(IDLE_TICKS)、
2389857厘秒繁忙(BUSY_TICKS),这表明CPU有大约4%的时间繁忙。

2389857/(51025805 +2389857) = 4%

从中他得出结论,在主机中CPU不是瓶颈。请注意,如果主机系统有多于1个的CPU,则标头中有AVG_前缀的
列,如AVG_IDLE_TICKS将显示所有CPU的这些度量指标的平均值。
回复
喜-喜 2010-10-10
[Quote=引用 2 楼 fcyz 的回复:]
以前使用oracle的时候还可以的呀,真的不行吗?
[/Quote]

oracle可以么!那么它是怎么实现的...
回复
zsh0809 2010-10-10
sql server肯定是不行的。
参考下面的方法:

获取CPU使用率
回复
fcyz 2010-10-10
以前使用oracle的时候还可以的呀,真的不行吗?
回复
SQLCenter 2010-10-10
这个不是SQL能获取的
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-10 06:43
社区公告
暂无公告