ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 死锁的产生与消除之二

死锁的产生与消除之二

原创 Linux操作系统 作者:wmlm 时间:2008-05-09 14:03:44 0 删除 编辑
===========================================================
死锁的产生与消除之二
===========================================================

死锁的产生与消除之二

无索引的外键


-- 死锁的产生与消除2
-- session A
SQL> create table p(x int primary key);
SQL> create table c(x references p);
SQL> insert into p values (1);
SQL> insert into p values (2);
SQL> commit;

SQL> insert into c values (2);

-- session B
SQL> delete from p where x=1;
-- 会话立即发生阻塞,sqlplus 没有响应
-- 它在执行删除之前试图对表c加一个全表锁。(c表外键上无索引)
-- 现在,别的会话都不能对c del ins or update,
-- 已经开始的会话A可以继续,这就阻塞了会话B
-- 新会话无法修改表c
-- 对p表更新也会出现阻塞,没试

-- 解决阻塞
-- session A
commit;
-- session B
-- 等待结束,已删除 1 行

-- 预防,在表c上对列x加索引
-- 治疗,找出没有索引的引用修改过的demo07.sql
-- session A
SQL> create index i_c_x on c(x);
SQL> insert into c values (2);
-- session B
SQL> SQL> delete from p where x=1;
已删除0行。

-- 总结:1在外键上建索引 2尽量少在父表上改动。

 



引文来源  王旺的书房 | 死锁的产生与消除之二


Link URL: http://wworacle.blog.163.com/blog/static/2126872520084911464978

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/271063/viewspace-263464/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-08

  • 博文量
    398
  • 访问量
    3716784