当前java应用发生lock 超时错误
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)大致原因 2台webserver 同时刻对一数据库服务器的同一表进行update
发生错误,
请问可以在my cnf里设置解决这个问题吗?

解决方案 »

  1.   

    不是MYSQL的问题,是你的JAVA连接中的等待超时了。改一下这个超时设置的上限,改大一些试试。
      

  2.   

    版主的意思是不是当一个client在update的时候由于设置了事务 对表结构加了锁
    而另一个client进行update的时候要等待该锁释放
    这个等待时间超时了?
    mysql> show  variables like "innodb_lock_wait_timeout";
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | innodb_lock_wait_timeout | 50    |
    +--------------------------+-------+
    1 row in set (0.00 sec)超过50秒?
      

  3.   

    innodb_lock_wait_timeout 已经设置到了280.“JAVA连接中的等待超时”应该不属于,在其他2个环境下这个复炸应用是成功的
    我感觉还是综合配置或者数据出问题了
      

  4.   

    试下这个table_lock_wait_timeout参数吧
      

  5.   

    table_lock_wait_timeout  设置多shao ?
      

  6.   


    先设置大一些好了。看看能不能解决问题。如果能然后再优化减少到合适的。关于table_lock_wait_timeout  的说明,你可以到文档中查一下这个参数的用途。