写点什么

YashanDB |执行 SQL 报 YAS-02024 锁等待超时?可能是默认设置的问题

作者:数据库砖家
  • 2025-04-24
    广东
  • 本文字数:721 字

    阅读完需:约 2 分钟

在 YashanDB 中执行某些 DDL 或 DML 语句时,如果涉及到锁竞争,就可能遇到如下报错:

YAS-02024 lock wait timeout, wait time 0 milliseconds

这种情况看似突然,其实和数据库默认的锁等待设置有关。本文将带你快速定位原因,并提供实用的规避方法。

一、问题描述

执行如下 SQL 时报错:

alter table ...;-- 或update/delete ... where ...;
复制代码

控制台提示:

YAS-02024 lock wait timeout, wait time 0 milliseconds​
复制代码

语句因未能获取锁而直接失败。

二、根本原因分析

YashanDB 默认的锁等待超时时间为 0 秒,即如果当前 SQL 执行时请求的资源已被其他会话占用:

数据库不会等待;

而是立即返回锁等待超时错误。

三、适用范围

四、解决办法

方法一:临时或永久修改锁等待超时时间

-- 修改为等待 300 秒(单位:秒)alter system set DDL_LOCK_TIMEOUT = 300;​
复制代码

修改后将自动同步更新到配置文件 config/yasdb.ini,实现持久化。

方法二:找出阻塞源并终止会话

1、查询当前锁定信息:

select * from v$lock;​
复制代码

2、关联查找会话信息:

select * from v$session;​
复制代码

3、手动终止阻塞会话:

alter system kill session 'SID,SERIAL#';-- 示例:alter system kill session '30,918';​
复制代码

4、批量终止锁表会话(适用于大量阻塞情况):

select   'alter system kill session ''' || sid || ',' || serial# || ''';' from   v$session t1,   v$locked_object t2 where   t1.sid = t2.session_id;​
复制代码

将输出的 SQL 批量复制执行即可。

五、预防建议

六、总结

锁等待超时并非系统 bug,而是默认策略的结果。在开发环境或测试环境中,合理配置 DDL_LOCK_TIMEOUT 和清理无效会话,是避免 YAS-02024 报错最直接的方式。对生产环境,建议引入锁等待监控机制,及时发现并处理长时间占锁行为。

用户头像

还未添加个人签名 2025-04-09 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB |执行 SQL 报 YAS-02024 锁等待超时?可能是默认设置的问题_数据库·_数据库砖家_InfoQ写作社区