侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Oracle索引质量介绍和分析脚本分享

数据库  /  管理员 发布于 6年前   150

索引质量的高低对数据库整体性能有着直接的影响。良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置。因此对于索引在设计之初需要经过反复的测试与考量。那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能。下面给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本。

1、查看索引质量

--获取指定schema或表上的索引质量信息报告gx_adm@CABO3> @idx_qualityEnter value for input_owner: GX_ADMEnter value for input_tbname: CLIENT_TRADE_TBL -->如果我们省略具体的表名则会输出整个schema的索引质量报告     Table   Table   Index Data Blks Leaf Blks    Clust IndexTable   Rows   Blocks Index           Size MB  per Key  per Key    Factor Quality------------------------- ------------ ---------- ------------------------- ------- --------- --------- ------------ -------------CLIENT_TRADE_TBL       6,318,035   278488 I_TDCL_ARC_STL_DATE_STOCK   62    312    13   171,017 5-Excellent I_TDCL_ARC_STL_DATE_CASH    62    318    13   174,599 5-Excellent I_TDCL_ARC_CANCEL_DATE     83    238     8   288,678 5-Excellent I_TDCL_ARC_INPUT_DATE     144    249    13   310,974 5-Excellent I_TDCL_ARC_TRADE_DATE     144    269    14   337,097 5-Excellent PK_CLIENT_TRADE_TBL      200     1     1   798,216 2-Good I_TDCL_ARC_GRP_REF_ID     144     1     1   811,468 2-Good UNI_TDCL_ARC_REF_ID      136     1     1   765,603 2-Good I_TDCL_ARC_CONTRACT_NUM    72     1     1   834,491 2-Good I_TDCL_ARC_SETTLED_DATE    61    299     5   380,699 1-Poor I_TDCL_ARC_ACC_NUM      184    624     3  3,899,446 1-Poor I_TDCL_ARC_PL_STK       176    218     1  4,348,804 1-Poor I_TDCL_ARC_INSTRU_ID     120   2,667     8  4,273,038 1-Poor--从上面的单表输出的索引质量可知,出现了4个处于Poor级别的索引,也就是说这些个索引具有较大的聚簇因子,几乎接近于表上的行了--对于这几个索引的质量还应结合该索引的使用频率来考量该索引存在的必要性--对于聚簇因子,只能通过重新组织表上的数据来,以及调整相应索引列的顺序得以改善       --查询单表上索引列的相关信息       gx_adm@CABO3> @idx_infoEnter value for owner: GX_ADMEnter value for table_name: CLIENT_TRADE_TBLTABLE_NAME        INDEX_NAME           CL_NAM        CL_POS STATUS  IDX_TYP     DSCD------------------------- ------------------------------ -------------------- ------ -------- --------------- ----CLIENT_TRADE_TBL     I_TDCL_ARC_ACC_NUM      ACC_NUM          1 VALID  NORMAL     ASC I_TDCL_ARC_CANCEL_DATE    CANCEL_DATE        1 VALID  NORMAL     ASC I_TDCL_ARC_CONTRACT_NUM   CONTRACT_NUM       1 VALID  NORMAL     ASC I_TDCL_ARC_GRP_REF_ID    GRP_REF_ID        1 VALID  NORMAL     ASC I_TDCL_ARC_INPUT_DATE    INPUT_DATE        1 VALID  NORMAL     ASC I_TDCL_ARC_INSTRU_ID     INSTRU_ID         1 VALID  NORMAL     ASC I_TDCL_ARC_PL_STK      STOCK_CD         1 VALID  NORMAL     ASC I_TDCL_ARC_PL_STK      PL_CD           2 VALID  NORMAL     ASC I_TDCL_ARC_SETTLED_DATE   SETTLED_DATE       1 VALID  NORMAL     ASC I_TDCL_ARC_STL_DATE_CASH   STL_DATE_CASH       1 VALID  NORMAL     ASC I_TDCL_ARC_STL_DATE_STOCK  STL_DATE_STOCK      1 VALID  NORMAL     ASC I_TDCL_ARC_TRADE_DATE    TRADE_DATE        1 VALID  NORMAL     ASC PK_CLIENT_TRADE_TBL     BUSINESS_DATE       1 VALID  NORMAL     ASC PK_CLIENT_TRADE_TBL     REF_ID          2 VALID  NORMAL     ASC UNI_TDCL_ARC_REF_ID     REF_ID          1 VALID  NORMAL     ASC--从上面的查询结果可知,当前表TRADE_CLIENT_TBL上含有13个索引,应该来说该表索引存在一定冗余。--大多数情况下,单表上6-7个索引是比较理想的。过多的索引导致过大的资源开销,以及降低DML性能。

