oracle中视图v$sql的用途
2023-05-11 11:29:27
1、获取正在执行的sql语句、sql语句的执行时间、sql语句的等待事件:
select a.sql_text,b.status,b.last_call_et,b.machine,b.event,b.program from v$sql a,v$session b where a.sql_id=b.sql_id
2、获取sql语句执行时间:
select sql_text,cpu_time/1000/1000 t_cpu,trunc(elapsed_time/1000/1000) t_elapse from v$sql
但并非所有的sql语句都能从v$sql中获得,因为oracle会动态更新共享池的信息,从共享池中删除一些旧的sql语句,为新的sql语句提供共享池的空间
手动清空共享池信息:
alter system flush shared_pool
V$SQL中列的说明:
lSQL_TEXT: SQL文本的前面 1000个字符
lSHARABLE_MEM:共享内存占用的大小 (单位: byte)
lPERSISTENT_MEM:固定内存在生命期间的固定内存大小 (单位: byte)
lRUNTIME_MEM:执行期内固定内存大小的固定内存
lSORTS:完成的排序数
lLOADED_VERSIONS:显示上下文堆是否载入, 1是 0否
lOPEN_VERSIONS:显示子游标是否被锁定, 1是 0否
lUSERS_OPENING:执行语句的用户数
lFETCHES: SQL语句 fetch数。
lEXECUTIONS:自载入缓存库后的执行次数
lUSERS_EXECUTING:执行语句的用户数
lLOADS:对象被载入的次数
lFIRST_LOAD_TIME:第一次载入时间
lINVALIDATIONS:无效的次数
lPARSE_CALLS:分析调用次数
lDISK_READS:读磁盘次数
lBUFFER_GETS:读取缓存区的次数
lROWS_PROCESSED:解析 SQL语句返回总列数
lCOMMAND_TYPE:命令类型代号
lOPTIMIZER_MODE: SQL语句优化器模型
lOPTIMIZER_COST:优化器给出的查询成本
lPARSING_USER_ID:第一个用户进行分析 ID
lPARSING_SCHEMA_ID:第一个分析计划 ID
lKEPT_VERSIONS:指出是否使用了当前的子游标 DBMS_SHARED_POOL包标记为常驻内存
lADDRESS:目前游标父句柄地址
lTYPE_CHK_HEAP:当前堆类型检查说明
lHASH_VALUE:缓存库中的父语句 Hash值
lPLAN_HASH_VALUE:执行计划的数值表示。
lCHILD_NUMBER:子游标数量
lMODULE:这个句子的第一次分析是通过调用来进行的 DBMS_APPLICATION_INFO.SET_MODULE设置的模块名称。
lACTION:这个句子的第一次分析是通过调用来进行的 DBMS_APPLICATION_INFO.SET_ACTION设置的动作名称。
lSERIALIZABLE_ABORTS:事务未能序列化次数
lOUTLINE_CATEGORY:如果 解释outline 如果在cursor期间应用,本列将显示 outline种类繁多,否则本列为空
lCPU_TIME:解析 /执行 /取得等 使用CPU的时间 (单位,毫秒 )
lELAPSED_TIME:解析 /执行 /获得等待消耗时间 (单位,毫秒 )
lOUTLINE_SID: outline session标识
lCHILD_ADDRESS:子游标地址
lSQLTYPE:指出使用当前语句 SQL语言版
lREMOTE:指出游标是否为远程图像 (Y/N)
lOBJECT_STATUS:对象状态 (VALID or INVALID)
lIS_OBSOLETE:当子游标数量过多时,指出游标是否被废弃 (Y/N)
V$SESSION中的常用列
V$SESSION是寻找用户的基本信息视图 SID或 SADDR。但是,列会也有一些动态变化,可以用来检查用户。例如:
SQL_HASH_VALUE, SQL_ADDRESS:这两列用于识别默认被识别 session执行session 如果是,SQL语句 null或 那就说明这一点 session没有执行任何执行 SQL语句。 PREV_HASH_VALUE和 PREV_ADDRESS两列用于识别 session执行session上一条语句。
注:当使用时 SQL*在选择Plus时,确认您重定义的列宽不小于 11以便看到完整的值。
STATUS:这一列用于判断 sesssion状态如下:
lAchtive:正执行 SQL语句 (waiting for/using a resource)
lInactive:等待操作 (即等待需要执行的 SQL语句 )
lKilled:被标记为删除
提供以下列列列 session信息可用作一个或多个信息 未知时发现combination session。
Session信息
lSID: SESSION标识通常用于连接其他列
lSERIAL#:如果某个 其他的SID 如果使用session,这个值会自增加 (当一个 SESSION结束,另一个 SESSION开始并使用同一个 SID)。
lAUDSID:审查 session 当寻找并行查询模式时,ID的唯一性通常被用来确认
lUSERNAME:当前 session在 用户名在oracle中。
Client信息
数据库 session通过数据库服务器或中间服务器甚至桌面运行 SQL*Net连接到数据库的客户端过程启动,以下列列列提供该客户端的信息
lOSUSER:客户端操作系统用户名
lMACHINE:机器由客户端执行
lTERMINAL:终端运行在客户端
lPROCESS:客户端流程 ID
lPROGRAM:客户端程序由客户端执行
显示用户的连接 PC的 TERMINAL、 OSUSER,需在该 PC的 ORACLE.INI或 在Windows中设置关键字 TERMINAL, USERNAME。
application信息
调用 DBMS_APPLICATION_INFO包设置一些信息来区分用户。这将显示以下列列。
lCLIENT_INFO: DBMS_APPLICATION_在INFO中设置
lACTION: DBMS_APPLICATION_在INFO中设置
lMODULE: DBMS_APPLICATION_在INFO中设置
下列 V$SESSION列也可以使用:
lROW_WAIT_OBJ#
lROW_WAIT_FILE#
lROW_WAIT_BLOCK#
lROW_WAIT_ROW#