开启3个session:
SQL> select sid from v$mystat where rownum=1;
SID
----------
29
SQL>
SQL> select sid from v$mystat where rownum=1;
SID
----------
35
SQL>
SQL> select sid from v$mystat where rownum=1;
SID
----------
38
SQL>
使用sessionID为29进行更新t表操作
SQL> update t set name='qq' where id = 2;
1 row updated.
SQL>
查询事务:select xidusn,xidslot,xidsqn,status from v$transaction; 5 30 1099 ACTIVE
说明当前存在一个活动的事务
下面是查询sessionID为29的连接所产生的事务信息:
select sid,type,id1,id2,
decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,
decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive')
request_mode,block
from v$lock
where sid=29;
SID, TYPE, ID1, ID2, LOCK_MODE, REQUEST_MODE, BLOCK
29 AE 100 0 Share None 0
29 TM745850 Row Exclusive None 0//表级锁 29 TX 327710 1099 Exclusive None 0//行级锁
SID表示sessionID,TYPE表示锁的类型,ID2表示事务槽被覆盖的次数,ID1中的信息包含两种信息:1.事务表 2.事务表中行
通过:
将ID1拆解
select trunc(327710/power(2,16)) as undo_blk#,bitand(327710,to_number('ffff','xxxx')) + 0 as slot#
from dual;
UNDO_BLK#, SLOT#
5 30//显示的是该事务的信息,这也说明了ID1表示了两种信息的说法。
LOCK_MODE表示锁的模式,REQUEST_MODE是否请求锁,BLOCK表示锁住哪个事务
select OWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE,CREATED,LAST_DDL_TIME,STATUS,NAMESPACE from dba_objects where object_id=74585;//被锁的对象
OWNER, OBJECT_NAME, OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, STATUS, NAMESPACE
SYS T 74585 TABLE 22-12月-14 04-1月 -15 VALID 1
对于TM锁来说,ID1表示被锁定的对象的对象ID,ID2始终为0
对于TX锁来说,ID1表示事务使用的回滚段编号以及在事务表中对应的记录编号,ID2表示该记录编号被重用的次数(wrap)
使用sessionID为35进行更新t表操作:
下面是查询sessionID为29、35的连接所产生的事务信息:
select sid,type,id1,id2,
decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,
decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive')
request_mode,block
from v$lock
where sid in(29,35)
order by sid;
SID, TYPE, ID1, ID2, LOCK_MODE, REQUEST_MODE, BLOCK
29 TM 74585 0 Row Exclusive None 0
29 AE 100 0 Share None 0 29 TX 327710 1099 Exclusive None 1//锁住了一个事务
35 TM 74585 0 Row Exclusive None 0
35 AE 100 0 Share None 0 35 TX 327710 1099 None Exclusive 0//请求一个排他锁,因为上面的29锁住了
使用sessionID为38进行更新t表操作:
查询v$enqueue_lock来获得锁定队列中的session信息:
select sid,type,
decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive')
request_mode
from v$enqueue_lock
where sid in(35,38);
SID, TYPE, REQUEST_MODE
35 AE None
38 AE None 35 TX Exclusive
38 TX Exclusive
可以知道sessionID为35,38的连接需要锁为X锁
查询几个锁之间的关系:
select a.sid blocker_sid,a.serial#,a.username as blocker_username,b.type,
decode(b.lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,
b.ctime as time_held,c.sid as waiter_sid,
decode(c.request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') request_mode,
c.ctime time_waited
from v$lock b, v$enqueue_lock c, v$session a
where a.sid = b.sid and b.id1= c.id1(+) and b.id2 = c.id2(+) and c.type(+) = 'TX' and b.type = 'TX' and b.block = 1
order by time_held, time_waited;
BLOCKER_SID, SERIAL#, BLOCKER_USERNAME, TYPE, LOCK_MODE, TIME_HELD, WAITER_SID, REQUEST_MODE, TIME_WAITED
29 557 SYS TX Exclusive 2452 38 Exclusive 274
29 557 SYS TX Exclusive 2452 35 Exclusive 712
BLOCKER_SID:锁的sessionID为29,BLOCKER_USERNAME:锁的用户名是sys,
TYPE:锁的类型为TX(行级锁)LOCK_MODE:锁的模型为排他锁,TIME_HELD:锁所持续的时间
WAITER_SID:该锁被哪个sessionID锁等待,REQUEST_MODE:请求锁的类型,TIME_WAITED:请求时间
通过上面的信息就可以知道某个连接所持有的锁时间,假如时间过长说明该连接存在问题,就可以杀掉该连接
alter system kill session '29,557';//第一个参数BLOCKER_SID,第二个为SERIAL#参数
一个事务修改多行,产生一个TX锁
select sid from v$mystat where rownum=1;
SQL> update t set name='rr' where id=2;
1 row updated.
SQL> update t set name='rr' where id=2;
1 row updated.
SQL> update t set name='rr' where id=2;
1 row updated.
SQL>
select sid,type,id1,id2,
decode(lmode,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_mode,
decode(request,0,'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive')request_mode,block
from v$lock
where sid=38;
SID, TYPE, ID1, ID2, LOCK_MODE, REQUEST_MODE, BLOCK
38 AE 100 0 Share None 0
38 TM 74585 0 Row Exclusive None 0
38 TX 327680 1099 Exclusive None 0
可以获得的TX锁定的总个数由初始化参数transactions决定,而可以获得的TM锁定的个数则由初始化参数dml_locks决定:
select name,value from v$parameter where name in('transactions','dml_locks');
NAME, VALUE
dml_locks 1084
transactions 271
查询资源的使用情况:
select resource_name as "R_N",current_utilization as "C_U",max_utilization as "M_U",initial_allocation as "I_U"
from v$resource_limit
where resource_name in('transactions','dml_locks');
R_N, C_U, M_U, I_U
dml_locks 1 1 1084
transactions 1 1 271
通过上面的参数可以知道dml_locks资源当前使用了1个而且最多的时候也只使用了1个,最大的资源数为1084
transactions同上,通过这个可以判断资源设置是否合理,假如M_U的值等于或者接近于I_U时说明需要增大I_U值因为:
可以获得的TX锁定的总个数由初始化参数transactions决定,而可以获得的TM锁定的个数则由初始化参数dml_locks决定
|
相关推荐
变电所防误操作闭锁装置基本原理及运行要求.doc
本资源深入解释MySQL事务和锁的原理,涵盖了事务的基本概念、ACID特性、事务隔离级别以及MySQL中的锁类型、锁粒度等内容。通过实例和案例分析,详细讲解了事务的并发控制、隔离级别对数据一致性的影响,以及锁的使用...
系统的不断扩大,分布式锁是最基本的保障。与单机的多线程不一样的是,分布式跨多个机器。线程的共享变量无法跨机器。 为了保证一个在高并发存场景下只能被同一个线程操作,java并发处理提供ReentrantLock或...
分布式锁的基本概念 基本概念 * 多任务环境中才需要 * 任务都需要对同一共享资源进行写操作; * 对资源的访问是互斥的(串行化) 状态 * 任务通过竞争获取锁才能对该资源进行操作(①竞争锁); * 当有一个任务...
CPU在内核中运行时并不是处处不可抢占的,内核中存在一些空隙,在这时进行抢占是安全的,内核抢占补丁的基本原理就是将SMP可并行的代码段看成是可以进行内核抢占的区域。2.4内核正好细化了多CPU下的内核线程同步机构...
接下来我们一起来看看,多客户端获取及释放zk分布式锁的整个流程及背后的原理。 首先大家看看下面的图,如果现在有两个客户端一起要争抢zk上的一把分布式锁,会是个什么场景? 如果大家对zk还不太了解,建议先百度...
MySQL优化学习总结:索引原理、基本架构、日志实现、执行计划、锁机制、读取分离等
一般的读写锁代码,都是使用了临界体作为基本锁,这样就出现了在一个线程里获取临界体,但是却在另一个线程里释放临界体的问题。临界体是线程相关锁,必须做到获取和释放都在同一个线程。这个读写锁使用临界体和事件...
除上述基本的密码锁功能外,还具有掉电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。本系统成本低廉,功能实用。 系统总体设计和主要芯片介绍 系统主要芯片有STC89C52,AT24C02及液晶等 电子密码锁实现...
STM32单片机原理,可以用于开发智能锁,智能灯炮,智能插座,
Redisson分布式锁 之前的基于注解的锁有一种锁是基本redis的分布式锁,这篇文章主要介绍了Java使用Redisson分布式锁实现原理,非常具有实用价值,需要的朋友可以参考下
本系统由单片机系统、矩阵键盘、LED显示和... 本系统介绍了一种新型电子安全密码锁的应用背景、基本功能和要求,根据一种新型的编码状态机耦合工作原理,建立了电子锁的结构模型,给出了系统设计方案、硬件设计及程序流程
对电子密码锁的基本原理进行仿真设计
该资源设计内容包含遥控车位锁原理图,PCD,以及完整程序; 资料包括完整题目,芯片资料,以及所用到的单片机资料。 简单介绍题目内容: 运用所学的数字逻辑电路、模拟电子电路、单片机、测控电路等的基本知识,...
软件具备失窃警报功能,当开启该功能,工作原理为:手机锁闭后将手机装入口袋或包内,感应器处于遮挡状态,失窃警报准备时过后会响一声准备好音,表示手机处于准备警报状态,当手机再次从口袋或者包内拿出,距离感应...
硬件加密锁,俗程“加密狗”,对于加密狗的破解大致可以分为三种方法,一种是通过硬件克隆或者复制,一种是通过SoftICE等Debug工具调试跟踪解密,一种是通过编写拦截程序修改软件和加密狗之间的通讯。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图1-2所示。 图2-2单片机控制方案 通过比较以上两种方案,...
基本要求: 1.系统正常状态为等待6位密码输入状态,密码通过键盘输入,若密码正确,则 将锁打开(LED绿灯亮)(输入密码过程数码管以“*”显示输入位数),开锁后数码管以“0”闪烁显示,表明锁已打开: 2.通过特定按键...
锁相放大器的基本原理是采用频谱迁移法抑制噪声,用调制器将交流或慢变信号的频谱迁移到调制频率处,再进行放大,以避开 1/f 噪声的不利影响。锁相放大器利用相敏检测技术,利用外部或内部产生的参考信号与被测信号...
在本课程中个,将详细介绍JVM的基本原理、组成以及工作方式,并配合实际案例,介绍相关的调优技巧。 课程大纲: 第一课 初识JVM JVM分类 Java语言规范 JVM规范 介绍JVM的基本知识和发展历史,并介绍了Java语言...