程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 位圖索引(Bitmap Index)與數據DML LOCK場景問題解析

位圖索引(Bitmap Index)與數據DML LOCK場景問題解析

編輯:JAVA綜合教程

位圖索引(Bitmap Index)與數據DML LOCK場景問題解析


背景:有同事反應某個RAC數據庫的delete語句執行慢的問題。(他這個delete語句,是通過4個應用並發執行的情景)。後面通過AWR報告和查詢
v$sqlarea a,v$session s, v$locked_object三個視圖,發現鎖問題和等待事件“enq: TX - row lock contention”,和大量delete語句等待。通過分析得出表中有位圖索引,--位圖索引,對於更新一條記錄都會導致鎖被應用到大量的記錄上,導致數據庫大量鎖等待事件-- 通過刪除位圖索引,解決其數據庫效率問題。

AWR真實場景報告如下:


目的:本文通過模擬實驗例子,來研究分析位圖索引引起的鎖等待問題。

1.數據場景模擬(建立表和位圖索引)

SQL> create table test(id number,col varchar2(20));
Table created.
SQL> create bitmap index idx_t_col on test(col);
Index created.

2.插入數據
insert into test values(1,'A');
insert into test values(2,'A');
insert into test values(3,'A');
insert into test values(4,'B');

3.查看模擬數據
SQL> select * from test;
ID COL
---------- --------------------
1 A
2 A
3 A
4 B

4.模擬多會話,鎖問題


這裡三個會話,傳達非常重要的一個規律。如果col值相同的話,不同行會被鎖定。
而Oracle數據庫非常自豪的一個特性就是並發處理,但是加上了位圖索引之後,鎖定范圍的擴大化會導致並發的dml操作出現wait event事件,會話被阻塞。

5.查看鎖等待事件


6.查看session對應的鎖等待語句


進一步確認猜測是正確,刪除位圖索引,很好的解決這次數據庫的性能問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved