【YashanDB 数据库】update/delete 未选中行时,v$transaction 视图没有事务,alter 超时问题
问题现象
1、alter table 修改表字段名,卡住,超时。
2、查看 v$transaction 事务视图,没有看到事务记录。
3、问题单:调整表结构时超时
问题风险及影响
无风险
问题影响版本
客户版本:22.2.8.3
问题发生原因
delete、update 没有选中行时,v$transaction 不会有记录,但有 TS 锁。
解决方法及规避方式
不需要规避
问题分析和处理过程
1、show autocommit
set autocommit off;
2、delete、update 正常选中行时,v$transaction 中有事务记录,有 TS 锁
![](https://static001.geekbang.org/infoq/72/725e1f9f3229c7bae98ff9871460c3a4.png)
3、delete、update 未选中行时,v$transaction 中没有事务记录,有 TS 锁
![](https://static001.geekbang.org/infoq/c0/c0dfda8c090649b2862b5cbc7d1832d1.png)
另一个 session 做 alter table,控制 ddl 超时参数 DDL_LOCK_TIMEOUT,设置为 0,则立即返回 timeout 报错。
![](https://static001.geekbang.org/infoq/e1/e171bbe2a17dbda5463a9981c332bca9.png)
同时对比 oracle 现象,发现和 yashandb 一样。
经验总结
1、delete、update 未选中行时,vlock 中有 TS 锁
此时另一个 session 对表做 alter 操作会返回 lock wait timeout 超时错误。正常现象
2、DDL_LOCK_TIMEOUT 控制 lock wait timeout 超时大小,默认为 0
评论