2、索引创建的基本指导原则

     索引的创建应遵循精而少的原则
     收集表上所有查询的各种不同组合,找出具有最佳离散度的列(或主键列等)创建单索引
     对于频繁读取而缺乏比较理想离散值的列为其创建组合索引
     对于组合索引应考虑下列因素来制定合理的索引列顺序,以下优先级别由高到低来作为索引的前导列,第二列等等
           列被使用的频率
           该列是否经常使用“ = ”作为常用查询条件
           列上的离散度
           组合列经常按何种顺序排序
           哪些列会作为附件性列被添加 

3、索引质量分析脚本

--script name: idx_quality.sql   --Author : Leshami --Blog: http://blog.csdn.net/leshami --index quality retrievalSET LINESIZE 145SET PAGESIZE 1000SET VERIFY OFFCLEAR COMPUTESCLEAR BREAKSBREAK ON table_name ON num_rows ON blocksCOLUMN owner FORMAT a14 HEADING 'Index owner'COLUMN table_name FORMAT a25 HEADING 'Table'COLUMN index_name FORMAT a25 HEADING 'Index'COLUMN num_rows FORMAT 999G999G990 HEADING 'Table|Rows'COLUMN MB FORMAT 9G990 HEADING 'Index|Size MB'COLUMN blocks HEADING 'Table|Blocks'COLUMN num_blocks FORMAT 9G990 HEADING 'Data|Blocks'COLUMN avg_data_blocks_per_key FORMAT 999G990 HEADING 'Data Blks|per Key'COLUMN avg_leaf_blocks_per_key FORMAT 999G990 HEADING 'Leaf Blks|per Key'COLUMN clustering_factor FORMAT 999G999G990 HEADING 'Clust|Factor'COLUMN Index_Quality FORMAT A13 HEADING 'Index|Quality'--SPOOL index_quality SELECT i.table_name,     t.num_rows,     t.blocks,     i.index_name,     o.bytes / 1048576 mb,     i.avg_data_blocks_per_key,     i.avg_leaf_blocks_per_key,     i.clustering_factor,     CASE      WHEN NVL (i.clustering_factor, 0) = 0 THEN '0-No Stats'      WHEN NVL (t.num_rows, 0) = 0 THEN '0-No Stats'      WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) < 6 THEN '5-Excellent'      WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) BETWEEN 7 AND 11 THEN '4-Very Good'      WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) BETWEEN 12 AND 15 THEN '2-Good'      WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) BETWEEN 16 AND 25 THEN '2-Fair'      ELSE '1-Poor'     END      index_quality  FROM dba_indexes i, dba_segments o, dba_tables t  WHERE    --  i.index_name LIKE UPPER ('%&&1%') AND     i.owner = t.owner     AND i.table_name = t.table_name     AND i.owner = o.owner     AND i.index_name = o.segment_name     AND t.owner = UPPER('&input_owner')     AND t.table_name LIKE UPPER('%&input_tbname%')ORDER BY table_name,     num_rows,     blocks,     index_quality DESC;--SPOOL OFF;===========================================================================================--script name: idx_info.sql --get the index column information by specified tableset linesize 180col cl_nam format a20col table_name format a25col cl_pos format 9col idx_typ format a15SELECT b.table_name,      a.index_name,      a.column_name   cl_nam,      a.column_position cl_pos,      b.status,      b.index_type   idx_typ,      a.descend     dscdFROM  dba_ind_columns a, dba_indexes bWHERE a.index_name = b.index_name      AND owner = upper('&owner')      AND a.table_name LIKE upper('%&table_name%')ORDER BY 2, 4;


  • 上一条:
    Oracle 监控索引使用率脚本分享
    下一条:
    Oracle重建索引Shell脚本、SQL脚本分享
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客