一个死循环,让我的sql数据库的cpu一下到了100%,我不得不花了一些时间,将这个死循环找出来了。。。
[@more@]
1、从微软站点上下载qslice_setupexe
2、打开Query
Analyzer,运行以下语句:
declare
@a
int
while
(1<2)
begin
select
@a=1
end
将会发现cpu马上达到100%
3、打开qliceexe,将发现sqlserverexe的cpu占用率很高,双击进入,出行sqlserverexe中具体线程的执行情况
4、活动运行cpu高的那个id,为16进制的,先将他转换为10进制
5、将这个10进制数,作为参数运行以下查询:
select
spid
from
sysprocesses
where
kpid=1756
6、将这个spid运行的sql导出:
DBCC
TRACEON(3604)
DBCC
INPUTBUFF(57)
7、杀掉这个spid
kill
57
over
cpu高估计还是sql语句有问题,我也是新手,转帖一个给你参考参考
1-- 检查系统
sar -u 5 5
2-- 看谁在用CPU
topas
ps -ef |grep ora #检查第四列,C的大小(unit,100 per cpu)
3-- 检查CPU数量
/usr/sbin/bindprocessor -q
lsattr El proc0
4-- 2种可能:
1) A Background (instance) process
2) An oracle (user) process #此种可能最大。
5-- 如果是用户进程:那么高CPU的主要原因有:
Large Queries, Procedure compilation or execution, Space management and Sorting
51-- 查看每个Session的CPU利用情况:
select sssid,secommand,ssvalue CPU ,seusername,seprogram from v$sesstat ss, v$session se where ssstatistic# in (select statistic# from v$statname where name = 'CPU used by this session') and sesid=sssid and sssid>6 order by sssid;
52-- 比较上述Session,看那个session的CPU使用时间最多,然后查看该Session的具体情况:
select ssid, wevent, wwait_time, wseq#, qsql_text from v$session_wait w, v$session s, v$process p, v$sqlarea q where spaddr=paddr and ssid=&p and ssql_address=qaddress;
53-- 得到上述信息后,查看相应 *** 作是否有hash joins 和 full table scans。如果有hash joins 和 full table scans那么必须创建相应的Index或者检查Index是否有效。
另外必须检查是否有并行的查询存在和同一时刻有多个用户在执行相同的SQL语句,如果有必须关闭并行的查询和任何类型的并行提示(hints);如果查询使用intermedia数据,那么为了减少总的Index大小,必须限制使用Intermedia的Worldlist。(try restricting the wordlist that intermedia uses to help reduce the total indexsize)。
6-- 上述方案只能根据已经运行完成的 *** 作,对于正在执行的长时间 *** 作只能等 *** 作完成后才能检测得到。因此我们可以通过另外一个很好的工具来检测正在运行的长时间 *** 作语句。v$session_longops,这个视图显示那些 *** 作正在被运行,或者已经完成。每个process完成后会刷新本视图的信息。
7-- 怎样寻找集中使用CPU的Process:
很多时候会发现有N个Process在平均分享着CPU的利用率,这种情况唯一的可能性就是这些Process在执行着相同的Package或者Query
这种情况:建议通过statspack,在CPU高利用率额时候运行几个快照,然后根据这些快照检查Statspack报告,检查报告中最TOP的 Query。然后使用 sql_trace and tkprof 工具去跟踪一下。同时检查buffer cache 的命中率是否大雨95%。
同时在报告中还需要检查一下table scans (long tables),看是否在报告生成期间有存在全表扫描。
8-- 另外还有一些不是特别重要的,但是也必须关心检查的参数可能消耗CPU。
以上就是关于如何获得sqlserver数据库中占用高cpu用户的活动内容全部的内容,包括:如何获得sqlserver数据库中占用高cpu用户的活动内容、数据库cpu很高,io很低、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)