# oracle系统表v$session、v$sql 查看最近执行了哪些sql语句
数据库 session被一个运行在数据库服务器上或从中间服务器甚至桌面通过 SQL*Net连接到数据库的客户端进程启动,下列各列提供这个客户端的信息
- OSUSER:客户端操作系统用户名
- MACHINE:客户端执行的机器
- TERMINAL:客户端运行的终端
- PROCESS:客户端进程的 ID
- PROGRAM:客户端执行的客户端程序
# session示例
--查找你的 session信息
SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
FROM V$SESSION WHERE audsid = userenv( 'SESSIONID' );
--当 machine已知的情况下查找 session
SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
FROM V$SESSION
WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1' ;
--查找当前被某个指定 session正在运行的 sql语句。假设 sessionID为 100
select b.sql_text
from v$session a,v$sqlarea b
where a.sql_hashvalue=b. hash_value and a.sid= 00;
或者
select b.sql_text
from v$session a,v$sqlarea b //v$sqlarea 只包括sql的1000个字符,V$SQLTEXT is all
where a.sql_hash_value = b.HASH_VALUE and a.TERMINAL = 'BackHam';//BackHam is my computer name;
# V$SQLTEXT中的常用列
- HASH_VALUE: SQL语句的 Hash值
- ADDRESS: sql语句在 SGA中的地址
- SQL_TEXT: SQL文本。
- PIECE: SQL语句块的序号
# 执行sql查询示例
--查看消耗资源最多的 SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC ;
--查看某条 SQL 语句的资源消耗:
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls
FROM V$SQLAREA
WHERE hash_Value = 228801498 AND address = hextoraw( 'CBD8E4B0' );
--查找前10条性能差的sql语句
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea order BY disk_reads DESC )where ROWNUM<10 ;
--EXECUTIONS表示同一条SQL语句一共执行了多少次,SORTS表示排序的次数,DISK_READS表示物理读的数量。
v$sql视图包含 cursor级别资料。当试图定位 session或用户以分析 cursor时被使用。PLAN_HASH_VALUE列存储的是数值表示的 cursor执行计划。可被用来对比执行计划。 PLAN_HASH_VALUE让你不必一行一行对比即可轻松鉴别两条执行计划是否相同。
V$SQL中的列说明:
- SQL_TEXT: SQL文本的前 1000个字符
- SHARABLE_MEM:占用的共享内存大小 (单位: byte)
- PERSISTENT_MEM:生命期内的固定内存大小 (单位: byte)
- RUNTIME_MEM:执行期内的固定内存大小
- SORTS:完成的排序数
- LOADED_VERSIONS:显示上下文堆是否载入, 1是 0否
- OPEN_VERSIONS:显示子游标是否被锁, 1是 0否
- USERS_OPENING:执行语句的用户数
- FETCHES: SQL语句的 fetch数。
- EXECUTIONS:自它被载入缓存库后的执行次数
- USERS_EXECUTING:执行语句的用户数
- LOADS:对象被载入过的次数
- FIRST_LOAD_TIME:初次载入时间
- INVALIDATIONS:无效的次数
- PARSE_CALLS:解析调用次数
- DISK_READS:读磁盘次数
- BUFFER_GETS:读缓存区次数
- ROWS_PROCESSED:解析 SQL语句返回的总列数
- COMMAND_TYPE:命令类型代号
- OPTIMIZER_MODE: SQL语句的优化器模型
- OPTIMIZER_COST:优化器给出的本次查询成本
- PARSING_USER_ID:第一个解析的用户 ID
- PARSING_SCHEMA_ID:第一个解析的计划 ID
- KEPT_VERSIONS:指出是否当前子游标被使用 DBMS_SHARED_POOL包标记为常驻内存
- ADDRESS:当前游标父句柄地址
- TYPE_CHK_HEAP:当前堆类型检查说明
- HASH_VALUE:缓存库中父语句的 Hash值
- PLAN_HASH_VALUE:数值表示的执行计划。
- CHILD_NUMBER:子游标数量
- MODULE:在第一次解析这条语句是通过调用 DBMS_APPLICATION_INFO.SET_MODULE设置的模块名称。
- ACTION:在第一次解析这条语句是通过调用 DBMS_APPLICATION_INFO.SET_ACTION设置的动作名称。
- SERIALIZABLE_ABORTS:事务未能序列化次数
- OUTLINE_CATEGORY:如果 outline在解释 cursor期间被应用,那么本列将显示出 outline各类,否则本列为空
- CPU_TIME:解析 /执行 /取得等 CPU使用时间 (单位,毫秒 )
- ELAPSED_TIME:解析 /执行 /取得等消耗时间 (单位,毫秒 )
- OUTLINE_SID: outline session标识
- CHILD_ADDRESS:子游标地址
- SQLTYPE:指出当前语句使用的 SQL语言版本
- REMOTE:指出是否游标是一个远程映象 (Y/N)
- OBJECT_STATUS:对象状态 (VALID or INVALID)
- IS_OBSOLETE:当子游标的数量太多的时候,指出游标是否被废弃 (Y/N)
--查询$sql示例
select
s.sql_text,
b.name,b.position,b.dup_position,
b.value_string
from v$sql s, v$sql_bind_capture b
where s.hash_value=b.hash_value;