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

Oracle的存储信息-段级统计信息

原创 eygle 2019-10-14
697

数据段中的数据最终在使用中会被用户访问,哪些表和索引会被频繁使用,哪些对象上存在频繁的逻辑读和物理读,这些信息对于性能优化具备极其重要的意义。Oracle数据库通过段级统计信息的收集来提供这方面的信息。


段级统计信息的收集和记录主要是通过以下几个动态性能视图实现的:V$SEGSTAT_NAME、V$SEGSTAT、V$SEGMENT_STATISTICS。


V$SEGSTAT_NAME视图记录了数据库收集段级统计信息的内容,在Oracle Database 10gR2中,以下信息会被不同程度的收集和采样:

SQL> select * from v$segstat_name;
STATISTIC# NAME                                                             SAM
---------- ---------------------------------------------------------------- ---
         0 logical reads                                                    YES
         1 buffer busy waits                                                NO
         2 gc buffer busy                                                   NO
         3 db block changes                                                 YES
         4 physical reads                                                   NO
         5 physical writes                                                  NO
         6 physical reads direct                                            NO
         7 physical writes direct                                           NO
         9 gc cr blocks received                                            NO
        10 gc current blocks received                                       NO
        11 ITL waits                                                        NO
        12 row lock waits                                                   NO
        14 space used                                                       NO
        15 space allocated                                                  NO
        17 segment scans                                                    NO


在Oracle Database 11gR2中,可记录的段级信息增加了以下三种:

STATISTIC# NAME                                                             SAM
---------- ---------------------------------------------------------------- ---
         6 physical read requests                                           NO
         7 physical write requests                                          NO
        11 optimized physical reads                                         NO


V$SEGMENT_STATISTICS包含了这些统计指标的采样,通过查询其中的信息,可以帮助我们找到哪些对象的物理读、逻辑读偏高等重要内容:

SQL> DESC V$SEGMENT_STATISTICS
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OWNER                                              VARCHAR2(30)
 OBJECT_NAME                                        VARCHAR2(30)
 SUBOBJECT_NAME                                     VARCHAR2(30)
 TABLESPACE_NAME                                    VARCHAR2(30)
 TS#                                                NUMBER
 OBJ#                                               NUMBER
 DATAOBJ#                                           NUMBER
 OBJECT_TYPE                                        VARCHAR2(18)
 STATISTIC_NAME                                     VARCHAR2(64)
 STATISTIC#                                         NUMBER
 VALUE                                              NUMBER


例如如下一条SQL可以帮助我们找到当前数据库中逻辑读最高的10个对象:

SQL> select *
  2    from (select object_name, statistic_name, value
  3            from V$SEGMENT_STATISTICS
  4           where statistic_name = 'logical reads'
  5           order by 3 desc)
  6   where rownum < 11;
 
OBJECT_NAME                    STATISTIC_NAME                                VALUE
------------------------------ ---------------------------------------- ----------
TOVERDUEDETAIL_PK              logical reads                             679489664
TMONTHOVERDUE_PRIMARYKEY       logical reads                             519297536
TLASTYE_PK                     logical reads                             451140976
TOVERDUEDETAIL                 logical reads                             345610752
TMONTHOVERDUE                  logical reads                             274533968
RATIFYTASK                     logical reads                             232831952
TLASTOVERDUE_PK                logical reads                             211762720
SYS_LOB0000056381C00085$$      logical reads                             176265312
TLASTYE                        logical reads                             154691600
CCODE                          logical reads                             145472848


这部分内容在AWR报告中更为详细的展现出来(关于AWR的详细内容请参考后面章节),以下是Oracle Database 11g中生成的AWR报告展示的段级统计信息内容:


image.png


我们就可以据此分析数据库中是否有部分对象的访问过于集中,等待过于频繁,例如对于ITL等待较高的对象,则可以考虑为其增加更多的事务槽,以下是一个AWR报告段级信息摘录,这部分信息对于性能分析诊断极其重要:


image.png


上图逻辑读最高的三个对象已经占有了系统整体逻辑读的45%左右,是值得分析和注意的。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论