相关疑难解决方法(0)

获取"超过锁定等待超时;尝试重新启动事务"即使我没有使用事务

我正在运行以下MySQL UPDATE语句:

mysql> update customer set account_import_id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)

我没有使用交易,为什么我会收到此错误?我甚至尝试重新启动我的MySQL服务器,它没有帮助.

该表有406,733行.

mysql sql timeout lock-timeout

237
推荐指数
10
解决办法
54万
查看次数

Propagation.REQUIRES_NEW 导致 LockWaitTimeOutException

有两个函数 A 和 B 用事务注释定义。

我从 A 呼叫 B。

@Transactional(value=Constants.READ_WRITE_REQUEST)
public int A(....){
    B();
}

@Transactional(propagation=Propagation.REQUIRES_NEW,value=Constants.READ_WRITE_REQUEST)
public int B(....){
     C();        
}

@Transactional(value=Constants.READ_WRITE_REQUEST)
public int C(....){
    ...
}
Run Code Online (Sandbox Code Playgroud)

它导致了

Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)

    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)

    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
Run Code Online (Sandbox Code Playgroud)

我从函数 B 中删除了 Propagation.REQUIRES_NEW,问题得到了解决。

是因为旧事务持有锁而创建了新事务吗?对此有何想法?

java spring transactions

2
推荐指数
1
解决办法
5195
查看次数

标签 统计

java ×1

lock-timeout ×1

mysql ×1

spring ×1

sql ×1

timeout ×1

transactions ×1