加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle Session&Process

发布时间:2020-12-12 13:37:28 所属栏目:百科 来源:网络整理
导读:一. v$session 每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。 SADDR : session address SID : session identifier,常用于连接其它列。 SERIAL# : sid 会重用,但是同一个sid被重用时,serial#

一. v$session

每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。

  • SADDR: session address
  • SID: session identifier,常用于连接其它列。
  • SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。
  • AUDSID: audit session id。可以通过audsid查询当前session的sid。select sid from v$session where audsid=userenv(‘sessionid‘);
  • PADDR: process address,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id。
  • USER#: session‘s user id。等于dba_users中的user_id。Oracle内部进程的user#为0。
  • USERNAME: session‘s username。等于dba_users中的username。Oracle内部进程的username为空。
  • COMMAND: session正在执行的SQL Id。1代表create table,3代表select。
  • TADDR: 当前的transaction address。可以用来关联v$transaction的addr字段。
  • LOCKWAIT: 可以通过这个字段查询出当前正在等待的锁的相关信息。sid & lockwait与v$lock中的sid & kaddr相对应。
  • STATUS: 用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。
  • PROCESS: 客户端process id。
  • MACHINE: 客户端machine name。
  • TERMINAL: 客户端执行的terminal name。
  • PROGRAM: 客户端应用程序。比如ORACLE.EXE (PMON)或者sqlplus.exe
  • SQL_ADDRESS,SQL_HASH_VALUE,SQL_ID,SQL_CHILD_NUMBER: session正在执行的sql statement,和v$sql中的address,hash_value,sql_id,child_number相对应。

二. v$process

  • ADDR: process address。可以和v$session的paddr字段关联。
  • PID: Oracle进程identifier。
  • SPID: 操作系统进程identifier。
  • PNAME:进程名字,如PMON,SMON。
  • USERNAME: 操作系统进程的用户名。并非Oracle用户名。
  • SERIAL#:: process serial number。
  • TERMINAL: 操作系统terminal identifier(e.g.,computer name)。
  • PROGRAM: 进程正在执行的程序(e.g.,ORACLE.EXE (ARC0)),和v$session中的program类似。
  • TRACEFILE: trace文件路径。

BACKGROUND: 1代表oracle background process,null代表normal process。

三. 常用脚本

--windows 下kill会话
cmd>orakill 实例 spid

--查看阻塞

select sid,SERIAL#,final_blocking_session as blocking_session,SECONDS_IN_WAIT,(select sql_text from gv$sqltext where sql_id = A.sql_id) as exec_sql,(select sql_text from gv$sqltext where sql_id = A.prev_sql_id) as  prev_sql,inst_id,username,TERMINAL,program
       from gv$session A
 where sid in (select session_id from gv$locked_object)

--top 20 SQL

SELECT round(100 * a.pct,2) pct,round(a.elapsed_time / 1000000,2) elapsed_time,round(a.elapsed_time / a.executions / 1000000) second_by_exec,round(a.cpu_time / 1000000,2) cpu_time,round(a.buffer_gets / a.executions) avg_gets,round(a.DISK_READS / a.executions) avg_reads,a.executions as executions,s.sql_text
FROM (
    SELECT *
    FROM (
        SELECT elapsed_time,ratio_to_report(elapsed_time) OVER () pct,cpu_time,buffer_gets,disk_reads,executions,address,hash_value
        FROM v$sql
        ORDER BY elapsed_time DESC
        )
    WHERE rownum < 20
  ) a,v$sqlarea s
WHERE a.address = s.address
  AND a.hash_value = s.hash_value
  AND a.executions <> 0
ORDER BY pct DESC,cpu_time DESC

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读