如何用sql 查看当前系统aix系统查看cpu使用率率

freepeng 的BLOG
用户名:freepeng
文章数:70
评论数:92
访问量:132112
注册日期:
阅读量:5863
阅读量:12276
阅读量:384886
阅读量:1076163
51CTO推荐博文
CPUCPU100%CPUSQL ServerCPU
1.1 SQL Server 2000
SQL Server―---――
1.2SQL Server 2005
Microsoft SQL Server Management Studio――SQL Server ---------
2.RunableCPUCPUCPUCPUSQLSQL Server 2000SQL Server 2005
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)> sql执行cpu占用情况查询,查表是否已锁selectb.usernameusername,a.d
sql执行cpu占用情况查询,查表是否已锁selectb.usernameusername,a.d
minmin11 & &
发布时间: & &
浏览:18 & &
回复:0 & &
悬赏:0.0希赛币
sql执行cpu占用情况查询,查表是否已锁
  select b.username username,a.disk_reads reads, 
a.executions
exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio, 
a.sql_text
Statement,a.CPU_TIME,a.CPU_TIME/decode(a.executions,0,1,a.executions)from
v$sqlarea a,dba_users bwhere a.parsing_user_id=b.user_idorder by
a.CPU_TIME
  下面是各个字段的意思:
  v$sqlarea:Oracle动态性能表
  disk_reads 所有子光标读取硬盘数据总和executions
所有子光标的执行数目sqltext    
当前光标的对应的SQL语句的头1000个字符
  cpu_time 
该光标用于解析、执行和取数据的cpu时间,单位毫秒
  dba_users:用户信息表
  username 用户名user_id   用户id号,是一个数字
  这样的话,用此sql可以查看哪句sql执行太慢,可以考虑进行性能优化。下面介绍下查询是否锁表的方法:
  1-------查询当前会话select case when r.session_id is not NULL
