数据库阻塞和锁

1.阻塞可以等待或者干掉一个

1.1当执行程序的时候前端如果正常流程没响应了;服务端也没见报错很大程度操作的数据再等另一个事务的处理。

1.2前端没响应还有个服务端的情形,起了一个事务更新了某条数据但是事务没提交,这时候又起了一个事务处理这条数据等待前面的事务提交导致程序走不下去,这种情况再手动操作jdbc的时候发生的概率大点,spring控制的话因为一个线程走的是一个事务规避了这种情形

A事务处理某条数据L1事务未结束锁未释放

B事务也处理数据L1需要等待A事务结束锁释放,不然B处理处于等待中

2.阻塞处理查找问题了,看看是程序问题还是手工操作问题

oracle 复制代码
--未提交事务的sql
select s.sid,
       s.username,
       s.osuser,
       s.program,
       to_char(s.LOGON_TIME, 'yyyymmdd hh24:mi:ss')       as LOGON_TIME,
       to_char(t.START_DATE, 'yyyymmdd hh24:mi:ss')       as START_DATE,
       s.status,
       (select q.SQL_TEXT from v$sql q where q.LAST_ACTIVE_TIME = t.START_DATE
                                         and rownum <= 1) as SQL_TEXT
from v$session s,
     v$transaction t
where s.sADDR = t.SES_ADDR;

3.锁跟线程锁一个道理的只有干掉其中一个

根据测试数据orace检测到死锁会主动给个报错的

A事务处理数据L1, L2

B事务处理数据L2, L1

事务A、B都阻塞只有干掉其中一个

4.死锁处理办法

能避免的一个事务一个处理程序控制。

避免不了的按照同样资源顺序进行处理。

5.锁或阻塞事务查看

oracle 复制代码
SELECT SESS.SID,  SESS.SERIAL#,  LO.ORACLE_USERNAME,  LO.OS_USER_NAME,  AO.OBJECT_NAME 被锁对象名, LO.LOCKED_MODE 锁模式, sess.LOGON_TIME 登录数据库时间,
'ALTER SYSTEM KILL SESSION ''' || SESS.SID || ','||SESS.SERIAL#||'''' FREESQL
FROM V$LOCKED_OBJECT LO,  DBA_OBJECTS AO,  V$SESSION SESS 
WHERE AO.OBJECT_ID = LO.OBJECT_ID AND LO.SESSION_ID = SESS.SID ORDER BY sid, sess.serial#;
相关推荐
Hello.Reader2 分钟前
深入理解 Rust 的 `Rc<T>`:实现多所有权的智能指针
开发语言·后端·rust
浪九天2 分钟前
Orcale、MySQL中参数类型的详解和运用场景(不带示例)
数据库·mysql·oracle
yoona10205 分钟前
Rust编程语言入门教程(八)所有权 Stack vs Heap
开发语言·后端·rust·区块链·学习方法
考虑考虑1 小时前
MyCat2使用
java·后端·java ee
后端码匠1 小时前
Spring Boot3+Vue2极速整合:10分钟搭建DeepSeek AI对话系统
人工智能·spring boot·后端
可乐张2 小时前
AutoGen 技术博客系列 (九):从 v0.2 到 v0.4 的迁移指南
后端·llm
可乐张2 小时前
AutoGen 技术博客系列 (八):深入剖析 Swarm—— 智能体协作的新范式
后端·llm
计算机-秋大田2 小时前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
计算机毕设指导62 小时前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
华子w9089258592 小时前
基于数据可视化+SpringBoot+安卓端的数字化施工项目计划与管理平台设计和实现
java·spring boot·后端