首页 > 开发 > 综合 > 正文

v$sqlarea,v$sql,v$sqltext提供的sql语句区别?

2024-07-21 02:34:25
字体:
来源:转载
供稿:网友

  v$sqltext
  存储的是完整的SQL,SQL被分割
  
  SQL> desc v$sqltext
  Name Null? Type
  ----------------------------------------- -------- ----------------------------
  ADDRESS RAW(4) ---------
  HASH_VALUE NUMBER --------- 和 address 一起唯一标志一条sql
  COMMAND_TYPE NUMBER
  PIECE NUMBER ---------- 分片之后的顺序编号
  SQL_TEXT VARCHAR2(64) -------------- 注重长度
  
  v$sqlarea --------- 存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息
  SQL> desc v$sqlarea
  Name Null? Type
  ----------------------------------------- -------- ----------------------------
  SQL_TEXT VARCHAR2(1000)
  SHARABLE_MEM NUMBER
  PERSISTENT_MEM NUMBER
  RUNTIME_MEM NUMBER
  SORTS NUMBER
  VERSION_COUNT NUMBER
  LOADED_VERSIONS NUMBER
  OPEN_VERSIONS NUMBER
  USERS_OPENING NUMBER
  FETCHES NUMBER
  EXECUTIONS NUMBER
  USERS_EXECUTING NUMBER
  LOADS NUMBER
  FIRST_LOAD_TIME VARCHAR2(38)
  INVALIDATIONS NUMBER
  PARSE_CALLS NUMBER
  DISK_READS NUMBER
  BUFFER_GETS NUMBER
  ROWS_PROCESSED NUMBER
  COMMAND_TYPE NUMBER
  OPTIMIZER_MODE VARCHAR2(25)
  PARSING_USER_ID NUMBER
  PARSING_SCHEMA_ID NUMBER
  KEPT_VERSIONS NUMBER
  ADDRESS RAW(4)
  HASH_VALUE NUMBER
  MODULE VARCHAR2(64)
  MODULE_HASH NUMBER
  ACTION VARCHAR2(64)
  ACTION_HASH NUMBER
  SERIALIZABLE_ABORTS NUMBER
  CPU_TIME NUMBER
  ELAPSED_TIME NUMBER
  IS_OBSOLETE VARCHAR2(1)
  CHILD_LATCH NUMBER
  
  v$sql ---------- 存储的是具体的SQL 和执行计划相关信息,实际上,v$sqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by 之后的信息
  
  SQL> desc v$sql
  Name Null? Type
  ----------------------------------------- -------- ----------------------------
  SQL_TEXT VARCHAR2(1000)
  SHARABLE_MEM NUMBER
  PERSISTENT_MEM NUMBER
  RUNTIME_MEM NUMBER
  SORTS NUMBER
  LOADED_VERSIONS NUMBER
  OPEN_VERSIONS NUMBER
  USERS_OPENING NUMBER
  FETCHES NUMBER
  EXECUTIONS NUMBER
  USERS_EXECUTING NUMBER
  LOADS NUMBER
  FIRST_LOAD_TIME VARCHAR2(38)
  INVALIDATIONS NUMBER
  PARSE_CALLS NUMBER
  DISK_READS NUMBER
  BUFFER_GETS NUMBER
  ROWS_PROCESSED NUMBER
  COMMAND_TYPE NUMBER
  OPTIMIZER_MODE VARCHAR2(10)
  OPTIMIZER_COST NUMBER
  PARSING_USER_ID NUMBER
  PARSING_SCHEMA_ID NUMBER
  KEPT_VERSIONS NUMBER
  ADDRESS RAW(4)
  TYPE_CHK_HEAP RAW(4)
  HASH_VALUE NUMBER
  PLAN_HASH_VALUE NUMBER
  CHILD_NUMBER NUMBER ---------- 注重这个
  MODULE VARCHAR2(64)
  MODULE_HASH NUMBER
  ACTION VARCHAR2(64)
  ACTION_HASH NUMBER
  SERIALIZABLE_ABORTS NUMBER
  OUTLINE_CATEGORY VARCHAR2(64)
  CPU_TIME NUMBER
  ELAPSED_TIME NUMBER
  OUTLINE_SID NUMBER -------------- 注重这里跟 outline 有关
  CHILD_ADDRESS RAW(4)
  SQLTYPE NUMBER
  REMOTE VARCHAR2(1)
  OBJECT_STATUS VARCHAR2(19)
  LITERAL_HASH_VALUE NUMBER
  LAST_LOAD_TIME VARCHAR2(38)
  IS_OBSOLETE VARCHAR2(1)
  CHILD_LATCH NUMBER
  
  另外注重这个
  QL> desc v$sql_plan
  Name Null? Type
  ----------------------------------------- -------- ----------------------------
  ADDRESS RAW(4)
  HASH_VALUE NUMBER
  CHILD_NUMBER NUMBER ------------ 注重这个和 v$sql 里面的相同字段
  OperaTION VARCHAR2(60)
  OPTIONS VARCHAR2(60)
  OBJECT_NODE VARCHAR2(20)
  OBJECT# NUMBER
  OBJECT_OWNER VARCHAR2(30)
  OBJECT_NAME VARCHAR2(64)
  OPTIMIZER VARCHAR2(40)
  ID NUMBER
  PARENT_ID NUMBER
  DEPTH NUMBER
  POSITION NUMBER
  SEARCH_COLUMNS NUMBER
  COST NUMBER
  CARDINALITY NUMBER
  BYTES NUMBER
  OTHER_TAG VARCHAR2(70)
  PARTITION_START VARCHAR2(10)
  PARTITION_STOP VARCHAR2(10)
  PARTITION_ID NUMBER
  OTHER VARCHAR2(4000)
  DISTRIBUTION VARCHAR2(40)
  CPU_COST NUMBER
  IO_COST NUMBER
  TEMP_SPACE NUMBER
  access_PREDICATES VARCHAR2(4000)
  FILTER_PREDICATES VARCHAR2(4000)
  
  
  实际上,看起来同样的一句SQL ,往往具有不同的执行计划
  假如是不同的数据库用户,那么相应的涉及的 对象 可能都不一样,注重v$sql 中
  OBJECT# NUMBER
  OBJECT_OWNER VARCHAR2(30)
  OBJECT_NAME VARCHAR2(64)
  OPTIMIZER VARCHAR2(40)
  
  即使是相同的数据库用户,若 session 的优化模式、session 级的参数 等不一样,执行计划也能不同。
所以即使相同的sql,也可能具有不同的执行计划!
  
  v$sql join to v$sql_plan 就代表了具体的sql的执行计划,通过下面3个字段做连接
  
  ADDRESS RAW(4)
  HASH_VALUE NUMBER
  CHILD_NUMBER NUMBER
  而v$SQLAREA 忽略了 执行计划 等差异,只是在形式上sql文本看起来一样!相当于做了个聚合,是多个不同执行计划的sql的聚合和累计信息

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表