解决方案 »
- 用mysql做数据库设计的时候,你们关注过tinyint和int的区别么?
- mysql行转列问题
- 给用户授予查看存储过程定义的权限?
- mysql支持PLSQL中begin-end那样的块操作吗?
- delete from password n where n.user_id in(select n.user_id from password n where n.uid='3584');
- 请问装MYSQL时出现 rror Nr.1045错误是什么原因?
- 问一下有关asp+mysql和asp+Access的区别?
- 请问有没有在WINDOWS下的mysqlgui管理mysql的程序呢?
- 崩溃的c3p0数据库连接问题
- MYSQL 安装 配置文件如何修改
- 求一个sql或者hql删除语句?
- SSH系统连接MYSQL报Cannot create PoolableConnectionFactory (到主机 的 TCP/IP 连接失败。
没看到什么 看到都是空白的
没有东西,可能是数据库自己处理死锁了。 错误日志中经常出现Deadlock found when trying to get lock; try restarting transaction,我担心会对数据库性能有影响,求高人指点
发生死锁的原因应该是别的线程某些事务先锁定cont,后锁定mt;或者多个线程循环锁定,导致类似于先锁定cont,后锁定mt的情况发生。
使用SHOW INNODB STATUS;命令后,在LASTEST DETECTED DEADLOCK节会看到最近发生的一个(最近的一个)死锁信息,在里面可以找到发生死锁的线程ID和SQL语句。
如果应用程序里对这两个表的修改不是很多的话,LZ可以把所有的修改语句列出来检查一下哪些语句会导致先锁定cont,后锁定mt。
在编写程序的时候,在各个事务内部,对表的修改顺序最好一致(比如对所有表进行编号,尽量先修改编号小或者大的表),这样可以避免大多数的死锁。
至于楼主说在发生死锁之后SHOW INNODB STATUS,却看不到死锁信息,我也不知是什么原因~
如果不能查看死锁信息,很难确定是哪些语句导致死锁,LZ在发生死锁后再试一下,如果还看不到的话,QQ发给我,我帮你看看~
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.ServerPreparedStatement.serverExecut(ServerPreparedStatement.java:1124)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:676)