ITPub博客

首页 > 数据库 > Oracle > [20230419]关于sqlhh.sql执行脚本的一些说明.txt

[20230419]关于sqlhh.sql执行脚本的一些说明.txt

原创 Oracle 作者:lfree 时间:2023-04-27 10:25:20 0 删除 编辑

[20230419]关于sqlhh.sql执行脚本的一些说明.txt

--//有朋友反映类似的问题,我写的blog引用许多脚本,我并没有提供源代码。
--//主要有几个原因:
1.有一些脚本我不提供,你看文章自己也很容易写出对应脚本,而且有一些脚本写的很烂,我自己都不好意思贴出来。
我开始学习oracle时非常不喜欢在sqlplus下工作,太麻烦了。大部分操作都是在toad下运行,慢慢我发现有时候还只能在sqlplus下工作。
我以前将全部脚本写在一个文件里面,使用时就拷贝和粘贴到sqlplus下,这样很容易出错,而且有一些带有参数,操作也不方便。
慢慢我将这些脚本写入文件,平时也注意收集别人写的一些脚本,然后逐步完善改进这些脚本。很长一段时间我工作解决问题都是使用自
己写的脚本。

2.后来我发现一些blog,经常出现和使用tanelpoder tpt脚本,我开始也就是集中在ashtop之类的脚本使用上。而且毕竟不是自己写的,
选择tpt的脚本,你给知道执行做什么的内容,总不能顺便拿来就执行。

2020年末,主要疫情的原因,我开始系统学习与使用tpt脚本,也根据自己的需要改动一些脚本,这样更加顺手一些,也能很大的提高工
作效率。

以后我会尽可能使用tanelpoder tpt脚本,减少自己编写脚本的使用量。自己写的脚本尽可能贴出源代码。

最后顺便解答sqlhh.sql脚本的问题,实际上调用的就是tpt脚本awr/awr_sqlstats_per_exec.sql.
名字有点长,我自己又ln建立一个sqlh.sql副本表示sql history的意思(注后来我发现tpt目录下也有一个sqlh.sql脚本)。
然后我在tpt目录建立sqlhh.sql脚本:

$ cd awr
$ ln awr_sqlstats_per_exec.sql sqlh.sql
$ cd ..
--//建立sqlhh.sql,内容如下:
$ vi sqlhh.sql
$ cat sqlhh.sql
prompt
prompt time unit : millisecond
prompt
@awr/sqlh &1 % sysdate-&&2 sysdate

--//顺便附上awr/awr_sqlstats_per_exec.sql的内容:
$ cat awr/awr_sqlstats_per_exec.sql
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.

-- awr_sqlstats_per_exec v1.01

SET TERMOUT OFF pagesize 5000 tab off verify off linesize 999 trimspool on trimout on null ""
SET TERMOUT ON

COL executions       FOR 99999990
COL ela_ms_per_exec  FOR 99999990
COL rows_per_exec    FOR 99999990.0
COL lios_per_exec    FOR 99999990
COL blkrd_per_exec   FOR 99999990
COL cpu_ms_per_exec  FOR 99999990
COL iow_ms_per_exec  FOR 99999990
COL avg_iow_ms       FOR 99999990.0
COL clw_ms_per_exec  FOR 99999990
COL apw_ms_per_exec  FOR 99999990
COL ccw_ms_per_exec  FOR 99999990

-- You can configure output column precision here

-- COL executions       FOR 99999990.0
-- COL ela_ms_per_exec  FOR 99999990.0
-- COL rows_per_exec    FOR 99999990.0
-- COL lios_per_exec    FOR 99999990.0
-- COL blkrd_per_exec   FOR 99999990.0
-- COL cpu_ms_per_exec  FOR 99999990.0
-- COL iow_ms_per_exec  FOR 99999990.0
-- COL avg_iow_ms      FOR 99999990.0
-- COL clw_ms_per_exec  FOR 99999990.0
-- COL apw_ms_per_exec  FOR 99999990.0
-- COL ccw_ms_per_exec  FOR 99999990.0

SELECT
    CAST(begin_interval_time AS DATE) begin_interval_time
  , st.instance_number inst_id
  , sql_id
  , plan_hash_value
  , SUM(executions_delta)     executions
  , ROUND(SUM(elapsed_time_delta  ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000)                         ela_ms_per_exec
  , ROUND(SUM(cpu_time_delta      ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000)                         cpu_ms_per_exec
  , ROUND(SUM(rows_processed_delta) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)),1)                            rows_per_exec
  , ROUND(SUM(buffer_gets_delta   ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)),1)                            lios_per_exec
  , ROUND(SUM(disk_reads_delta    ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)),1)                            blkrd_per_exec
  , ROUND(SUM(iowait_delta        ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000)                         iow_ms_per_exec
  , ROUND(SUM(iowait_delta        ) / DECODE(SUM(physical_read_requests_delta)+SUM(physical_write_requests_delta),0,1
                                            ,SUM(physical_read_requests_delta)+SUM(physical_write_requests_delta))/1000,1)  avg_iow_ms
  , ROUND(SUM(clwait_delta        ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000)                         clw_ms_per_exec
  , ROUND(SUM(apwait_delta        ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000)                         apw_ms_per_exec
  , ROUND(SUM(ccwait_delta        ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000)                         ccw_ms_per_exec
--  , ROUND(SUM(elapsed_time_delta - cpu_time_delta - iowait_delta - clwait_delta - apwait_delta - ccwait_delta) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)) / 1000, 1) oth_ms_per_exec
FROM
    dba_hist_snapshot sn
  , dba_hist_sqlstat st
WHERE
    sn.snap_id = st.snap_id
AND sn.dbid    = st.dbid
AND sn.instance_number = st.instance_number
AND sql_id = '&1'
AND plan_hash_value LIKE '&2'
AND begin_interval_time >= &3
AND end_interval_time   <= &4
AND (elapsed_time_delta != 0 AND cpu_time_delta != 0)
GROUP BY
    CAST(begin_interval_time AS DATE)
  , sql_id
  , plan_hash_value
  , st.instance_number
ORDER BY
    begin_interval_time
  , sql_id
  , plan_hash_value
/

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

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970808