楼主: wei-xh

[精华] AWR报告,很多索引的行级锁冲突。

[复制链接]
论坛徽章:
15
奥运会纪念徽章:击剑
日期:2008-07-17 14:58:53懒羊羊
日期:2015-03-04 14:52:11马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-04 10:35:17ITPUB9周年纪念徽章
日期:2010-10-08 09:34:01
31#
发表于 2010-6-22 16:15 | 只看该作者
Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
enq: TX - index contention          100,662     192,189   1909   56.0 Concurrenc
enq: US - contention                172,842      64,292    372   18.7      Other
latch: row cache objects            827,074      38,649     47   11.3 Concurrenc
db file sequential read           2,213,102      18,923      9    5.5   User I/O
CPU time                                         14,680           4.3

Segments by Row Lock Waits           DB/Inst: xxxx/xxxx  Snaps: 16921-16922                  
-> % of Capture shows % of row lock waits for each top segment compared                        
-> with total row lock waits for all segments captured by the Snapshot                        
                        
                                                                     Row                        
           Tablespace                      Subobject  Obj.          Lock    % of               
Owner         Name    Object Name            Name     Type         Waits Capture               
---------- ---------- -------------------- ---------- ----- ------------ -------               
xxxxx      xxxxxxxxxx xxxxxxxxxxxxx           INDEX       14,726   38.69                        
xxxxx      xxxxxxxxxx xxxxxxxxxxxxx           INDEX        5,271   13.85                        
xxxxx      xxxxxxxxxx xxxxxxxxxxxxx           INDEX        3,949   10.38                        
xxxxx      xxxxxxxxxx xxxxxxxxxxxxx           INDEX        3,736    9.82                        
xxxxx      xxxxxxxxxx xxxxxxxxxxxxx           INDEX        3,349    8.80                        
                        
这可能是索引块分裂引起的锁等待。

[ 本帖最后由 lsq_008 于 2010-6-22 16:18 编辑 ]

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
32#
发表于 2010-6-22 16:21 | 只看该作者
原帖由 lsq_008 于 2010-6-22 16:15 发表
.....                    
                        
这可能是索引块分裂引起的锁等待。


? 为什么这么说?

使用道具 举报

回复
论坛徽章:
15
奥运会纪念徽章:击剑
日期:2008-07-17 14:58:53懒羊羊
日期:2015-03-04 14:52:11马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-04 10:35:17ITPUB9周年纪念徽章
日期:2010-10-08 09:34:01
33#
发表于 2010-6-22 16:45 | 只看该作者
原帖由 zergduan 于 2010-6-22 16:21 发表


? 为什么这么说?



session 1:

SQL> create table t1(x number,y char(20),z date,q varchar2(4000)) tablespace users;

Table created.

SQL> create index t1_idx1 on t1(q,z)  tablespace users;

Index created.

SQL> begin
  2   for x in 1..500 loop
  3       insert into t1 values(1162,'1060000abcdefg', sysdate, rpad('x',2000,'x'));
  4   end loop;
  5   end;
  6   /   

PL/SQL procedure successfully completed.

session 2: 与session 1并发执行insert

SQL> begin
  2   for x in 1..500 loop
     insert into t1 values(1162,'1060000abcdefg', sysdate, rpad('x',2000,'x'));
end loop;
end;
/      3    4    5    6  

PL/SQL procedure successfully completed.

session 3:

session 1与session 2开始插入前:
SQL> select object_name,STATISTIC_NAME,value from v$segment_statistics where object_name in ('T1','T1_IDX1') and STATISTIC_NAME='row lock waits' order by 1;

OBJECT_NAME                                   STATISTIC_NAME                                                        VALUE
--------------------------------------------- ---------------------------------------------------------------- ----------
T1                                            row lock waits                                                            0
T1_IDX1                                       row lock waits                                                            0

插入后:
SQL> select object_name,STATISTIC_NAME,value from v$segment_statistics where object_name in ('T1','T1_IDX1') and STATISTIC_NAME='row lock waits' order by 1;

OBJECT_NAME                                   STATISTIC_NAME                                                        VALUE
--------------------------------------------- ---------------------------------------------------------------- ----------
T1                                            row lock waits                                                            0
T1_IDX1                                       row lock waits                                                            3

