科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道v$sqlarea,v$sql,v$sqltext提供的sql语句区别?

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  v$sqltext   存储的是完整的SQL,SQL被分割      SQL> desc v$sqltext   Name Null? Type   ----------------------------------------- ------

作者:中国IT实验室 来源:中国IT实验室 2007年9月30日

关键字: SQL 数据库 SQL Server

  • 评论
  • 分享微博
  • 分享邮件

  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的聚合和累计信息

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件