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

[经验分享] Oracle:位图索引与死锁-1

[复制链接]

尚未签到

发表于 2016-8-3 15:01:01 | 显示全部楼层 |阅读模式
B 树索引更适合索引动态表的 OLTP 环境,而位图索引更适合在大型静态表上使用复杂查询的数据仓库环境。

bitmap索引特点:
      3.Bitmap索引允许键值为空
  B*Tree索引由于不记录空值,当基于is null的查询时,会使用全表扫描,
  而对位图索引列进行is null查询时,则可以使用索引.
  4.Bitmap索引对表记录的高效访问
  当使用count(XX),可以直接访问索引就快速得出统计数据.
  当根据位图索引的列进行and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,在访问数据之前可事先过滤数据.
  5.Bitmap索引对批量DML操作只需进行一次索引
  由于通过位图反映数据情况,批量操作时对索引的更新速度比B*Tree索引一行一行的处理快得多.
  6.Bitmap索引的锁机制
  对于B*Tree索引,insert操作不会锁定其它会话的DML操作.
  而位图索引,由于用位图反映数据,不同会话更新相同键值的同一位图段,insert、update、delete相互操作都会发锁定。
      创建语法很简单,就是在普通索引创建的语法中index前加关键字bitmap即可,例如:
  create bitmap index <index_name> on <table_name(column_name)>;
      
      看到这个现象,我的第一感觉是,他们是不是使用了位图索引,因为位图索引锁住的不止是一行而是一组数据,所以出现死锁的可能性大大增加。我打开了一份ORA-60 Trace文件,查看了SQL语句和锁的情况,更加确定了我的怀疑,估计是位图索引导致的问题。于是我问了负责开发的小王,是不是他们在这张表上使用了位图索引。小王想了想,说确实是。我说位图索引一般用在OLAP系统上,在变化频率特别高的环境下不能使用位图索引,必须使用普通索引,否则在高并发量的情况下,会出现较多的死锁,前台会报ORA-60错误。



bitmap的适用场合:
      1.位图索引是Oracle数据库在7.3版本中加入的,8i,9i企业版和个人版支持,标准版不支持.
  2.基于规则的优化器无法使用Bitmap索引
  3.适应于有大量重复值的列查询
  4.对于8i,9i版本,不适用于单行插入,适用于批量插入的数据,
  因为单行插入时,相同键值,每插入8行就会生成一行索引块中的位图段,即使相同的值.
  而批量插入时,相同键值只生成一个位图段.
  5.由于并发DML操作锁定的是整个位图段的大量数据行,所以位图索引主要是用于OLAP应用,也可以用于OLTP中主要为读操作的表.


下面分3种方式来讨论数据的插入:
  a.一次插入一行,插入多行后,一次提交;
  b.每插入一行,提交一次;
  c.批量插入方式,一次提交;
  对于第一种方式,观察位图索引的变化情况.

a.假设插入8行相同键值的数据,如果以每行方式插入,然后一次提交,则会生成8个位图
b.数据每行提交方式,与上面的情况相似,但有一点不一样,每提交一行,拷贝原来的位图,生成新的位图,并标记原来的位图为已删除
c.第三种方式,批量插入数据,相同键值,只生成一次位图,只有一个位图

所以,位图索引最好采用批量插入方式,这样,每个键值只生成一个位图.而单行数据插入方式,每个键值将每8行数据生成一个位图.
  10G的情况,则简单得多.
  上面3种方式,相同键值的插入,位图的生成是一样的,只有一个位图,并且,每次提交时,并不会删除以前的位图,而是直接修改对应键值的位图.

运维网声明 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-252372-1-1.html 上篇帖子: Oracle 保留字和关键字 下篇帖子: Oracle的日期时间范围查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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