热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库出现enq:TX-rowlockcontention的问题

数据库出现enq:TX-rowlockcontention的问题今天上午过来,做awr报告数据库出现了很多enq:TX-rowlockcontention的等待事件,以前从来没有过的,感觉很奇怪。查询gv$session中的等待事件[sql]scrac1...SyntaxHigh

数据库出现enq:TX-row lock contention的问题
 
今天上午过来,做awr报告数据库出现了很多enq: TX - row lock contention的等待事件,以前从来没有过的,感觉很奇怪。查询gv$session中的等待事件
[sql] 
scrac1/sys@JSCN> select event,count(*) from gv$session group by event;  
    www.2cto.com  
EVENT                                                              COUNT(*)  
---------------------------------------------------------------- ----------  
SQL*Net message from client                                             275  
Streams AQ: waiting for messages in the queue                             2  
ASM background timer                                                      2  
wait for unread message on broadcast channel                              1  
gcs remote message                                                       12  
ges remote message                                                        2  
jobq slave wait                                                           3  
rdbms ipc message                                                        34  
smon timer                                                                2  
pmon timer                                                                2  
Streams AQ: qmn slave idle wait                                           3  
class slave wait                                                          2  
PX Deq: reap credit                                                       2  
PX Deq: Execution Msg                                                     1  
Streams AQ: waiting for time management or cleanup tasks                  2  
Streams AQ: qmn coordinator idle wait                                     2  
DIAG idle wait                                                            2  
  
17 rows selected.  
 
在结果没有出现该等待事件,我们去ash中在看看
[sql] 
scrac1/sys@JSCN> select SAMPLE_TIME,SESSION_ID,USER_ID,SQL_ID,EVENT,CURRENT_OBJ#,CURRENT_FILE#,CURRENT_BLOCK#  from GV_$ACTIVE_SESSION_HISTORY  
where event like &#39;enq: TX%&#39; and  module=&#39;JDBC Thin Client&#39; and rownum<=10;    2  
  
SAMPLE_TIME                    SESSION_ID    USER_ID SQL_ID        EVENT                                                            CURRENT_OBJ# CURRENT_FILE# CURRENT_BLOCK#  
------------------------------ ---------- ---------- ------------- ---------------------------------------------------------------- ------------ ------------- --------------    www.2cto.com  
02-AUG-12 03.46.26.854 PM            3120         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3139         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3158         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3186         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3194         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3197         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3198         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3201         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510    www.2cto.com  
02-AUG-12 03.46.26.854 PM            3212         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
02-AUG-12 03.46.26.854 PM            3213         59 a209wq32zy3jw enq: TX - row lock contention                                           58359          1024            510  
 
结果发现很多的enq: TX - row lock contention等待事件,都是昨天的,这个是怎么回事,这个需要我们详细查看GV_$ACTIVE_SESSION_HISTORY表中的字段
首先,我们最容易想到的是sql_ID字段,查询
select * from V$SQL where sql_id=&#39;a209wq32zy3jw&#39;;
你妹啊,竟然是没有,不会啊,才昨天的sql,应该不会被重share pool中删掉啊,想了想,由于我们这个是rac会不会是连得另外一个节点啊
[sql] 
select * from GV_$SQL where sql_id=&#39;a209wq32zy3jw&#39;;  
scrac1/sys@JSCN> select INST_ID,SQL_TEXT from GV_$SQL where sql_id=&#39;a209wq32zy3jw&#39;;  
  
   INST_ID    www.2cto.com  
----------  
SQL_TEXT  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
         1  
update QUARTZ.TASK_LOG      SET TASK_ID = :1,                       STATUS = :2,                       RESULT_DESC = :3,                       START_TIME = :4,                       END_TIME = :5  
 where LOG_ID = :6  
  
         1  
update QUARTZ.TASK_LOG      SET TASK_ID = :1,                       STATUS = :2,                       RESULT_DESC = :3,                       START_TIME = :4,                       END_TIME = :5  
 where LOG_ID = :6  
 
这个表和sql都很奇怪,之前我们并没有看到过,GV_$ACTIVE_SESSION_HISTORY中还有一个USER_ID=59
[sql] 
scrac1/sys@JSCN> select USERNAME,USER_ID,CREATED  from dba_users where  USER_ID=&#39;59&#39; ;
    www.2cto.com  
USERNAME                          USER_ID CREATED  
------------------------------ ---------- ------------  
QUARTZ                                 59 25-JUN-12  
查看到底是那个表出现了锁等待
[sql] 
scrac1/sys@JSCN> select * from dba_objects where object_id=&#39;58359&#39;;  
  
