问以下Deadlock 如何产生并如何解决
当前应用是一个大java工程,现在收到如下错误
com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
   at com.mysql.jdbc.Util.getInstance(Util.java:381)
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1046)
   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)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)
   at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
   at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
   at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
   at com.oddsmatrix.website.oddshistory.db.OdDAO.Asdeleted(OdDAO.java:110) ---(一个update一个大表的语句)

解决方案 »

  1.   

    1. 检查你的mysql设置 
    2. 开启事务的时候是不是没有关闭
      

  2.   

    问题是比较复杂的问题 确认描述如下
    2台web服务器  一台数据库服务器
    现在2台web服务器同时update或者insert记录到数据库服务器 的同一个表
    这个表大概有200万记录 。 系统提示大概有10分钟以上的delay,估计影响系统半小时
    最后还是系统正常 (就是最后数据还是顺利完成)
    这样导致的错误 是否update导致行锁, 现在不知道如何解决  。  (原因大致找到)
      

  3.   

    update 会锁表。你可以用show processlist 看一下。
    或者用status 看下一。
      

  4.   

    这个问题关键抓到你的死锁语句来分析才能从根本上知道原因,因为这其中的原因很多,不同原因有不同解决方法的:找死锁的2个语句:
    show innodb status;