ITPub博客

首页 > 数据库 > Oracle > 第11期 如何确定一个SQL语句的SQL_ID?

第11期 如何确定一个SQL语句的SQL_ID?

原创 Oracle 作者:pxbibm 时间:2024-08-07 16:28:55 0 删除 编辑

本文档介绍了如何使用V$SQL视图、AWR & ASH数据或关联视图的数据字典查询来确定SQL语句关联文本的SQL_ID。

如何确定一个SQL语句的SQL_ID?

语句的SQL_ID可以在AWR或ASH报告中找到,或者使用V$SQL视图从数据库数据字典中找到。

如果SQL可以用一个特定的可识别的字符串或某种独特的注释来识别,如:/* TARGET SQL */,那么这将使其更容易被找到。

比如:

SELECT /* TARGET SQL */ * FROM dual;
SELECT sql_id, plan_hash_value, substr(sql_text,1,40) sql_text  
FROM  v$sql 
WHERE sql_text like 'SELECT /* TARGET SQL */%'
SQL_ID        PLAN_HASH_VALUE SQL_TEXT
------------- --------------- ----------------------------------------
0xzhrtn5gkpjs       272002086 SELECT /* TARGET SQL */ * FROM dual

为方便起见,这里包含了plan_hash_value。

你也可以在V$SQL视图中使用一个可替换的变量找到SQL_ID:

SELECT sql_id, plan_hash_value, SUBSTR(sql_text,1,40) Text
FROM v$sql
WHERE sql_text LIKE '%&An_Identifiable_String%';

如果在v$sql中找不到这个SQL,你可以在AWR历史视图中找到它: DBA_HIST_SQLTEXT 和 DBA_HIST_SQLSTAT :

SELECT
    s.sql_id,
    s.plan_hash_value,
    t.sql_text,
    s.snap_id
FROM
    dba_hist_sqlstat   s,
    dba_hist_sqltext   t
WHERE s.dbid = t.dbid
AND   s.sql_id = t.sql_id
AND   sql_text LIKE 'SELECT /* TARGET SQL */%'
ORDER BY
    s.sql_id

你可以使用snap_id从AWR中确定SQL的执行时间以及它的其他信息。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12798004/viewspace-3024419/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
【DBAplus社群】联合发起人。ACOUG核心成员,Oracle用户组年轻专家。熟悉Oracle的体系结构,擅长Oracle数据库架构规划、SQL优化、OWI方面性能的优化。曾服务于航天、航空、机车、大型制造行业数据库的维护以及系统开发工作,开发过基于Oracle数据库的大型ERP系统。
  • 博文量
    341
  • 访问量
    2469628