“enq: TM - contention”锁引起数据库卡死

来源:互联网 发布:开票软件金税盘版价格 编辑:程序博客网 时间:2024/05/19 22:07

基本要素

         用户告知数据库迁移后,在发送医嘱的时候,有锁表情况,导致全院业务受影响,希望分析并解决。

问题分析

         查看ASH报告,如下:

CPUs           SGA Size       Buffer Cache        Shared Pool    ASH Buffer Size---- ------------------ ------------------------------------ ------------------ 120   101,943M (100%)    81,920M(80.4%)      9,216M (9.0%)      240.0M (0.2%)           Analysis Begin Time:  07-4月 -1508:39:41           Analysis End Time:  07-4月 -1509:09:41                 Elapsed Time:        30.0 (mins)           Begin Data Source:  V$ACTIVE_SESSION_HISTORY              End Data Source:   V$ACTIVE_SESSION_HISTORY                 Sample Count:     184,994     Average Active Sessions:     102.77 Avg. Active Session per CPU:       0.86                Report Target:   None specified Top User Events                DB/Inst: ZLHIS/zlhis3  (4月  07 08:39 to 09:09)                                                               Avg ActiveEvent                               Event Class        % Event   Sessions-------------------------------------------------- ---------- ----------enq: TM - contention                Application          93.47      96.07CPU + Wait for CPU                  CPU                   3.18       3.27enq: TX - row lock contention       Application           2.81       2.88         -------------------------------------------------------------      


         可以看到,系统出现了严重的TM锁,TM锁是表级锁,如果出现,会引起严重的性能问题,接着需要分析下是什么对象导致,如下:

Top Event P1/P2/P3 Values      DB/Inst: ZLHIS/zlhis3  (4月  07 08:39 to 09:09) Event                          % Event  P1 Value, P2 Value, P3 Value % Activity------------------------------ ------------------------------------ ----------Parameter 1                Parameter 2                Parameter 3              ---------------------------------------------------- --------------------------enq: TM - contention             93.47     "1414332419","91048","0"      38.44name|mode                  object #                   table/partition                                                      "1414332419","90822","0"      34.22                                                                                                                           "1414332419","128417","0"      13.86                                                                                enq: TX - row lock contention     2.81 "1415053318","11206682","20"       0.30name|mode                  usn16 | slot             sequence                 


         这里我们可以获取很重要的信息,object_id,,如上,我们可以看到被锁的对象id分别是91048,90822,128417,我们通过dba_objects这张视图,去查找ID号分别位上面3个的对象,分别是3张表”病例XX明细”、”药品XX明细”、”检验XX记录”,这3张表都没有数据,但是有个共同的特别,对药品和医嘱2张表都有外键相连,但是该表外键上都没有单独索引。一般情况下如果主键列被更新,就会导致外键列被锁住,不加索引的外键列会造成严重的性能问题,所以除非你有十分的把握,否则还是在外键列上添加索引。

解决过程

         分别对以上3张表的外键添加单独的索引,注意,这里如果有包含外键列的复合索引,也要单独再建个索引。

0 0
原创粉丝点击