设为首页 收藏本站
查看: 241|回复: 0

[经验分享] Oracle性能分析7:创建索引

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-24 10:00:11 | 显示全部楼层 |阅读模式


在创建索引时,我们往往希望能够预估索引大小,以评估对现有工程环境的影响,我们也希望创建索引的过程能够最小化的影响我们正在运行的工程环境,并能查看索引的状况。
预估索引大小

预估索引大小,最好的办法是在测试环境中创建它,测试环境最好包含完整的工程环境数据,否则只有通过部分数据来推算完整的索引大小。
如果不能搭建测试环境,Oracle提供了存储过程DBMS_SPACE.CREATE_INDEX_COST来估算索引的大小,下面是一个例子:


    declare  
      used_bytes  number(10);  
      alloc_bytes number(10);  
    begin  
      dbms_stats.gather_table_stats(user, 'HISTORYALARM');  
      dbms_space.create_index_cost('create index idx_historyalarm on historyalarm(position1)',  
                                   used_bytes      => used_bytes,  
                                   alloc_bytes     => alloc_bytes);  
      dbms_output.put_line('used_bytes : ' || used_bytes);  
      dbms_output.put_line('alloc_bytes : ' || alloc_bytes);  
    end;  


在计算索引大小的时候,你需要先收集表的统计信息,因为Oracle是根据表的数据信息来推算的,下面是输出的结果:


    used_bytes : 151994511  
    alloc_bytes : 251658240  

创建索引

在估算了索引大小后,如果没有问题,就可以开始实际的创建索引了:


    create index idx_historyalarm on historyalarm(position1) tablespace uep4x_fm_index  

创建索引的索引会对表加排他DDL锁(Exclusive DDL lock),这会防止其他会话得到他们自己的DDL锁或TM(DML)锁,也就是在创建索引期间你能够查询一个表,但是无法以任何方式修改这个表。这导致创建索引的操作在工程环境中实施时会存在问题,因此,Oracle企业版提供了在线创建索引的方式:


    create index idx_historyalarm on historyalarm(position1) tablespace uep4x_fm_index online  

online将改变具体创建索引的过程,Oracle不会再加一个排他DDL锁来防止数据修改,改为试图得到表上的一个低级(mode 2)TM锁,这将有效地防止其他DDL(data definition language,包括CREATE、ALTER、DROP等)操作发生,但允许DML(data manipulation language,包括SELECT、UPDATE、INSERT、DELETE)操作正常进行。在Oracle的内部,Oracle会将创建索引期间做的DML操作放到一个临时表中,等创建索引操作完成后,再将DML操作所做的修改同步到新的索引。这样就有效的解决了工程环境中实施的问题。
查看索引信息

可以通过上面的方式查看创建成功后的索引:


    select * from user_indexes where index_name = upper('idx_historyalarm')  

可以通过下面的方式显示所占用的空间的实际数额:


    select bytes from user_segments where segment_name = upper('idx_historyalarm')  

下面是输出结果,空间分配字节数的估计量略小于实际使用量:


    BYTES  
    --------------------------  
    293601280  

随着记录插入到表中,该索引将增加,对索引大小监控可以确保有足够的磁盘空间,以适应未来的数据增加需求。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25275-1-1.html 上篇帖子: Oracle性能分析6:数据访问方式之索引扫描 下篇帖子: Oracle性能分析8:使用索引 Oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表