执行下面的SQL:
explain plan for select * from info;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
这个命令必须在sql*plus中运行,在PL/SQL中会报错
SET AUTOTRACE ON
然后执行SQL语句就可以把该语句的执行计划显示出来了:
-- display from V$SQL_PLAN (or V$SQL_PLAN_STATISTICS_ALL)
function display_cursor(sql_id varchar2 default null,
cursor_child_no integer default 0,
format varchar2 default 'TYPICAL')
return dbms_xplan_type_table
pipelined;
由上可知,我们至少需要找到执行过sql的sql_id,该参数可以从v$sql视图中找到。
如果我们想获取该语句的实际执行计划,通过下列步骤:
SELECT COUNT(1) FROM info;
SELECT * FROM v$sql WHERE LOWER(sql_text) LIKE '% from info%' ORDER BY last_active_time DESC;
select * from table(dbms_xplan.display_cursor('3nwy7gp6h8ffh'));
例如:
SELECT /*+ gather_plan_statistics */ COUNT(1) FROM info;
SELECT * -- sql_id
FROM v$sql
WHERE sql_text = 'SELECT /*+ gather_plan_statistics */ COUNT(1) FROM info '
ORDER BY last_active_time DESC;
select * from table(dbms_xplan.display_cursor('5jtb40d5d8pcr'));
select SQL_ID,
PLAN_HASH_VALUE,
ID,
OPERATION,
OBJECT_OWNER,
OBJECT_NAME,
DEPTH,
COST,
TIMESTAMP
from dba_hist_sql_plan
where 1=1
AND sql_id = '5jtb40d5d8pcr'
and TIMESTAMP >= date '2023-08-15'
and TIMESTAMP <= date '2023-08-27'
order by TIMESTAMP;
以管理员权限打开命令窗口,输入:
sqlplus / as sysdba
以sysdba身份登录到数据库。
select dbms_workload_repository.create_snapshot() from dual;
执行下面的命令:
@D:\oracle_database\11.2.0\dbhome_1\RDBMS\ADMIN\awrsqrpt.sql
默认html
自己选,本博文演示选1天
执行下面sql查询:
-- 查询快照SNAP_ID对应的sql_id,及sql_id里面的sql_text内容
SELECT ids.sql_id
,s.SQL_TEXT
,snp.snap_id
,snp.startup_time
,snp.begin_interval_time
,snp.end_interval_time
FROM dba_hist_snapshot snp
INNER JOIN dba_hist_sqlstat ids
ON (ids.snap_id = snp.snap_id)
LEFT JOIN v$sql s
ON s.SQL_ID = ids.sql_id
WHERE LOWER(s.SQL_TEXT) LIKE '%from info%';
或者用dba_hist_sqltext表拿SQL文本内容:
SELECT ids.sql_id
,to_char(s.sql_text) AS sql_text
,snp.snap_id
,snp.startup_time
,snp.begin_interval_time
,snp.end_interval_time
FROM dba_hist_snapshot snp
INNER JOIN dba_hist_sqlstat ids
ON (ids.snap_id = snp.snap_id)
LEFT JOIN dba_hist_sqltext s
ON s.sql_id = ids.sql_id
WHERE lower(s.sql_text) LIKE '%from info%';
得到sql_id为:b6qr4gqd7x57t
本博文演示,使用默认值 awrsqlrpt_1_800_811.html
等待报告生成完毕:
报告生成在cmd命令窗口目录:C:\Windows\System32
可以看到sql_id只有一个执行计划。
select t.snap_id,t.dbid,instance_number
,to_char(t.startup_time,'yyyy-mm-dd hh24:mi:ss') AS startup_time
,to_char(t.begin_interval_time,'yyyy-mm-dd hh24:mi:ss') AS begin_interval_time
,to_char(t.end_interval_time,'yyyy-mm-dd hh24:mi:ss') AS end_interval_time
,t.*
from dba_hist_snapshot t
ORDER BY 1 DESC;
SELECT * FROM dba_hist_sqlstat WHERE sql_id IN ('b6qr4gqd7x57t');
SELECT * FROM DBA_HIST_SQL_PLAN WHERE sql_id IN ('b6qr4gqd7x57t');
根据SQL_ID获取SQL语句内容:
-- 根据SQL_ID获取SQL语句内容
SELECT command_type
,sql_text
FROM dba_hist_sqltext
WHERE sql_id = 'b6qr4gqd7x57t';
阅读量:2010
点赞量:0
收藏量:0