`
winie
  • 浏览: 226421 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

怎么快速查找锁与锁等待

阅读更多
/*怎么快速查找锁与锁等待
   数据库的锁是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。
   这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
   可以通过alter system kill session ‘sid,serial#’来杀掉会话
*/
  SELECT /*+ rule */ s.username,
   decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',NULL) LOCK_LEVEL,
   o.owner,o.object_name,o.object_type,
   s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
   FROM v$session s,v$lock l,dba_objects o
   WHERE l.sid = s.sid
   AND l.id1 = o.object_id(+)
   AND s.username is NOT NULL

--如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待,以下的语句可以查询到谁锁了表,而谁在等待。
  SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
   o.owner,o.object_name,o.object_type,s.sid,s.serial#
   FROM v$locked_object l,dba_objects o,v$session s
   WHERE l.object_id=o.object_id
   AND l.session_id=s.sid
   ORDER BY o.object_id,xidusn DESC

  --以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN

  --[Q] 如何有效的删除一个大表(extent数很多的表)
  -- [A] 一个有很多(100k)extent的表,如果只是简单地用drop table的话,会很大量消耗CPU(Oracle要对fet$、uet$数据字典进行操作),可能会用上几天的时间,较好的方法是分多次删除extent,以减轻这种消耗:
   1. truncate table big-table reuse storage;
   2. alter table big-table deallocate unused keep 2000m ( 原来大小的n-1/n);
   3. alter table big-table deallocate unused keep 1500m ;
   ....
   4. drop table big-table;


-----查找什么sql锁表

Select Event, Count(*) From V$session_Wait Group By Event;
Select Sid, Event
From V$session_Wait
Where Event In ('enqueue', 'latch free', 'db file sequential read', 'library cache lock', 'db file scattered read', '
buffer busy waits');

Select /*+ ordered */
--s.sid,
--s.serial#,
--s.LAST_CALL_ET,
--s.username,
--p.spid,
Sql.Sql_Text
--s.machine
From V$session s, V$process p, V$sqltext Sql
Where Sql.Address = s.Sql_Address And Sql.Hash_Value = s.Sql_Hash_Value And s.Sid = &Sid And s.Paddr = p.Addr And
s.Status = 'ACTIVE' And s.Username Is Not Null And s.Username In ('DEVELOP', 'NEVA2', 'UPTEL2H', 'UPTEL2L', 'GJ')
Order By s.Username, s.Sid, s.Serial#, Sql.Piece

Select * From v$locked_object
分享到:
评论

相关推荐

    快速查找oracle锁对象

    在Oracle数据库管理中,"快速查找Oracle锁对象"是一个关键任务,特别是在处理并发事务和解决性能问题时。当多个用户或进程同时访问同一资源时,可能会出现锁冲突,导致某些事务等待,影响数据库的正常运行。了解如何...

    怎样快速查出Oracle_数据库中的锁等待

    "快速查出Oracle数据库中的锁等待" Oracle数据库中的锁等待是一种常见的问题,它会影响到系统的性能和可用性。锁等待的出现是由于系统对数据的一致性和安全性的保护机制,系统在对数据库中的数据进行操作时,会对...

    orcale常用命令

    1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>sqlplus SQL>connect internal SQL>startup SQL>quit b、关闭ORACLE系统 ...SQL*Plus: Release 9.2....

    快速查出Oracle数据库中锁等待的方法

    在Oracle数据库管理中,了解如何快速查出锁等待是至关重要的,特别是在大型系统中,因为锁机制用于确保数据一致性,防止并发操作导致的数据冲突。在Oracle中,有多种类型的锁,包括只读锁、排它锁和共享排它锁,分别...

    oracle由于对象被锁住无法编译处理

    4. **调整锁超时设置**:在Oracle参数文件中,可以调整`_row_lock_wait_timeout`参数,增加锁等待时间,避免过早触发错误。 总之,“由于对象被锁住无法编译处理”的问题虽然常见,但通过合理利用Oracle提供的工具...

    Oracle数据库性能优化实务_闩锁及闩锁优化.pptx

    当遇到阻塞问题时,可以利用dba_waiters和dba_blockers来查找并分析阻塞情况。数据字典锁在执行如创建表这样的操作时,会涉及到sys.tab$和sys.obj$等数据字典表的更新,这些活动都会反映在v$lock中。 LATCH,或称作...

    Oracle数据库性能优化实务闩锁及闩锁优化.ppt

    如果闩锁不可用,将会等待一段时间,然后再次尝试获取闩锁。 Oracle数据库性能优化实务闩锁及闩锁优化是指在Oracle数据库中对性能的优化,以提高数据库的执行效率和稳定性。闩锁是一种机制,用于保护Oracle数据库的...

    Oracle分区表和锁的应用

    4. **实际应用**:例如,银行交易记录表可以根据交易日期进行范围分区,便于快速查找特定日期内的交易。 二、Oracle锁机制 1. **锁类型**: - **行级锁(ROW LOCK)**:锁定特定行,防止并发操作导致的数据不一致...

    oracle数据库中锁、序列、索引管理.docx

    它们提供了一种快速查找数据的方法,通过创建索引,数据库可以更快地定位到表中的特定行。Oracle支持B树索引、位图索引、函数索引等多种类型的索引。选择合适的索引类型和策略对于优化查询性能至关重要,但也需要...

    多线程文件搜索工具 源代码 可以快速查找文件

    本文将详细解析标题为“多线程文件搜索工具 源代码”的项目,探讨如何利用多线程来实现快速的文件搜索,并针对描述中提到的“按暂停时卡死”的问题进行分析。 首先,我们要理解多线程的基本概念。在单线程程序中,...

    Tedu五阶段Redis分布式锁

    3. **解锁**:业务逻辑执行完毕后释放锁,使其他等待的客户端可以继续尝试获取锁。 #### 四、Tedu五阶段Redis分布式锁详解 ##### 4.1 Redis锁命令:SETNX - **命令简介**:`SETNX key value` 是一个用于设置键值...

    数据库两大神器【索引和锁】1

    InnoDB存储引擎支持行级锁,包括共享锁(S锁)和独占锁(X锁),以及意向锁(IS锁和IX锁)。行级锁可以减少锁定的数据范围,提高并发性能。此外,InnoDB还提供了死锁检测和自动解决机制,以防止事务因等待对方释放...

    数据库相关知识了解(一)

    数据库索引是指在数据库表中的一种数据结构,用于快速查找和检索数据。索引的设计原则有: * 唯一性:索引必须是唯一的,每个索引对应一个唯一的值。 * 最左前缀原则:在创建索引时,选择最左边的列作为索引列。 * ...

    BLOG_【AWR分析】Oracle_lhr_队列等待之enq IV - contention案例.pdf

    - **enq: IV - contention解释**:在Oracle数据库中,enq: IV - contention指的是内部表的互斥锁等待。这里的IV代表“internal variable”,表示对内部变量的锁定。当多个会话试图访问同一内部资源时,可能会发生...

    MySQL运维-故障处理手册

    - 使用 `grep mysql /var/log/messages` 查找与MySQL相关的错误记录。 3. **coredump 分析:** - **背景:**当MySQL进程异常终止时,可能会产生core dump文件。 - **作用:**通过对core dump文件的分析,可以...

    mysql数据库面试题-130题

    MySQL使用B+树作为索引结构,因为它支持快速查询,由于数据排序和节点内元素数量较多,可以降低树的高度,提高查询效率,适合全表扫描和范围查找。 3. **锁**:锁是数据库管理系统中用于控制并发访问共享资源的机制...

    排查问题经验总结.docx

    在Windbg中,通过`~*kb`命令可以列出所有线程的堆栈信息,查找是否有大量线程处于等待锁的状态。一旦发现这种情况,就可以深入分析等待的锁和持有锁的线程,找出可能的死锁链。 对于死锁分析,关键在于理解...

    哈哈哈哈,阿里面试总结

    快速排序是对冒泡排序的一种改进,利用了二分查找思想,但不是一种稳定的排序算法。 二、Redis锁 Redis锁是 Redis 中的一种机制,用于实现分布式锁。锁的实现可以使用incr、setNX、set等命令。incr命令可以用来...

    Oracle行级锁的特殊用法简析

    4. **SKIP LOCKED** 子句:如果加上SKIP LOCKED,查询会跳过已经被锁定的行,继续查找未锁定的行,这样可以避免因等待被锁定的行而产生的阻塞。 以下是一些示例来展示如何使用这些选项: - `SELECT ... FOR UPDATE...

Global site tag (gtag.js) - Google Analytics