暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

AWR报告分析之TOP SQL

3123

编者按:

本文作者系Walt,关注SQL开发,Oracle、MySQL、PostgreSQL、TiDB等数据库,AWS、Azure、OCI等公有云计算架构和技术。

个人主页: https://blog.csdn.net/lukeUnique。

SQL专栏课程:https://www.modb.pro/course/125

【免责声明】本公众号文章仅代表个人观点,与任何公司无关。

编辑|SQL和数据库技术(ID:SQLplusDB)


在AWR报告中,有一个称为【SQL Statistics】的部分,会输出在AWS报告期间内根据各种条件进行排序的TOP SQL,各TOP SQL详细如下。
(相关内容会保存在AWR的DBA_HIST_SQLSTAT表中。)



SQL ordered by Elapsed Time

根据SQL执行时间(Elapsed Time)排序的TOP SQL。



    Elapsed Time(S): SQL语句执行的总时间(单位秒)。
                     注意:Elapsed Time = CPU Time + Wait Time
    Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
    Elap per Exec(s): SQL一次执行的平均时间(单位秒)。=Elapsed Time/Executions
    % Total : SQL的Elapsed Time时间占数据库总时间的百分比。= Elapsed time DB Time * 100(%)
    %CPU : CPU时间和Elapsed Time时间的百分比。= CPU Time Elapsed Time * 100(%)
    %IO : IO 时间和Elapsed Time时间的百分比。= User IO Time Elapsed Time * 100(%)
    SQL ID : SQL语句的唯一标识。
    SQL Module : 调用SQL的程序模块。
    SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。


    SQL ordered by CPU Time

    根据SQL消耗CPU时间排序的TOP SQL。


      CPU Time (s):SQL语句执行消耗的CPU总时间(单位秒)。
      当CPU Time和Elapsed Time相近时,表示时间主要消耗在CPU上。
      当CPU Time和Elapsed Time差值较大时,表示时间大量消耗在等待上,这是我们要关注等待事件。
      Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
      CPU per Exec (s):SQL一次执行的平均CPU时间(单位秒)。=CPU Time Executions
      % Total : SQL的CPU Time 时间占数据库总CPU 时间的百分比。
      Elapsed Time(S): SQL语句执行的总时间(单位秒)。
      %CPU : CPU时间和Elapsed Time时间的百分比。= CPU Time Elapsed Time * 100(%)
      %IO : IO 时间和Elapsed Time时间的百分比。= User IO Time /Elapsed Time * 100(%)
      SQL ID : SQL语句的唯一标识。
      SQL Module : 调用SQL的程序模块。
      SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

      SQL ordered by User I/O Wait Time

      根据SQL消耗I/O等待时间排序的TOP SQL。


        User I/O Time (s):SQL语句执行消耗的I/O总时间(单位秒)。
        Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
        UIO per Exec (s):SQL一次执行的平均I/O时间(单位秒)。=User I/O Time /Executions
        % Total : SQL的User I/O Time时间占数据库总User I/O 时间的百分比。
        Elapsed Time(S): SQL语句执行的总时间(单位秒)。
        %CPU : CPU时间和Elapsed Time时间的百分比。= CPU Time /Elapsed Time * 100(%)
        %IO : IO 时间和Elapsed Time时间的百分比。= User IO Time /Elapsed Time * 100(%)
        SQL ID : SQL语句的唯一标识。
        SQL Module : 调用SQL的程序模块。
        SQL Text     :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

        SQL ordered by Gets

        根据SQL缓存读块数排序的TOP SQL


          Buffer Gets   :SQL访问的缓存数据块数(逻辑IO)
          Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
          Gets per Exec:SQL一次执行的平均访问的缓存数据块数。=Buffer Gets /Executions
          % Total : SQL的Buffer Gets 占总Buffer Gets 的百分比。
          Elapsed Time(S): SQL语句执行的总时间(单位秒)。
          %CPU : CPU时间和Elapsed Time时间的百分比。= CPU Time /Elapsed Time * 100(%)
          %IO : IO 时间和Elapsed Time时间的百分比。= User IO Time /Elapsed Time * 100(%)
          SQL ID : SQL语句的唯一标识。
          SQL Module : 调用SQL的程序模块。
          SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

          SQL ordered by Reads

          根据SQL物理读块数排序的TOP SQL。


            Physical Reads  :SQL物理读的数据块数(物理IO)
            Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
            Reads per Exec:SQL一次执行的物理读数据块数。=Physical Reads/Executions
            % Total : SQL的Physical Reads占总Physical Reads的百分比。
            Elapsed Time(S): SQL语句执行的总时间(单位秒)。
            %CPU : CPU时间和Elapsed Time时间的百分比。= CPU Time /Elapsed Time * 100(%)
            %IO : IO 时间和Elapsed Time时间的百分比。= User IO Time /Elapsed Time * 100(%)
            SQL ID : SQL语句的唯一标识。
            SQL Module : 调用SQL的程序模块。
            SQL Text     :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。


            SQL ordered by Physical Reads (UnOptimized)

            根据SQL非优化的物理读次数排序的TOP SQL。


            我们可以看到AWR报告中第一行的内容UnOptimized Read Reqs = Physical Read Reqs - (Optimized Read Reqs - Cell Flash Cache Read Hits for Controlfile)。
            所谓的非优化的物理读(Optimized Read Reqs)是通过Database Smart Flash Cache 或者Exadata Smart Flash Cache功能进行的物理读。

            智能闪存( Smart Flash Cache)功能主要是将SSD硬盘当做内存(Buffer cache)使用的功能,用于减少I/O。通过这个当内存不足的时候,设定的Smart Flash Cache可以当做二级缓存用于缓存数据块。

            要使用这个智能闪存功能需要设置如下参数:

              db_flash_cache_file :智能闪存的位置
              db_flash_cache_size :智能闪存的大小

              另外,当未启用智能闪存(Database Smart Flash Cache)时,我们可以认为所有的物理读都是非优化的。


                UnOptimized Read Reqs :SQL非优化的物理读的次数
                Physical Read Reqs :SQL物理读的次数
                Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
                UnOptimized Reqs per Exec:SQL一次执行的非优化的物理读次数。=UnOptimized Read Reqs/Executions
                %Opt : 优化的物理读次数和物理读总次数的百分比。
                % Total : 非优化的物理读的次数占总P非优化的物理读的次数的百分比。
                SQL ID : SQL语句的唯一标识。
                SQL Module : 调用SQL的程序模块。
                SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

                SQL ordered by Executions

                根据SQL执行次数排序的TOP SQL。


                  Executions      : SQL执行总次数。
                  Rows Processed:SQL处理的总行数。
                  Rows per Exec :SQL一次执行的平均处理行数。=Rows Processed /Executions
                  Elapsed Time(S): SQL语句执行的总时间(单位秒)。
                  %CPU : CPU时间和Elapsed Time时间的百分比。= CPU Time /Elapsed Time * 100(%)
                  %IO : IO 时间和Elapsed Time时间的百分比。= User IO Time /Elapsed Time * 100(%)
                  SQL ID : SQL语句的唯一标识。
                  SQL Module : 调用SQL的程序模块。
                  SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

                  SQL ordered by Parse Calls

                  根据SQL解析次数排序的TOP SQL。


                    Parse Calls     :SQL的解析次数。如果Parse Calls接近 Executions 表示SQL每次执行都需要解析,考虑游标共享。
                    Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
                    % Total Parses:SQL的解析次数占总解析次数的百分比。
                    SQL ID : SQL语句的唯一标识。
                    SQL Module : 调用SQL的程序模块。
                    SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

                    SQL ordered by Sharable Memory

                    根据SQL使用的共享内存排序的TOP SQL。


                      Sharable Mem (b) :SQL占用的内存大小(单位byte)。
                      Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
                      % Total :SQL的占用的内存占总内存的百分比。
                      SQL ID : SQL语句的唯一标识。
                      SQL Module : 调用SQL的程序模块。
                      SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。
                      当发生大量内存使用导致内存不足、ORA-4031等错误时,可以关注这部分的SQL。


                      SQL ordered by Version Count

                      根据SQL版本(version count)排序的TOP SQL。


                        version count :同一个父游标下子游标的数量。
                        Executions : SQL执行总次数,如果Executions =0表示在awr报告时间内未执行完。
                        SQL ID : SQL语句的唯一标识。
                        SQL Module : 调用SQL的程序模块。
                        SQL Text :SQL 文本内容的一部分,完整内容需要查看【Complete List of SQL Text】。

                        Version Count主要用于描述同一个父游标下子游标的数量。

                        对于一条SQL语句而言,会同时存在一个父游标和至少一个子游标。父游标主要依赖于SQL文本内容(必须完全一致,即空格、大小写、注释等不同都会被认为是不同的SQL),不同用户会话的执行SQL语句只要文本内容相同的,就会共享同一个父游标。对于子游标而言,即使执行相同的SQL语句,也可能因为执行用户的不同,或者访问的对象有所不同而不同。另外,由于优化器设置、绑定变量值等情况,也可能导致同一个SQL存在多个子游标。


                        后续文章更加精彩,欢迎关注本公众号。

                        ——End——


                        专注于技术不限于技术!

                        用碎片化的时间,一点一滴地提高数据库技术和个人能力。

                        欢迎关注!

                        数据库性能调优(性能调查方法):

                        Oracle性能调查之ASH(一)

                        Oracle性能调查之ASH(二)

                        Oracle性能调查之AWR(一)

                        文章转载自SQL和数据库技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论