小弟学习ORACLE时间尚短,但公司最近交代个对于我来说很麻烦的任务。 
让我写出查看一些SQL语句,来查看ORACLE所在OS的信息,如CPU 使用率,内存使用率,磁盘I/O。研究半月,只是在ora10,ORA11中的V$OSSTAT中找到了CPU的信息。可以计算10和11的的CPU使用率。更早的版本并没有。 
你存,I/O的信息也没找到。 马上就到交工的日期了,非常急。 希望到家对我指点一下,小弟多谢了。 
有多少说多少,拉兄弟一把,感激不尽! 没分了,所以不能给各位加分,但是真的很急。小弟再次谢过!

解决方案 »

  1.   

    SELECT * FROM v$osstat; 
    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行。 
      

  2.   

    加分了,大家踊跃发言啊。不要太吝啬自己的知识嘛,分享分享,呵呵一个问题:V$SYSSTAT里的信息。
    手册和网上查到这个视图用管理员登陆可以查到一些信息如下:
    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/
      

  3.   

    oracle 本来就是分windows版和linux版的啊
      

  4.   

    是的我知道你的意思,我的问题就是说两个版本在各自OS运行的不同,V$SYSSTAT 上的不同
      

  5.   

    为啥要用sql呢?用shell脚本不是更方便吗?非要sql的话,写个shell脚本,在sql中调用
      

  6.   

    是不是考虑到跨平台的运用,才要用oracle做os的统计的呀。
    用statspack也report两个时间点之间的有关性能的状况
      

  7.   

    最简单的。在sql环境里面输入!uname -a哈哈,调用操作系统命令
      

  8.   

    SELECT * FROM v$osstat; 
      

  9.   

    有人告诉我说从v$sysstat :CPU used by this session 
    和v$sesstat :CPU used by this session 入手。
    可以从session方便查看实例运行到现在,各种session所用的CPU时间总和,但是我总是感觉有点差强人意,
    因为后台还有很多进程的CPU时间没有包含在cpu used by this session 里面。这样计算出来的时间也不是很到位。
    大家给点建议看用session的可行性,谢谢拉!
      

  10.   

    linux含一个叫gdb的GNU调试程序,使用它能在程序运行时观察程序的内部结构和内存的使用情况
      

  11.   

    监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size 
          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#;