小弟学习ORACLE时间尚短,但公司最近交代个对于我来说很麻烦的任务。
让我写出查看一些SQL语句,来查看ORACLE所在OS的信息,如CPU 使用率,内存使用率,磁盘I/O。研究半月,只是在ora10,ORA11中的V$OSSTAT中找到了CPU的信息。可以计算10和11的的CPU使用率。更早的版本并没有。
你存,I/O的信息也没找到。 马上就到交工的日期了,非常急。 希望到家对我指点一下,小弟多谢了。
有多少说多少,拉兄弟一把,感激不尽! 没分了,所以不能给各位加分,但是真的很急。小弟再次谢过!
让我写出查看一些SQL语句,来查看ORACLE所在OS的信息,如CPU 使用率,内存使用率,磁盘I/O。研究半月,只是在ora10,ORA11中的V$OSSTAT中找到了CPU的信息。可以计算10和11的的CPU使用率。更早的版本并没有。
你存,I/O的信息也没找到。 马上就到交工的日期了,非常急。 希望到家对我指点一下,小弟多谢了。
有多少说多少,拉兄弟一把,感激不尽! 没分了,所以不能给各位加分,但是真的很急。小弟再次谢过!
v$osstat显示的是操作系统的系统使用情况统计,所有的数据都是累积的,要通过计算差值能得到某一个时间点的情况.连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options SQL> SELECT * FROM v$osstat; STAT_NAME VALUE
---------------------------------------------------------------- ----------
OSSTAT_ID
----------
NUM_CPUS 8
0 IDLE_TIME 80289442
1 BUSY_TIME 188668
2
STAT_NAME VALUE
---------------------------------------------------------------- ----------
OSSTAT_ID
----------
USER_TIME 70850
3 SYS_TIME 117818
4 AVG_IDLE_TIME 10033265
7
STAT_NAME VALUE
---------------------------------------------------------------- ----------
OSSTAT_ID
----------
AVG_BUSY_TIME 20643
8 AVG_USER_TIME 7340
9 AVG_SYS_TIME 11798
10
STAT_NAME VALUE
---------------------------------------------------------------- ----------
OSSTAT_ID
----------
RSRC_MGR_CPU_WAIT_TIME 0
14 NUM_CPU_CORES 2
16 PHYSICAL_MEMORY_BYTES 8589148160
1008
STAT_NAME VALUE
---------------------------------------------------------------- ----------
OSSTAT_ID
----------
VM_IN_BYTES 43552768
1009 VM_OUT_BYTES 245051392
1010
已选择14行。
手册和网上查到这个视图用管理员登陆可以查到一些信息如下:
1, User
2, Redo
4, Enqueue
8, Cache
16, OS
32, Real Application Clusters
64, SQL
128, Debug
(具体内容见http://lbdwww.epfl.ch/f/teaching/courses/oracle9i/server.920/a96536/apc2.htm#26761)
按道理来说可以用select * from v$sysstat where class=16
就可以查出OS的信息,如user cpu time, system cpu time 等等,从而计算出CPU使用率等系统信息,
但是windows环境下出不出这些OS信息,困惑,迷茫,问了问公司DBA也没给我说出个123~!
非windows环境我没试过,请高人指点。
可能我的方法比较死板,如果有人知道别的方法计算cpu信息,请知无不言,谢谢。
一经采用,一定高分送到。
网上也有人对这一问题做了提问,有兴趣可以看看链接:http://jonathanlewis.wordpress.com/2008/12/28/timed_os_stats/。
用statspack也report两个时间点之间的有关性能的状况
和v$sesstat :CPU used by this session 入手。
可以从session方便查看实例运行到现在,各种session所用的CPU时间总和,但是我总是感觉有点差强人意,
因为后台还有很多进程的CPU时间没有包含在cpu used by this session 里面。这样计算出来的时间也不是很到位。
大家给点建议看用session的可行性,谢谢拉!
SELECT name, value
FROM v$sysstat
WHERE name IN ('sorts (memory)', 'sorts (disk)');
找使用CPU多的用户session
12是cpu used by this session
select a.sid,spid,status,substr(a.program,1,40) prog,
a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and
c.sid=a.sid and
a.paddr=b.addr
order by value desc;3. 监控表空间的 I/O 比例
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,
f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw
from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name;
4. 监控文件系统的 I/O 比例
select substr(a.file#,1,2) "#", substr(a.name,1,30) "Name",
a.status, a.bytes, b.phyrds, b.phywrts
from v$datafile a, v$filestat b
where a.file# = b.file#;