使用道具 举报

回复
论坛徽章:
15
奥运会纪念徽章:击剑
日期:2008-07-17 14:58:53懒羊羊
日期:2015-03-04 14:52:11马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-04 10:35:17ITPUB9周年纪念徽章
日期:2010-10-08 09:34:01
34#
发表于 2010-6-22 16:47 | 只看该作者
其实这个row lock wait往往与enq: TX - index contention 伴随产生

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
35#
发表于 2010-6-22 16:47 | 只看该作者
good~!

使用道具 举报

回复
论坛徽章:
21
奔驰
日期:2013-08-06 15:23:05日产
日期:2013-08-07 22:56:38蜘蛛蛋
日期:2012-12-29 19:15:08奥迪
日期:2013-08-07 17:02:24数据库板块每日发贴之星
日期:2010-06-28 01:01:03奥迪
日期:2013-08-13 10:10:28本田
日期:2013-11-20 15:17:02优秀写手
日期:2013-12-18 09:29:08玉兔
日期:2014-03-04 16:47:17铁扇公主
日期:2012-02-21 15:02:40
36#
 楼主| 发表于 2010-6-22 21:43 | 只看该作者

回复 #33 lsq_008 的帖子

好厉害!真是学习了。

使用道具 举报

回复
论坛徽章:
21
奔驰
日期:2013-08-06 15:23:05日产
日期:2013-08-07 22:56:38蜘蛛蛋
日期:2012-12-29 19:15:08奥迪
日期:2013-08-07 17:02:24数据库板块每日发贴之星
日期:2010-06-28 01:01:03奥迪
日期:2013-08-13 10:10:28本田
日期:2013-11-20 15:17:02优秀写手
日期:2013-12-18 09:29:08玉兔
日期:2014-03-04 16:47:17铁扇公主
日期:2012-02-21 15:02:40
37#
 楼主| 发表于 2010-6-22 21:47 | 只看该作者
原帖由 zergduan 于 2010-6-22 14:58 发表
并发更新非唯一索引字段 row lock waits发生在table上,不在索引上~ 可以试验证明~



学习了。

使用道具 举报

回复
论坛徽章:
21
奔驰
日期:2013-08-06 15:23:05日产
日期:2013-08-07 22:56:38蜘蛛蛋
日期:2012-12-29 19:15:08奥迪
日期:2013-08-07 17:02:24数据库板块每日发贴之星
日期:2010-06-28 01:01:03奥迪
日期:2013-08-13 10:10:28本田
日期:2013-11-20 15:17:02优秀写手
日期:2013-12-18 09:29:08玉兔
日期:2014-03-04 16:47:17铁扇公主
日期:2012-02-21 15:02:40
38#
 楼主| 发表于 2010-6-22 22:09 | 只看该作者
原帖由 lsq_008 于 2010-6-22 16:47 发表
其实这个row lock wait往往与enq: TX - index contention 伴随产生

这个
begin
  for x in 1..2000 loop
      insert into t1 values(1162,'1060000abcdefg', sysdate, rpad('x',2000,'x'));
  end loop;
  end;
  /   
我在两个会话同时进行,用10046 level12跟踪一下,产生的等待很多啊。可是我不太同意产生的锁竞争是由于索引块分裂导致的,我一直理解的索引块分裂是由于插入的值处于索引块里键值的中间值,而实验里的数据都是一样大小的。因此在进行的插入的时候,如果索引块容纳不了这个索引键值了,就会找一个新的块来插入,而不会去分裂索引块。

不过查看文档对于enq:TX - index contention的解释,确实是由于索引块分裂导致的。
-------------------------------------------------------------------------------------------------------------
Waits for TX in mode 4 also occur when a transaction inserting a row in an index has to wait for the end of an index block split being done by another transaction. This type of TX enqueue wait corresponds to the wait event enq: TX - index contention.
-------------------------------------------------------------------------------------------------------------
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                        15        0.24          0.64
  enq: HW - contention                           18        1.69          5.77
  read by other session                           1        0.00          0.00
  buffer busy waits                              35        1.00          5.72
  enq: TX - index contention                     11        0.01          0.03
  enq: TX - contention                            3        2.51          4.54
  rdbms ipc reply                                26        0.30          0.74
  log buffer space                               18        0.41          2.97
  control file sequential read                   95        0.25          2.54
  Data file init write                           45        0.19          1.49
  db file single write                            5        0.01          0.04
  control file parallel write                    15        0.04          0.08
  enq: TX - allocate ITL entry                    2        0.00          0.00
  buffer deadlock                                 3        0.00          0.00
  latch: redo allocation                          1        0.00          0.00
  enq: US - contention                            1        0.00          0.00
  latch: cache buffers lru chain                  1        0.00          0.00
  log file switch completion                      3        0.99          1.22
  log file switch (checkpoint incomplete)         3        1.01          2.60
  latch: cache buffers chains                     1        0.00          0.00


