下班逗猫闲得无聊,写写自己对几种oracle执行计划打印的认识。只是如何打印,对于如何查看执行计划有时间再写,毕竟9 10 6的人不配拥有太多。当然执行计划的打印方式很多,这只是其中几种。废话少说开始吧
方式一:explain plan for
使用explain plan for,这种查询方式适合查看单条执行SQL的执行计划。explain plan for的查看方式也有两种:
1、 plsql的F5快捷键:登录plsql按F5—>plsql会打开开一个窗口—>编写sql命名并执行—>会有刚执行sql的执行计划打印出
2、 命令窗口或者登录数据库后台执行—>explain plan for sql语句;再执行select from table(dbms_xplan.display);-->会有执行计划打印出
注意:这种方式的执行计划只是预估值,并非真正的执行计划
方式二set autotrace on
这种方式不能再plsql下进行(目前我发现在不能在plsql下进行),只能在sqlplus下进行。(如果你问我sqlplus是啥,关机睡觉吧)
SQL> set autotrace on
SQL> select
from A; #这句是你执行的sql,只能说这么细,再说细点感觉就是你对的侮辱
上一句执行后就会展现你的执行计划信息。
当然是用set autotrace on有时会报Cannot SET AUTOTRACE的错。小弟这里提供一个脚本,脚本的原理自己看内容(估计也没几个人喜欢看,哈哈)。当前脚本在oracle用户下执行。(不知道是小弟眼拙还是真的不能上传文件,脚本上传不了,大致内容如下:
#!/bin/sh
utlxplan_url=find $ORACLE_HOME -name "utlxplan.sql"
plustrce_url=find $ORACLE_HOME -name "plustrce.sql"
sqlplus / as sysdba <@${plustrce_url}
@${utlxplan_url}
grant plustrace to scott;
exit;
EOF

方式三 视图
通过查询v$sql和V$SQL_PLAN两个视图来查询
第一步:查询v$sql表根据sql_text(执行的SQL)获取sql_id
第二步:根据上一步得到的sql_id查询V$SQL_PLAN表的中对应的执行计划
个人常用方法:简单暴力哈哈
方式四 awrsqrpt.sql
认识的多个大佬常用的方法:
第一步:
使用dba用户登录 sqlplus / as sysdba
第二步:
执行
SQL> @?/rdbms/admin/awrsqrpt.sql
会出现以下页面:
pecify the Report Type

Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type:
这是让你选择输出的文件类型,选html吧,别问为什么,就是喜欢。
第三步:
回车后会出现如下页面:
Instances in this Workload Repository schema

DB Id Inst Num DB Name Instance Host


  • 1564708553 1 ORCL orcl wcg
    Enter value for dbid:
    是让你选择要生成AWR报告的实例DBid:例如我的就选1564708553 然后回车
    第四步:
    回车会会出现如下页面
    Using 1564708553 for database Id
    Enter value for inst_num:
    是让你选择要生成AWR报告的实例inst_num,例如我则选:1然后回车
    第五步:
    回车后会出现如下页面
    Specify the number of days of snapshots to choose from
    
    Entering the number of days (n) will result in the most recent
    (n) days of snapshots being listed.  Pressing  without
    specifying a number lists all completed snapshots.

Enter value for num_days:
让你输入打印日志的天数(今天是1)
输入后回车
第六步:
回车后会出现如下页面

Listing the last day's Completed Snapshots

                                                    Snap

Instance DB Name Snap Id Snap Started Level


orcl ORCL 9 19 Jun 2020 21:51 1
10 19 Jun 2020 23:00 1
11 19 Jun 2020 23:31 1

Specify the Begin and End Snapshot Ids

Enter value for begin_snap:
让你选择填写要生成报告的begin_snap(也就是开始点)然后回车
第七步:
回车后出现如下页面
Enter value for end_snap:
让你选择填写要生成报告的end_snap(也就是结束点)然后回车
第八步:
回车后出现如下页面:
Specify the Report Name

The default report file name is awrrpt_1_9_10.html. To use this name,
press to continue, otherwise enter an alternative.

Enter value for report_name:
然你输入日志的名称:例如wcg20200619.html 然后回车就会生成相应的执行计划
日志的生成路径一般在你的当前路径。也就是你在/opt/oracle下执行sqlplus / as sysdba 开始的打印之路。Name日志就会生成在/opt/oracle下