session
程序员文章站
2024-03-20 18:12:22
...
oracle中v$session说明
现象
想要查询当前oracle数据库有多少连接数,以及这些连接都在干啥
讲知识
v$session中记录了当前与数据库建立连接的session信息,包括建立者信息、SQL语句、运行状态等
SELECT * FROM v$session;
各字段含义
V$session各字段 | 含义 |
---|---|
SADDR | session address |
SID | session identifier,SID会存在重用 |
SERIAL# | 当SID重用时,该列会增加,SID+SERIAL#能保证不重复 |
AUDSID | audit session id。可以通过audsid查询当前运行session的sid。<code>SELECT SID FROM v$session WHERE audsid = USERENV('sessionid')</code> |
PADDR | process address,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id |
USER# | session's user id;oracle内部进程USER#w为0,其他可关联all_users的user_id可以查出username。<code>SELECT * FROM all_users WHERE user_id = 'USER#的值';</code> |
USERNAME | session's username;oracle内部进程USERNAME为空 |
COMMAND | SQL语句的类型,1为create,2为insert,3为select,6为update,0……还不知道 |
OWNERID | NULL |
TADDR | transaction address,可用来关联v$transaction的addr字段 |
LOCKWAIT | 当前正在等待的锁的相关信息,可与v$lock关联 |
STATUS | 当前session状态,ACTIVE:正在执行SQL语句;INACTIVE:等待操作;KILLED:被标注为杀死 |
SERVER | DEDICATED:专用 |
SCHEMA# | Oracle内部进程的schema#为0 |
SCHEMANAME | Oracle内部进程的schemaname为sys |
OSUSER | 客户端操作系统用户名,用PL/SQL登录的,则显示登录用户名 |
PROCESS | 客户端process id |
MACHINE | 客户端主机名,例如WORKGROUP\FRANCIS-PC |
PORT | 端口 |
TERMINAL | 客户端控制台名称,例如FRANCIS-PC |
PROGRAM | 客户端执行的应用程序,用PL/SQL则为plsqldev.exe,如果是主机上一个调度程序调起的,则显示调度程序名称,如:[email protected] |
TYPE | session type (background or user) |
SQL_ADDRESS、SQL_HASH_VALUE、SQL_ID、SQL_CHILD_NUMBER | 正在执行的SQL状态,与v$sql中的address, hash_value, sql_id, child_number相对应 |
PREV_SQL_ADDR、PREV_HASH_VALUE、PREV_SQL_ID、PREV_CHILD_NUMBER | 上次执行的SQL状态 |
PLSQL_ENTRY_OBJECT_ID | NULL |
PLSQL_ENTRY_SUBPROGRAM_ID | NULL |
PLSQL_OBJECT_ID | NULL |
PLSQL_SUBPROGRAM_ID | NULL |
MODULE、MODULE_HASH、ACTION、ACTION_HASH、CLIENT_INFO | 应用通过DBMS_APPLICATION_INFO设置的一些信息,其中ACTION会显示当前语句执行窗口信息 |
FIXED_TABLE_SEQUENCE | 当session完成一个user call后就会增加的一个数值,也就是说,如果session inactive,它就不会增加。因此可以根据此字段的值变化来监控某个时间点以来的session的性能情况。例如,一个小时以前,某个session的FIXED_TABLE_SEQUENCE是10000,而现在是20000,则表明一个小时内其user call比较频繁,可以重点关注此session的performance statistics |
ROW_WAIT_OBJ# | 被锁定行所在表的object_id,通过与dba_objects关联可以得到表名OBJECT_NAME,<code>SELECT * FROM dba_objects t WHERE t.object_id = ${ROW_WAIT_OBJ#};</code>(可以用来查看当前用户正在对哪些表进行操作) |
ROW_WAIT_FILE# | 被锁定行所在的datafile id。和v$datafile中的file#关联可以得到datafile name |
ROW_WAIT_BLOCK# | 被锁定行所在的block |
ROW_WAIT_ROW# | session当前正在等待的被锁定的行 |
LOGON_TIME | session logon time(logon有登录、注册的意思) |
…… | …… |
上一篇: Java实现常见的查找算法
下一篇: 自定义异常类和使用