[ 本帖最后由 wei-xh 于 2010-6-22 22:31 编辑 ]

使用道具 举报

回复
论坛徽章:
40
技术图书徽章
日期:2023-02-28 10:16:02暖羊羊
日期:2015-02-10 17:19:24马上有房
日期:2015-01-12 10:57:17ITPUB社区OCM联盟徽章
日期:2014-08-27 17:33:52青年奥林匹克运动会-帆船
日期:2014-08-27 13:50:412014年世界杯参赛球队: 哥伦比亚
日期:2014-07-10 14:10:592014年世界杯参赛球队:墨西哥
日期:2014-06-24 10:38:072014年世界杯参赛球队: 加纳
日期:2014-06-23 13:12:032014年世界杯参赛球队: 美国
日期:2014-05-21 08:18:36沸羊羊
日期:2015-03-04 14:51:52
39#
发表于 2010-6-22 22:57 | 只看该作者
原来这样啊

使用道具 举报

回复
论坛徽章:
15
奥运会纪念徽章:击剑
日期:2008-07-17 14:58:53懒羊羊
日期:2015-03-04 14:52:11马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-04 10:35:17ITPUB9周年纪念徽章
日期:2010-10-08 09:34:01
40#
发表于 2010-6-23 08:48 | 只看该作者
原帖由 wei-xh 于 2010-6-22 22:09 发表

这个
begin
  for x in 1..2000 loop
      insert into t1 values(1162,'1060000abcdefg', sysdate, rpad('x',2000,'x'));
  end loop;
  end;
  /   
我在两个会话同时进行,用10046 level12跟踪一下,产生的等待很多啊。可是我不太同意产生的锁竞争是由于索引块分裂导致的,我一直理解的索引块分裂是由于插入的值处于索引块里键值的中间值,而实验里的数据都是一样大小的。因此在进行的插入的时候,如果索引块容纳不了这个索引键值了,就会找一个新的块来插入,而不会去分裂索引块。
不过查看文档对于enq:TX - index contention的解释,确实是由于索引块分裂导致的。
-------------------------------------------------------------------------------------------------------------
Waits for TX in mode 4 also occur when a transaction inserting a row in an index has to wait for the end of an index block split being done by another transaction. This type of TX enqueue wait corresponds to the wait event enq: TX - index contention.
-------------------------------------------------------------------------------------------------------------
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                        15        0.24          0.64
  enq: HW - contention                           18        1.69          5.77
  read by other session                           1        0.00          0.00
  buffer busy waits                              35        1.00          5.72
  enq: TX - index contention                     11        0.01          0.03
  enq: TX - contention                            3        2.51          4.54
  rdbms ipc reply                                26        0.30          0.74
  log buffer space                               18        0.41          2.97
  control file sequential read                   95        0.25          2.54
  Data file init write                           45        0.19          1.49
  db file single write                            5        0.01          0.04
  control file parallel write                    15        0.04          0.08
  enq: TX - allocate ITL entry                    2        0.00          0.00
  buffer deadlock                                 3        0.00          0.00
  latch: redo allocation                          1        0.00          0.00
  enq: US - contention                            1        0.00          0.00
  latch: cache buffers lru chain                  1        0.00          0.00
  log file switch completion                      3        0.99          1.22
  log file switch (checkpoint incomplete)         3        1.01          2.60
  latch: cache buffers chains                     1        0.00          0.00


索引块分裂分为90-10和50-50的分裂,当一个索引数据块满了的时候,需要一个新的数据块来容纳新插入的数据,这也是索引块分裂,90-10的分裂

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表