

概念描述

测试验证
MogDB=# select version();version--------------------------------------------------------------------------------------------------------------------------------------------------(MogDB 3.0.4 build cc068866) compiled at 2023-03-03 17:47:05 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit(1 row)MogDB=# show server_version;server_version----------------9.2.4(1 row)
MogDB=# show lockwait_timeout;lockwait_timeout------------------20min(1 row)MogDB=# show update_lockwait_timeout;update_lockwait_timeout-------------------------2min(1 row)MogDB=#
[omm@MogDB1 data]$ diff postgresql.conf postgresql.conf.bak659,660c659< lockwait_timeout = 180s # Max of lockwait_timeout and deadlock_timeout + 1s< update_lockwait_timeout = 60s---> lockwait_timeout = 1200s # Max of lockwait_timeout and deadlock_timeout + 1s[omm@MogDB1 data]$ pwd/u01/mogdb/data[omm@MogDB1 data]$ gs_ctl reload[2023-08-15 22:04:01.060][71549][][gs_ctl]: gs_ctl reload ,datadir is u01/mogdb/dataserver signaled[omm@MogDB1 data]$ gsql -rgsql ((MogDB 3.0.4 build cc068866) compiled at 2023-03-03 17:47:05 commit 0 last mr )Non-SSL connection (SSL connection is recommended when requiring high-security)Type "help" for help.MogDB=# show lockwait_timeoutMogDB-# ;lockwait_timeout------------------3min(1 row)MogDB=# show update_lockwait_timeout;update_lockwait_timeout-------------------------1min(1 row)MogDB=#
MogDB=# \set AUTOCOMMIT offMogDB=# \echo :AUTOCOMMIToffMogDB=#
MogDB=# \set AUTOCOMIT offMogDB=# \echo :AUTOCOMMIToffMogDB=# select * from test;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=# select * from test for update;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=#
MogDB=# \set AUTOCOMMIT offMogDB=# \echo :AUTOCOMMIToffMogDB=# select * from test;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=# drop table test;
MogDB=# drop table test;ERROR: Lock wait timeout: thread 47785292334848 on node dn_6001 waiting for AccessExclusiveLock on relation 89558 of database 15940 after 180000.900 msDETAIL: blocked by hold lock thread 47785166448384, statement <select * from test for update;>, hold lockmode AccessShareLock.MogDB=#
MogDB=# \set AUTOCOMMIT offMogDB=# select * from test;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=# update test set value1=value1+1 where id=1;UPDATE 1MogDB=# select * from test;id | value1 | value2----+--------+--------1 | 13 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=#
MogDB=# select * from test;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=# update test set value1=value1+1 where id=1;
MogDB=# select * from test;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=# select * from test;id | value1 | value2----+--------+--------1 | 12 | 202 | 100 | 2003 | 1000 | 2000(3 rows)MogDB=# update test set value1=value1+1 where id=1;ERROR: Lock wait timeout: thread 47785292334848 on node dn_6001 waiting for ShareLock on transaction 1132652 after 60000.959 msDETAIL: blocked by hold lock thread 47785166448384, statement <select * from test;>, hold lockmode ExclusiveLock.MogDB=#

知识总结
lockwait_timeout:控制单个锁的最长等待时间。当申请的锁等待时间超过设定值时,MogDB 会报Lock wait timeout。 update_lockwait_timeout:允许并发更新参数开启情况下,该参数控制并发更新同一行时单个锁的最长等待时间。当申请的锁等待时间超过设定值时,MogDB 会报Lock wait timeout。 在 Oracle 中,对锁等待并没有超时自动中止等待事务的参数控制,对从 Oracle 迁移至 MogDB 的系统,建议参考应用系统中事务处理时长,设置合适的锁等待超时时间。
[omm@MogDB1 data]$ diff postgresql.conf postgresql.conf.bak659,660c659< lockwait_timeout = 1800s # Max of lockwait_timeout and deadlock_timeout + 1s< update_lockwait_timeout = 1800s---> lockwait_timeout = 1200s # Max of lockwait_timeout and deadlock_timeout + 1s[omm@MogDB1 data]$ gsql -rgsql ((MogDB 3.0.4 build cc068866) compiled at 2023-03-03 17:47:05 commit 0 last mr )Non-SSL connection (SSL connection is recommended when requiring high-security)Type "help" for help.MogDB=# show lockwait_timeout;lockwait_timeout------------------30min(1 row)MogDB=# show update_lockwait_timeout;update_lockwait_timeout-------------------------30min(1 row)MogDB=#
END
访问官网了解更多:www.mogdb.io
产品兼容适配申请:partner@enmotech.com
加微信进入交流群:Roger_database


文章转载自MogDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