OWNER                          OBJECT_NAME                    SUBOBJECT_NAME                  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED      LAST_DDL_TIM TIMESTAMP           STATUS  T G S  
------------------------------ ------------------------------ ------------------------------ ---------- -------------- ------------------- ------------ ------------ ------------------- ------- - - -  
QUARTZ                         TASK_LOG                                                           58359          58359 TABLE               02-AUG-12    02-AUG-12    2012-08-02:14:33:28 VALID   N N N  
 
想起来了,昨天他们一直再用这个用在做定时任务,在不停的测试。所以产生的。到此原因已经查明。
如果是在session中出现此类问题,解决方法有:
解决方法:
 
1:通过v$session找到BLOCK=1的用户,告知用户提交事务
2:通过sid找到pid,kill掉该进程
3:更改sql语句,SELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME = :1 FOR UPDATE no wait
 
一般如果是现网中出现了大量类似的问题,排除人为原因,那么就要检查应用了
  www.2cto.com  
再看看官网上关于TX - row lock contention类容
http://docs.oracle.com/cd/B19306_01/server.102/b14211/instance_tune.htm#sthref761
10.3.7.2.4 TX enqueue
 
These are acquired exclusive when a transaction initiates its first change and held until the transaction does a COMMIT or ROLLBACK.
    Waits for TX in mode 6: occurs when a session is waiting for a row level lock that is already held by another session. This occurs when one user is updating or deleting a row, which another session wishes to update or delete. This type of TX enqueue wait corresponds to the wait event enq: TX - row lock contention.
    The solution is to have the first session already holding the lock perform a COMMIT or ROLLBACK.
    Waits for TX in mode 4 can occur if the session is waiting for an ITL (interested transaction list) slot in a block. This happens when the session wants to lock a row in the block but one or more other sessions have rows locked in the same block, and there is no free ITL slot in the block. Usually, Oracle dynamically adds another ITL slot. This may not be possible if there is insufficient free space in the block to add an ITL. If so, the session waits for a slot with a TX enqueue in mode 4. This type of TX enqueue wait corresponds to the wait event enq: TX - allocate ITL entry.
    The solution is to increase the number of ITLs available, either by changing the INITRANS or MAXTRANS for the table (either by using an ALTER statement, or by re-creating the table with the higher values).
    Waits for TX in mode 4 can also occur if a session is waiting due to potential duplicates in UNIQUE index. If two sessions try to insert the same key value the second session has to wait to see if an ORA-0001 should be raised or not. This type of TX enqueue wait corresponds to the wait event enq: TX - row lock contention.
    The solution is to have the first session already holding the lock perform a COMMIT or ROLLBACK.  www.2cto.com  
    Waits for TX in mode 4 is also possible if the session is waiting due to shared bitmap index fragment. Bitmap indexes index key values and a range of ROWIDs. Each &#39;entry&#39; in a bitmap index can cover many rows in the actual table. If two sessions want to update rows covered by the same bitmap index fragment, then the second session waits for the first transaction to either COMMIT or ROLLBACK by waiting for the TX lock in mode 4. This type of TX enqueue wait corresponds to the wait event enq: TX - row lock contention.
    Waits for TX in Mode 4 can also occur waiting for a PREPARED transaction.
    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.
 
10.3.7 enqueue (enq:) waits
 
Enqueues are locks that coordinate access to database resources. This event indicates that the session is waiting for a lock that is held by another session.
 
The name of the enqueue is included as part of the wait event name, in the form enq: enqueue_type - related_details. In some cases, the same enqueue type can be held for different purposes, such as the following related TX types:
 
    enq: TX - allocate ITL entry
    enq: TX - contention
    enq: TX - index contention
    enq: TX - row lock contention
  www.2cto.com  
The V$EVENT_NAME view provides a complete list of all the enq: wait events.
 
You can check the following V$SESSION_WAIT parameter columns for additional information:
 
    P1 - Lock TYPE (or name) and MODE
    P2 - Resource identifier ID1 for the lock
    P3 - Resource identifier ID2 for the lock
 
 
作者 RuleV5

推荐阅读
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何在 FireDAC 环境下实现 FDMEMTable 字段的自动获取,为开发人员提供便捷的数据处理方式。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • openGauss每日一练:第6天 - 模式的创建、修改与删除
    本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 深入解析三大范式与JDBC集成
    本文详细探讨了数据库设计中的三大范式,并结合Java数据库连接(JDBC)技术,讲解如何在实际开发中应用这些概念。通过实例和图表,帮助读者更好地理解范式理论及其在数据操作中的重要性。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 本文探讨了在Oracle数据库中,动态SQL语句的执行及其对事务管理的影响,特别是关于回滚操作的有效性。重点讨论了一个具体场景:将预警短信从当前表迁移到历史表时遇到的字段长度不匹配问题及相应的异常处理。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
author-avatar
紫木之阁_229
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有