由上图可见有很多Insert into...操作在等待锁,且引起锁等待的对象都为TBL_QY_DATABASE表(即个人信息模块用到的数据表),问题总算清晰了许多,从ASH报告中的Top DB Objects可以更清楚看到JSQUANYUAN.INDEX_ISDELETE_BASE (INDEX)引起enq:TX-row lock contention。在数据库中表TBL_QY_DATABASE中查到INDEX_ISDELETE_BASE是一个位图索引,问题得到了进一步的解决,因为对于位图索引,只要有一个事务(用户操作)更新它,其它事务(用户操作)将被阻塞。所以造成了用户的操作被挂起,一直处于等待锁。反应到系统也就是用户所描述的慢。
经用户同意后kill用户的操作,删除INDEX_ISDELETE_BASE位图索引,用户再次使用系统,用户问题得以解决,再次查看当前用户的session,没有发现等待事件。
位图索引(位图索引,一个键指向多行,有时候是数以百计甚至更多。如果更新了一个位图索引键,那么这个键指向的数以百计的记录会与你实际更新的那一行一同被锁定。)虽然在某些情况下能够起到比B树索引更好的效果,但是需要注意的是,并不是在任何场合都有效,就像上述的情况,集中并发写入的环境中极度的糟糕,严重抑制并发性。所以在使用位图索引时应慎重考虑。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22962593/viewspace-667758/ ,如需转载,请注明出处,否则将追究法律责任。