and r.status = 'SUSPENDED'then 'Suspended'
when max(decode(s.serial#,l.serial#,1,0)) = 1 then 'Long Operations' else
'Regular' end, s.sid,s.status, s.username, RTRIM(s.osuser), b.spid,
s.machine, s.program, s.resource_consumer_group, r.timeoutfrom v$session s,
v$session_longops l, v$process b, dba_resumable r where (s.sid = l.sid(+))
and (s.sid = r.session_id(+)) and s.paddr=b.addrand
s.status='ACTIVE'
group by r.session_id, r.error_number, r.status, s.sid,
s.username, s.osuser, b.spid, s.machine,     
s.program,s.resource_consumer_group, r.
  2-----获取对话地址及hash值select
decode(sql_address,'00',prev_sql_addr,sql_address)
sql_address,decode(sql_hash_value,0,   
prev_hash_value,sql_hash_value)
sql_hash_value from v$session
where sid =26;
  3-----根据对话地址及hash值查询执行SQLselect distinct piece,
sql_text, command_type from v$sqltext_with_newlineswhere
rawtohex(address)='1468' and hashvalue='';
  4----查询对话SERIAL号SELECT serial#, username, schemaname,
osuser, terminal, machine, program, status,type,saddr,   
logon_time,sysdate - last_call_et / 86400, resource_consumer_group
v$session WHERE sid =26;5----终止对话ALTER SYSTEM KILL
SESSION '26,35851';
(sid,serial#)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&OracleCPU使用情况查询
--发现那些SQL运行了大量的PARSE
select sql_text, parse_calls, executions
from v$sqlarea
order by parse_
--SYS的总的PARSE情况
select name, value from v$sysstat where name like 'parse count%';
--CPU空间及繁忙情况
select * from v$
--查看每个Session的CPU利用情况:
select ss.sid, se.command, ss.value CPU, se.username, se.program
from v$sesstat ss, v$session se
where ss.statisti in
(select statistic#
from v$statname
where name = 'CPU used by this session')
and se.sid = ss.sid
and ss.sid & 6
order by CPU
--比较一下哪个session的CPU使用时间最多,然后查看该Session的具体情况:
select s.sid, s.event, s.MACHINE, s.OSUSER, s.wait_time, w.seq#, q.sql_text
from v$session_wait w, v$session s, v$process p, v$sqlarea q
where s.paddr = p.addr
and s.sid = &p
and s.sql_address = q.
--占用CPU最高的10个Session及其SQL语句
select s.sid,
w.wait_time,
w.seconds_in_wait,
w.wait_time_micro,
w.time_remaining_micro,
w.time_since_last_wait_micro,
p.USERNAME,
schemaname,
p.terminal,
p.program,
logon_time,
w.wait_class,
tracefile,
last_active_time
from v$session_wait w, v$session s, v$process p, v$sqlarea q
where s.paddr = p.addr
and s.sid in (select sid
from (select ss.sid
from v$sesstat ss, v$session se
where ss.statistic# in
(select statistic#
from v$statname
where name = 'CPU used by this session')
and se.sid = ss.sid
and ss.sid & 6
order by ss.value desc)
where rownum & 11)
and s.sql_address = q.
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'博客访问: 32830
博文数量: 14
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: SQL Server
今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL位
64G内存,16核CPU
硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库
他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况
内存占用也很高,占用了30个G
-----------------------------------------------华丽的分割线-------------------------------------------------------
一般排查都是用下面的脚本,一般会用到三个视图sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests
1 USE master 2 GO 3 --如果要指定数据库就把注释去掉 4 SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb' 5 SELECT COUNT(*) FROM [sys].[dm_exec_sessions] WHERE [session_id]>50
看一下当前的数据库用户连接有多少
然后使用下面语句看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话
1 SELECT TOP 10
2 [session_id],
3 [request_id],
4 [start_time] AS '开始时间',
5 [status] AS '状态',
6 [command] AS '命令',
7 dest.[text] AS 'sql语句',
8 DB_NAME([database_id]) AS '数据库名',
9 [blocking_session_id] AS '正在阻塞其他会话的会话ID', 10 [wait_type] AS '等待资源类型', 11 [wait_time] AS '等待时间', 12 [wait_resource] AS '等待的资源', 13 [reads] AS '物理读次数', 14 [writes] AS '写次数', 15 [logical_reads] AS '逻辑读次数', 16 [row_count] AS '返回结果行数' 17 FROM sys.[dm_exec_requests] AS der 18 CROSS APPLY 19 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 20 WHERE [session_id]>50 AND DB_NAME(der.[database_id])='gposdb' 21 ORDER BY [cpu_time] DESC
如果想看具体的SQL语句可以执行下面的SQL语句,记得在SSMS里选择以文本格式显示结果
1 --在SSMS里选择以文本格式显示结果 2 SELECT TOP 10 3 dest.[text] AS 'sql语句' 4 FROM sys.[dm_exec_requests] AS der 5 CROSS APPLY 6 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 7 WHERE [session_id]>50 8 ORDER BY [cpu_time] DESC
模拟了一些耗CPU时间的动作
-----------------------------------------华丽的分割线-----------------------------------------------------------
还有查看CPU数和user scheduler数和最大工作线程数,检查worker是否用完也可以排查CPU占用情况
1 --查看CPU数和user scheduler数目 2 SELECT cpu_count,scheduler_count FROM sys.dm_os_sys_info 3 --查看最大工作线程数 4 SELECT max_workers_count FROM sys.dm_os_sys_info
查看机器上的所有schedulers包括user 和system
通过下面语句可以看到worker是否用完,当达到最大线程数的时候就要检查blocking了
对照下面这个表
各种CPU和SQLSERVER版本组合自动配置的最大工作线程数
CPU数&&&&&&&&&&&&&&&& 32位计算机&&&&&&&&&&&&&&&&&&&&&&& 64位计算机
<=4&&&&&&&&&&&&&&&&&&&& 256&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 512
& 8&&&&&&&&&&&&&&&&&&&&&&& 288&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 576
16&&&&&&&&&&&&&&&&&&&&&& 352&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 704
32&&&&&&&&&&&&&&&&&&&&&& 480&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 960
1 SELECT 2 scheduler_address, 3 scheduler_id, 4 cpu_id, 5 status, 6 current_tasks_count, 7 current_workers_count,active_workers_count 8 FROM sys.dm_os_schedulers
如果大家有什么需要补充的,或者文章有不正确的,欢迎大家拍砖!!
----------------------------------------------------------------------------------------------
做了一下补充,如果SQLSERVER存在要等待的资源,那么执行下面语句就会显示出会话中有多少个worker在等待
结合[sys].[dm_os_wait_stats]视图,如果当前SQLSERVER里面没有任何等待资源,那么下面的SQL语句不会显示任何结果
1 SELECT TOP 10
2 [session_id],
3 [request_id],
4 [start_time] AS '开始时间',
5 [status] AS '状态',
6 [command] AS '命令',
7 dest.[text] AS 'sql语句',
8 DB_NAME([database_id]) AS '数据库名',
9 [blocking_session_id] AS '正在阻塞其他会话的会话ID', 10 der.[wait_type] AS '等待资源类型', 11 [wait_time] AS '等待时间', 12 [wait_resource] AS '等待的资源', 13 [dows].[waiting_tasks_count] AS '当前正在进行等待的任务数', 14 [reads] AS '物理读次数', 15 [writes] AS '写次数', 16 [logical_reads] AS '逻辑读次数', 17 [row_count] AS '返回结果行数' 18 FROM sys.[dm_exec_requests] AS der 19 INNER JOIN [sys].[dm_os_wait_stats] AS dows 20 ON der.[wait_type]=[dows].[wait_type] 21 CROSS APPLY 22 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 23 WHERE [session_id]>50 24 ORDER BY [cpu_time] DESC
比如我当前执行了查询SalesOrderDetail_test表100次,由于表数据非常多,所以SSMS需要把SQLSERVER执行的结果慢慢的取走,
造成了ASYNC_NETWORK_IO等待
1 USE [AdventureWorks] 2 GO 3 SELECT * FROM dbo.[SalesOrderDetail_test] 4 GO 100
------------------------------------------------------------------------------------------------
经过排查和这几天的观察情况,确定是某些表缺失索引导致,现在在这些表上增加了索引,问题解决了
1 select * from t_AccessControl --权限控制表权限控制 2 select * from t_GroupAccess --用户组权限表用户组权限 3 select * from t_GroupAccessType --用户组权限类表用户组权限类 4 select * from t_ObjectAccess --对象权限表对象权限 5 select * from t_ObjectAccessType --对象权限类型表对象权限类型 6 select * from t_ObjectType --对象类型表对象类型
查询CPU占用高的语句
1 SELECT TOP 10
2 total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
4 (SELECT SUBSTRING(text, statement_start_offset/2 + 1,
5 (CASE WHEN statement_end_offset = -1
6 THEN LEN(CONVERT(nvarchar(max), text)) * 2
7 ELSE statement_end_offset
8 END - statement_start_offset)/2)
9 FROM sys.dm_exec_sql_text(sql_handle)) AS query_text 10 FROM sys.dm_exec_query_stats 11 ORDER BY [avg_cpu_cost] DESC
查询缺失索引
1 SELECT 2 DatabaseName = DB_NAME(database_id) 3 ,[Number Indexes Missing] = count(*) 4 FROM sys.dm_db_missing_index_details 5 GROUP BY DB_NAME(database_id) 6 ORDER BY 2 DESC;
1 SELECT TOP 10
2 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
, avg_user_impact
4 , TableName = statement
5 , [EqualityUsage] = equality_columns
6 , [InequalityUsage] = inequality_columns
7 , [Include Cloumns] = included_columns
8 FROM sys.dm_db_missing_index_groups g
9 INNER JOIN sys.dm_db_missing_index_group_stats s 10 ON s.group_handle = g.index_group_handle 11 INNER JOIN sys.dm_db_missing_index_details d 12 ON d.index_handle = g.index_handle 13 ORDER BY [Total Cost] DESC;
定位问题后,新建非聚集索引
1 CREATE NONCLUSTERED INDEX IX_t_AccessControl_F4 ON dbo.t_AccessControl 2 ( 3
FObjectType 4 )include([FUserID], [FAccessType], [FAccessMask]) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 5 GO 6 7 drop index IX_t_AccessControl_F4 on t_AccessControl
CPU占用恢复正常
跟踪模板和跟踪文件下载,请使用SQL2008R2 版本:/lyhabc/跟踪模板和trace.rar
阅读(2990) | 评论(0) | 转发(0) |
上一篇:没有了
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 获取系统cpu使用率 的文章

 

随机推荐