`
- 浏览:
180894 次
- 性别:
- 来自:
武汉
-
近期遇到了不少并发和事务问题,总结如下
1.锁 必须在取数据之前。 现在的事务主要是通过锁数据并通过在后面的校验中验证状态实现的,
要注意,后面的验证数据一定要是加锁之后取出来的数据,比如验证订单状态能否进行当前操作时
要重新取一下订单。
2.锁的粒度
原则:粒度越小越好,但同时也要在不影响性能的情况下,考虑实现的方便和代码的结构性。
举例: 当仅仅时对订单进行操作时,不要锁住客户,但是由于下单时没有订单,这种情况下就要锁客户,续订和续订的修改是公用的方法,这样在这方法中就要判断什么时候要锁客户,什么时候要锁订单,导致多余的判断,代码结构不好。这个时候考虑所有订单操作都锁住客户表。
军哥原来提出过一个方法,就是专门提供一个表用来加锁,这中方法可以完全避免死锁的问题
不失为一种好的方法。
3.orcle 具有隐含锁,有些操作不需要加锁
ORACLE锁的类型在正常情况下,ORACLE会自动锁住需要加锁的资源以保护数据,这种锁是隐含的,叫隐含锁。下面指明了会产生隐含锁的SQL语句:
INSERT;UPDATE;DELETE;
4.同一个事务中可以加两次或两次以上的锁。
5.在事务外面加锁不起作用,加锁的forupdate 作为一条普通select 语句执行,下一个线程不会在锁的位置等待。
6.一些用于查询锁的sql,
应用场景,由于在测试并发时会经常用到一些锁表的问题。需要找出被什么人锁住,是在程序中锁住,还是在Pl/SQL
中锁住。
可以用如下的SQL 配合查询。
(1) 在BOSS 的查询,后面的是王英杰提供的查询。但是DMP的这几个系统表的权限没有开给我们。
select object_type,object_name,owner from dba_objects where object_id in (
select object_id from v$locked_object);
select * from v$session where username in ('FBACKOFFICE') order by status;
(2) SELECT c.sid,
c.serial#,
c.terminal || '-' || c.osuser || '-' || MODULE || ' hold ' ||
DO.object_type || ' ' || DO.object_name xx
FROM v$lock a, v$lock b, v$session c, dba_objects DO
WHERE b.type = 'TX'
AND a.sid = b.sid
AND c.sid = a.sid
AND DO.data_object_id = a.id1;
搜索结果如下:
1 202 22204 ALIBABA-11823-zhaobo.dingzhb-PL/SQL Developer hold TABLE CRM_CUSTOMER
分析下: lock 表 存当前所有的锁的情况,session 是当前访问数据库所有的用户session ,dba_objects 存放了所有表的信息,每个表作为一条记录,通过关联这三张表就可以搜索出所有的锁住表的记录
lock 的Type 有 TX TM 等 TX是记录锁,TM是表锁,由于锁表也是线锁表再锁记录,这样通过
限定b.type = 'TX'所有的锁都是能查找到的
至于搜索出的记录集比较容易看清楚:
c.terminal 终端机: 你的机器名
c.osuser :你的用户
DO.object_type :终端所用的工具,即你的PL/SQL或者程序。
DO.object_name :被锁的表名称
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
针对上述问题,本文从企业文化与价值观,内部质量控制体系,委托客户评价体系,人员招募和培训机制等方面对会计师事务所合并后应注意的问题进行了分析。同时,结合目前的监管环境,提出了一些建议。
防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这就出大问题: 如:要添加多条数据,程序要求必须...
sql server 事务和游标 能有效的处理一些平时不能处理的问题!
前段时间在国外看到一些老外在争论MySQL嵌套事务的场景必要性。 逗死我了, 这嵌套的鬼畜用法还有啥场景必要性。 跟以前的dba同事聊过, 得知,在任何场景下都不要使用MySQL嵌套的事务。 那么使用MySQL嵌套事务会...
安全性要求较高时,使用存储程序和函数为一些公共的操作 (程序员不是数据库管理员他可能不了解很多数据库的机制比如事务,错误回滚等.银行转帐问题可以解释.) 减轻客户端应用程序的负担 (让更多的操作由数据库...
sap基础知识学习,批处理,常用事务代码,权限管理等以及一些常见的问题的解决方法和步骤
附:内有弹出对话框,Action乱码处理和一些好技巧。 2008-5-28 修改: 今天修改了 applicationContext.xml,以后的事务控制就万事大吉了,里面有详细注释哦。 有什么问题可以给我留言 ^_^,大家一起进步! <!...
以下是一些解决MySQL中死锁问题的建议和方法: 监控死锁: 使用SHOW ENGINE INNODB STATUS命令来查看InnoDB存储引擎的状态,并查找死锁相关的日志信息。 启用innodb_print_all_deadlocks配置选项,将死锁信息记录到...
3、如果我们不考虑事务的隔离性,就会引发一些安全性的问题 (一)读的问题 (1)脏读:一个事务读到另外一个事务未提交的数据 (2)不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在前一个事务...
一些本地 JavaBeans 或 POJOs(Plain Old Java Objects),但还有很多是复杂的 N 层应用,他们 会使用商业或开源的应用服务器,使用很多框架,如远程的 Enterprise Java Beans(EJBs)、JMS (Java Messaging ...
文件中是一些较为具有挑战性的MySQL面试题及答案。在面试准备过程中,熟悉这些问题并理解其背后的概念和原理将有助于你在面试中展示自己的数据库知识和技能。同时,也建议深入学习和掌握MySQL的各个方面,以便更好地...
【Spring五个事务隔离级别和七个事务传播行为】 数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,...下面是我收集到一些关于Spring事务的问题,希望能帮助大家过关。
本文实例讲述了PostgreSQL数据库事务实现... 其它并发的事务是看不到在这些步骤之间的中间状态的,并且如果发生了一些问题, 导致该事务无法完成,那么所有这些步骤都完全不会影响数据库。PostgreSQL为每条事务创建一个
多并发情况下,获取空闲位置,例如档案库位置、票据号码等,如果不做并发控制会出现重号的出现,从几个角度分析如何处理并发问题。
而如果没有事务日志记录,DB2UDB中的一些据库恢复方法就不会存在。如果您还没有完全理解这些概念,也不必担忧。我将解释事务是什么以及事务日志记录背后的机制。然后,我将展示在系统崩溃或程序故障之后,如何使用...
话说2021年开始了一个基于ASP.NET Core 微服务的项目,谈到微服务 多库环境下 分布式事务、分库分表这些问题都是逃不开的,于是首先从ORM开始调研,需要考虑到一些重要的因素 **功能强大、支持多种数据库(并且行为...
但是我们在迁移的过程中难免会碰到如何将传统数据库的功能也迁移到Hadoop的问题,比如说事务。事务作为传统数据库很重要的一个功能,在Hive中是如何实现的呢?Hive的实现有什么不一样的地方呢?我们将传统数据库的...
主要介绍了Spring boot jpa 删除数据和事务管理的问题实例详解,涉及业务场景的一些知识和遇到的的问题,需要的朋友可以参考。
SQL事务浅析,在群里有人问过相关的问题,是由于一些语句没有考虑到,此文档帮助过很多人解决问题、
请备份该数据库的事务日志以释放一些日志空间。 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限。 在网上Google了很久,试了些...