由于UGA是专门用于存放与用户会话相关信息,如登录信息、会话状态等。
专用服务器模式下,进程和会话是一对一的关系,UGA被包含在PGA中,
在联机(共享)服务器模式下,进程和会话是一对多的关系,所以UGA就不再属于 PGA了,而会在大型池(Large Pool)中分配。但如果从大型池中分配失败,如大型池太小,或是根本没有设置大型池,则从共享池(Shared Pool)中分配。
官方:deadlocking,多个用户(进程)分别锁定了一个资源,并又试图请求锁定对方已经锁定的资源,就产生了一个锁定请求环,导致多个用户(进程)都处于等待对方释放其锁定资源的状态。
死锁:多个人修改同一条记录,且没有执行提交或回滚操作,由数据库自动解锁,找出是哪两个会话和哪两个sql语句返回给业务。
ps -ef | grep LOCAL= #查询进程 YES本地连接,NO非本地连接
oracle 2917 2913 0 11:34 ? 00:00:00 oracleora (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 3060 2629 0 12:14 ? 00:00:00 oracleora (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
kill -9 进程号SID #杀掉一个进程
select * from v$session where username='SCOTT';
select * from v$lock #记录锁相关的视图
TX #type行级锁
6 #行锁
alter system kill session‘16,271’ #精准杀掉一个进程
#模拟一个死锁
session 1
SQL> update emp
2 set sal=8000
3 where ename='SUNMENG';
1 row updated.
session2
SQL> update emp
2 set sal=10000
3 where ename='CATHERINE';
1 row updated.
session1
SQL> update SCOTT.EMP
2 set sal=10000
3 where ename='CATHERINE';
update SCOTT.EMP
session2
SQL> update emp
2 set sal=9000
3 where ename='SUNMENG';
update emp
session1
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
SQL> set pages 200 lines 200;
SQL> col ADDR for a50;
SQL> select * from v$lock; #查看有多少个锁,TM是同步访问对象用的,TX是和事务有关的.
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------------------------------------------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
000000009118E708 000000009118E760 7 KD 0 0 6 0 12451 0
000000009118EB68 000000009118EBC0 7 KT 12876 0 4 0 12451 0
000000009118E628 000000009118E680 10 MR 3 0 4 0 12451 0
000000009118E9A8 000000009118EA00 10 MR 4 0 4 0 12451 0
000000009118E8C8 000000009118E920 10 MR 1 0 &nbs

本文探讨了在联机(共享)服务器模式下,由于UGA存储在大型池或共享池中可能导致的死锁问题。当多个用户进程互相持有对方需要的资源时,就会形成死锁。通过查询和监控数据库会话、锁信息来定位死锁,然后通过杀死特定会话来解除。避免死锁的关键在于资源分配策略和进程调度的优化。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



