考试科目:PGCA-E-090
考试题量:40 道单项选择题、10 道多项选择题(每题 2 分)
通过分数:60%
考试时间:60min
本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
PostgresSQL是否能够自动检测到死锁,然后退出其中一个事务?
A.是
B.否
参考答案:A
解析:
模拟死锁
1)准备一张表,插入两条数据
testdb=> select * from s1.t2; id ----- 111 222
2)窗口1开启事务1
testdb=> begin; BEGIN testdb=*> update s1.t2 set id=1 where id=111;
3)窗口2开启事务2
testdb=> begin; BEGIN testdb=*> update s1.t2 set id=2 where id=222; UPDATE 1
4)回到窗口1,修改事务2的数据
testdb=*> update s1.t2 set id=22222 where id=222; 。。。。等待中
5)回到窗口2,修改事务1的数据
testdb=*> update s1.t2 set id=1111 where id=111;
6)此时窗口的事务2监控到死琐
ERROR: deadlock detected DETAIL: Process 113991 waits for ShareLock on transaction 779; blocked by process 119247. Process 119247 waits for ShareLock on transaction 780; blocked by process 113991. HINT: See server log for query details. CONTEXT: while updating tuple (0,3) in relation "t2"
7)查看最终数据
testdb=> select * from s1.t2;
id
-------
1
22222
(2 rows)发现第一行数据修改被提交,第二行数据修改被回滚。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




