
概念描述

测试验证
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.bak
659,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/data
server signaled
[omm@MogDB1 data]$ gsql -r
gsql ((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
MogDB-# ;
lockwait_timeout
------------------
3min
(1 row)
MogDB=# show update_lockwait_timeout;
update_lockwait_timeout
-------------------------
1min
(1 row)
MogDB=#
复制
MogDB=# \set AUTOCOMMIT off
MogDB=# \echo :AUTOCOMMIT
off
MogDB=#
复制
MogDB=# \set AUTOCOMIT off
MogDB=# \echo :AUTOCOMMIT
off
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 1000 | 2000
(3 rows)
MogDB=# select * from test for update;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 1000 | 2000
(3 rows)
MogDB=#
复制
MogDB=# \set AUTOCOMMIT off
MogDB=# \echo :AUTOCOMMIT
off
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 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 ms
DETAIL: blocked by hold lock thread 47785166448384, statement <select * from test for update;>, hold lockmode AccessShareLock.
MogDB=#
复制
MogDB=# \set AUTOCOMMIT off
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 1000 | 2000
(3 rows)
MogDB=# update test set value1=value1+1 where id=1;
UPDATE 1
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 13 | 20
2 | 100 | 200
3 | 1000 | 2000
(3 rows)
MogDB=#
复制
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 1000 | 2000
(3 rows)
MogDB=# update test set value1=value1+1 where id=1;
复制
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 1000 | 2000
(3 rows)
MogDB=# select * from test;
id | value1 | value2
----+--------+--------
1 | 12 | 20
2 | 100 | 200
3 | 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 ms
DETAIL: 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.bak
659,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 -r
gsql ((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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
解锁高效查询的关键功能 Group by分组
YashanDB
80次阅读
2025-03-05 11:08:38
Oracle优化-检查Oracle数据库性能
张静懿
42次阅读
2025-03-22 13:53:22
行锁跟踪
www
40次阅读
2025-03-05 16:12:16
OBLogProxy 在 Binlog 模式下的故障案例解析
爱可生开源社区
40次阅读
2025-03-05 11:09:22
MySQL数据库优化总结
鲁鲁
36次阅读
2025-03-25 23:06:42
ORACLE数据库查看执行计划
张静懿
33次阅读
2025-03-23 22:23:04
oracle检查数据库cpu、I/O、内存性能
怀念和想念
33次阅读
2025-03-23 22:06:48
oracle触发器
张静懿
33次阅读
2025-03-17 23:43:03
硬货!深度解析PostgreSQL三大核心故障
呆呆的私房菜
33次阅读
2025-03-04 09:47:16
oracle巡检的其他检查
听溪
32次阅读
2025-03-23 22:17:19