oracle死锁

MySQL中的锁

孤街醉人 提交于 2019-11-29 02:02:16
MySQL中的锁 https://www.cnblogs.com/chenqionghe/p/4845693.html 锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。 概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。 MySQL大致可归纳为以下3种锁: 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 表级锁 MySQL表级锁有两种模式:表共享锁(Table Read Lock)和表独占写锁(Table Write Lock) 对MyISAM的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求 对MyISAM的写操作,则会阻塞其他用户对同一表的读和写操作 MyISAM表的读操作和写操作之间,以及写操作之间是串行的

Oracle 死锁处理

杀马特。学长 韩版系。学妹 提交于 2019-11-27 12:38:15
电脑日益不给力,网络也随时可能断掉,用PL/SQL执行操作多多少少出现正在处理SQL语句结果程序死掉了。导致这张表被锁掉,无法执行SQL操作。 如何解除死锁? 1)执行下面SQL,先查看哪些表被锁住了: select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; 2)查处引起死锁的会话寻找SID select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; 3)查出SID和SERIAL#: 查V$SESSION视图: SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID'; 这一步将得到PADDR 4)查V$PROCESS视图: SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR'; 这一步得到SPID 5)杀死进程 在数据库中,杀掉ORACLE进程: ALTER SYSTEM KILL

oracle死锁问题排查

拥有回忆 提交于 2019-11-26 19:39:59
这个是我之前在项目组里面,有一个功能模块写了一个很复杂的sql存储过程,每次做业务都调用存储过来处理逻辑。 当多人同时做业务调用这个存储过程的时候,页面没法响应一直卡死在哪里,后面请教过专业的dba排查过问题,是存储过程里面的某部分insert,update操作导致死锁了。 现在讲排查死锁的步骤总结如下: 1、查行锁: column event format a30 column sess format a20 set linesize 150 break on id1 skip 1 select decode(request,0,'Holder:',' Waiter:') || s.inst_id || ':' || s.sid||','|| s.serial# sess, id1, id2, lmode, request, l.type, ctime, s.sql_id, s.event,s.last_call_et from gv$lock l, gv$session s where (id1, id2, l.type) in (select id1, id2, type from gv$lock where request>0) and l.sid=s.sid and l.inst_id=s.inst_id order by id1, ctime desc, request

二、锁的分类及特性

限于喜欢 提交于 2019-11-25 20:48:31
【转】锁的分类及特性 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问时变得有序所设计的一种规则。 对于任何一种数据库来说都需要有相应的锁定机制,所以 MySQL 自然也不能例外。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样。 为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。 MySQL 各存储引擎使用了三种类型(级别)的锁定机制: 表级锁定 行级锁定 页级锁定 表级锁定(table-level) 表级别的锁定是 MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。 所以获取锁和释放锁的速度很快。由于表级锁定一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。 当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。 使用表级锁定的主要是 MyISAM,MEMORY,CSV 等一些非事务性存储引擎。   行级锁定(row-level) 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。 由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小