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

fcyz 2010-10-10 06:43:48
在baidu和google中寻找了半天了,也没有找到可以通过sql语句获取CPU使用率等性能上的办法。希望各位高手多多帮助。
...全文
702 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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中提供的的方法
「已注销」 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可以么!那么它是怎么实现的...
「已注销」 2010-10-10
  • 打赏
  • 举报
回复
sql server肯定是不行的。
参考下面的方法:

获取CPU使用率
fcyz 2010-10-10
  • 打赏
  • 举报
回复
以前使用oracle的时候还可以的呀,真的不行吗?
SQLCenter 2010-10-10
  • 打赏
  • 举报
回复
这个不是SQL能获取的

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