v$SQL,v$SQL_AREA,V$SQL_TEXT的区别与联系
(2018-10-29 14:27:46)
标签:
vsql和vsqlarea区别vsql_text用法vsql_area用法vsession用法 |
分类: Oracle数据库 |
一、视图定义及用途
V$SESSION:基础信息视图,用于找寻用户 SID或 SADDR。不过,它也有一些列会动态的变化,可用于检查用户。
v$sql:游标视图,但是这个结果集里的数据不能保证长时间的存在,而且无法随数据库迁移到新的服务器上。它存储的是具体的SQL和执行计划相关信息,它不包含group by 字句,并且为每一条SQL语句中单独存放一条记录。
v$sqlarea:一个综合视图,提供的是每条sql语句执行的汇总信息。它存储的SQL和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息;可以看做v$sql根据sqltext等做了group by 之后的信息。
v$sqltext:一个文本视图,提供完整的sql语句,SQL被分片显示。
--查看视图定义
select view_definition from v$fixed_view_definition where view_name='GV$SESSION';
select view_definition from v$fixed_view_definition where view_name='GV$SQL';
select view_definition from v$fixed_view_definition where view_name='GV$SQLAREA';
select view_definition from v$fixed_view_definition where view_name='GV$SQLTEXT';
二、视图主要字段说明
2.1、v$session主要字段说明
status(用来判断session的状态):
active:正执行 sql语句 (waiting for/using a resource)
inactive:等待操作 (即等待需要执行的 sql语句 )
killed:被标注为删除
sid:session标识,常用于连接其它列
serial#:如果某个 sid又被其它的 session使用的话则此数值自增加 (当一个session结束,另一个session开始并使用了同一个 sid)。
audsid:审查 session id唯一性,确认它通常也用于当寻找并行查询模式
username:当前 session在 oracle中的用户名。
osuser:客户端操作系统用户名
machine:客户端执行的机器
terminal:客户端运行的终端
process:客户端进程的 id
program:客户端执行的客户端程序
备注:sql_hash_value,sql_address:这两列用于鉴别默认被session执行的 sql语句。如果为 null或 0,那就说明这个 session没有执行任何 sql语句。 prev_hash_value和 prev_address两列用来鉴别被 session执行的上一条语句。
2.2、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)
2.3、v$sqlarea主要字段说明
hash_value: sql语句的 hash值。
address: sql语句在 sga中的地址。
这两列被用于鉴别 sql语句,有时,两条不同的语句可能 hash值相同。这时候,必须连同 address一同使用来确认 sql语句。
parsing_user_id:为语句解析第一条 cursor的用户
version_count:语句 cursor的数量
kept_versions:
sharable_memory: cursor使用的共享内存总数
persistent_memory: cursor使用的常驻内存总数
runtime_memory: cursor使用的运行时内存总数。
sql_text: sql语句的文本(最大只能保存该语句的前 1000个字符)。
module,action:使用了 dbms_application_info时 session解析第一条 cursor时的信息
--v$sqlarea中的其它常用列
sorts: 语句的排序数
cpu_time: 语句被解析和执行的 cpu时间
elapsed_time: 语句被解析和执行的共用时间
parse_calls: 语句的解析调用 (软、硬 )次数
executions: 语句的执行次数
invalidations: 语句的 cursor失效次数
loads: 语句载入 (载出 )数量
rows_processed: 语句返回的列总数
2.4、v$sqltext主要字段说明
hash_value:sql语句的 hash值
address:sql语句在 sga中的地址
sql_text:sql文本。
piece:sql语句块的序号
三、常用查询sql
--查看正在执行的sql
select a.sid,a.serial#,a.schemaname,a.username,a.status,a.terminal,a.machine,a.osuser,a.type,b.sql_text,b.sql_fulltext,b.first_load_time
from gv$session a,gv$sqlarea b
where a.sql_address = b.address
and a.status='ACTIVE';
--查看某个用户下,正在执行的sql
select a.sid,a.serial#,a.schemaname,a.username,a.status,a.terminal,a.machine,a.osuser,a.type,b.sql_text,b.sql_fulltext,b.first_load_time
from gv$session a,gv$sqlarea b
where a.sql_address = b.address
select a.sid,a.serial#,a.schemaname,a.username,a.status,a.terminal,a.machine,a.osuser,a.type,b.sql_text,b.sql_fulltext,b.first_load_time
from gv$session a,gv$sqlarea b
where a.sql_address = b.address
and a.username='APP'
and a.status='ACTIVE';
--查看执行过的sql
select t.first_load_time,t.last_load_time,t.sql_text,t.sql_fulltext
from v$sqlarea t
where t.first_load_time between '2018-07-02/09:00:47' and '2018-07-02/09:30:47'
order by t.first_load_time
备注:此方法好处可以查看某一时间段执行过的sql,并且 sql_fulltext 包含了完整的 sql 语句)
--其他
select osuser,program,username,schemaname,b.cpu_time,status,b.sql_text
from v$session a
left join v$sql b
on a.sql_address=b.address
and a.sql_hash_value=b.hash_value
order by b.cpu_time desc
select address,sql_text,piece
from v$session,v$sqltext
where address = sql_address
order by address,piece
--查找前十条性能差的sql.
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 ;
--查看占io较大的正在运行的session
select se.sid,se.serial#,pr.spid,se.username,se.status,
from v$session se,v$session_wait st,v$sess_io si,v$process pr
where st.sid=se.sid
and st.sid=si.sid
and se.paddr=pr.addr
and se.sid>6
and st.wait_time=0
and st.event not like '%SQL%'
order by physical_reads desc
主要参考资料:
https://blog.csdn.net/perfect_db/article/details/16823053

加载中…