Oracle 数据库提供了三个动态视图,用于查询当前共享池中的所有 SQL 语句的执行统计信息。它们分别是 V$SQL、V$SQLAREA 和 V$SQLSTATS。本文将探讨它们之间的区别。
SQL> select /* sql_version */ last_name from employees where EMPLOYEE_ID<10;未选择行SQL> alter session set optimizer_index_cost_adj=101;会话已更改。SQL> select /* sql_version */ last_name from employees where EMPLOYEE_ID<10;未选择行
SQL> select sql_id, substr(sql_text,1,50), buffer_gets, ELAPSED_TIME, child_number, CHILD_ADDRESS from v$sql where sql_id='8qxn9jfkd7348';SQL_ID SUBSTR(SQL_TEXT,1,50) BUFFER_GETS ELAPSED_TIME CHILD_NUMBER CHILD_ADDRESS8qxn9jfkd7348 select /* sql_version */ last_name from employees 1 2571 0 0000000095FBF3688qxn9jfkd7348 select /* sql_version */ last_name from employees 1 2679 1 0000000096560ED8SQL> select sql_id, substr(sql_text,1,50), buffer_gets, ELAPSED_TIME from v$sqlarea where sql_id='8qxn9jfkd7348';SQL_ID SUBSTR(SQL_TEXT,1,50) BUFFER_GETS ELAPSED_TIME8qxn9jfkd7348 select /* sql_version */ last_name from employees 2 5250SQL> select sql_id, substr(sql_text,1,50), buffer_gets, ELAPSED_TIME from v$sqlstats where sql_id='8qxn9jfkd7348';SQL_ID SUBSTR(SQL_TEXT,1,50) BUFFER_GETS ELAPSED_TIME8qxn9jfkd7348 select /* sql_version */ last_name from employees 2 5250
V$SQLSTATS 包含 SQL 语句的完整文本,不再需要访问 V$SQLAREA 和 V$SQLTEXT 来获取所需的信息。
Oracle声称V$SQLSTATS 更快且更具扩展性。
V$SQLSTATS 提供了更长的访问窗口,也就是说即使某些过期的SQL已经不在共享池中,仍然可能在这个视图中查询到。
文章转载自oracleace,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




