在两个程序同时运行时,会出现登陆卡死现象。请讨论原因,并根据原因讨论可行的解决办法
24 个解决方案
#1
内存不够
#2
那是数据库的事情了吧。
#3
数据库连接数怎么设置的? 卡死一般是连接数占满了
两边分配自己合理的连接数 在访问完数据库后释放掉连接
两边分配自己合理的连接数 在访问完数据库后释放掉连接
#4
应该是发生数据库死锁了
比如C++的事务要修改某条记录,java中的事务修改了该记录还没提交,同时java的事务需要修改某另一条记录,C++事务正好也修改了该某另一条记录还没提交,此时就双方就会等待对方的事务提交,但因为双方都在等待对方,所以双发都没法进行到最后而提交,于是就死锁了。
比如C++的事务要修改某条记录,java中的事务修改了该记录还没提交,同时java的事务需要修改某另一条记录,C++事务正好也修改了该某另一条记录还没提交,此时就双方就会等待对方的事务提交,但因为双方都在等待对方,所以双发都没法进行到最后而提交,于是就死锁了。
#5
应该是数据库死锁吧
这个问题就把两个登录的代码好好查一下,看事务里的处理顺序。
这个问题就把两个登录的代码好好查一下,看事务里的处理顺序。
#6
+1.
100%是死锁
#7
那要是两个系统同时用一个账号登陆呢,在一起操作数据怎么办?
#8
感觉这两个项目应该是一个前台一个后台吧,估计不应该是同样的系统。
#9
如果登录不做什么修改数据, 只是读取数据应该不会那么卡吧.
卡死之后mysql java端应该有一定的异常提示, 类似timeout, dead lock。
可以使用悲观锁, select .. where index =xx for update, 确保查询更新之后释放各种资源.
或者使用乐观锁, 加个数据版本做标记.
卡死之后mysql java端应该有一定的异常提示, 类似timeout, dead lock。
可以使用悲观锁, select .. where index =xx for update, 确保查询更新之后释放各种资源.
或者使用乐观锁, 加个数据版本做标记.
#10
两个项目同时运行不是说同时登陆,而且登陆的数据也不相同。出错的时候往往是这样的:C++ 的项目正在测试,然后这时我访问了java做的Web端,然后有可能就出现登陆卡死现象。
#11
上面很多仁兄说应该是
数据库死锁的原因,那么应该如何解决,静待各位仁兄佳音
#12
发生情况有很多~
#13
弄两个数据库,同步过去。。?
#14
我觉得可能是对数据执行了操作,但是事务不是自动提交的的,因为事务没有提交,记录就一直锁住了,因为你的问题出现,基本是必现得了,所以出现的问题可能在这里。
#15
那如果一个正在操作另一个访问怎么办
#16
我觉得悲观锁更好些,乐观锁在这个场景下不适合。
#17
两个项目一起用同一个数据库在读的时候出问题是内存硬件的问题.
如果是在写的时候出现卡死的情况那就是数据库的策略问题,死锁~
如果是在写的时候出现卡死的情况那就是数据库的策略问题,死锁~
#18
1、尽量晚的开启一个事务
2、事务里的代码要尽量简洁,把一些不必要放在事务中的代码移到事务外面去
3、调整C++和java代码中事务部分对表的处理顺序,不要C++先锁定A表再锁定B表,而java先锁定B表再锁定A表。这样在并发量大的时候,两个事务必死无疑。应该是都按照一个顺序锁定相关的表。
祝你成功
#19
其实到现在我都不知道问题的原因呢……此种问题是客户那边出现的,我基本上很少遇到……
#20
针对两种问题我怎么做才能比较快速比较好的解决呢?
#21
这样岂不是两个项目中的代码都需要改?而且还得对各种逻辑一一排查?想一想很恐怖……而且我只是做java的,现在那位C++的工程师已经忙的焦头烂额了,根本没法和我进行配合啊
#22
建议你到网上搜索一下mysql事务的机制
我对mysql了解不多。
http://blog.csdn.net/forever_feng/archive/2009/07/21/4368003.aspx
你可以看一下这个文章,看看根据里面提到的,修改一下相关的参数能否减少死锁的次数。
或者搜索一下,mysql事务中死锁的自动放锁机制。
因为之前听说过oracle中死锁,可以修改某些参数,让事务的一方自动放锁。不过一直也没用过。不知道mysql有没有这种机制。
我对mysql了解不多。
http://blog.csdn.net/forever_feng/archive/2009/07/21/4368003.aspx
你可以看一下这个文章,看看根据里面提到的,修改一下相关的参数能否减少死锁的次数。
或者搜索一下,mysql事务中死锁的自动放锁机制。
因为之前听说过oracle中死锁,可以修改某些参数,让事务的一方自动放锁。不过一直也没用过。不知道mysql有没有这种机制。
#23
非常感谢,我这就去试一下
#24
如果新的解决观点,望各位不吝赐教
#1
内存不够
#2
那是数据库的事情了吧。
#3
数据库连接数怎么设置的? 卡死一般是连接数占满了
两边分配自己合理的连接数 在访问完数据库后释放掉连接
两边分配自己合理的连接数 在访问完数据库后释放掉连接
#4
应该是发生数据库死锁了
比如C++的事务要修改某条记录,java中的事务修改了该记录还没提交,同时java的事务需要修改某另一条记录,C++事务正好也修改了该某另一条记录还没提交,此时就双方就会等待对方的事务提交,但因为双方都在等待对方,所以双发都没法进行到最后而提交,于是就死锁了。
比如C++的事务要修改某条记录,java中的事务修改了该记录还没提交,同时java的事务需要修改某另一条记录,C++事务正好也修改了该某另一条记录还没提交,此时就双方就会等待对方的事务提交,但因为双方都在等待对方,所以双发都没法进行到最后而提交,于是就死锁了。
#5
应该是数据库死锁吧
这个问题就把两个登录的代码好好查一下,看事务里的处理顺序。
这个问题就把两个登录的代码好好查一下,看事务里的处理顺序。
#6
+1.
100%是死锁
#7
那要是两个系统同时用一个账号登陆呢,在一起操作数据怎么办?
#8
感觉这两个项目应该是一个前台一个后台吧,估计不应该是同样的系统。
#9
如果登录不做什么修改数据, 只是读取数据应该不会那么卡吧.
卡死之后mysql java端应该有一定的异常提示, 类似timeout, dead lock。
可以使用悲观锁, select .. where index =xx for update, 确保查询更新之后释放各种资源.
或者使用乐观锁, 加个数据版本做标记.
卡死之后mysql java端应该有一定的异常提示, 类似timeout, dead lock。
可以使用悲观锁, select .. where index =xx for update, 确保查询更新之后释放各种资源.
或者使用乐观锁, 加个数据版本做标记.
#10
两个项目同时运行不是说同时登陆,而且登陆的数据也不相同。出错的时候往往是这样的:C++ 的项目正在测试,然后这时我访问了java做的Web端,然后有可能就出现登陆卡死现象。
#11
上面很多仁兄说应该是
数据库死锁的原因,那么应该如何解决,静待各位仁兄佳音
#12
发生情况有很多~
#13
弄两个数据库,同步过去。。?
#14
我觉得可能是对数据执行了操作,但是事务不是自动提交的的,因为事务没有提交,记录就一直锁住了,因为你的问题出现,基本是必现得了,所以出现的问题可能在这里。
#15
那如果一个正在操作另一个访问怎么办
#16
我觉得悲观锁更好些,乐观锁在这个场景下不适合。
#17
两个项目一起用同一个数据库在读的时候出问题是内存硬件的问题.
如果是在写的时候出现卡死的情况那就是数据库的策略问题,死锁~
如果是在写的时候出现卡死的情况那就是数据库的策略问题,死锁~
#18
1、尽量晚的开启一个事务
2、事务里的代码要尽量简洁,把一些不必要放在事务中的代码移到事务外面去
3、调整C++和java代码中事务部分对表的处理顺序,不要C++先锁定A表再锁定B表,而java先锁定B表再锁定A表。这样在并发量大的时候,两个事务必死无疑。应该是都按照一个顺序锁定相关的表。
祝你成功
#19
其实到现在我都不知道问题的原因呢……此种问题是客户那边出现的,我基本上很少遇到……
#20
针对两种问题我怎么做才能比较快速比较好的解决呢?
#21
这样岂不是两个项目中的代码都需要改?而且还得对各种逻辑一一排查?想一想很恐怖……而且我只是做java的,现在那位C++的工程师已经忙的焦头烂额了,根本没法和我进行配合啊
#22
建议你到网上搜索一下mysql事务的机制
我对mysql了解不多。
http://blog.csdn.net/forever_feng/archive/2009/07/21/4368003.aspx
你可以看一下这个文章,看看根据里面提到的,修改一下相关的参数能否减少死锁的次数。
或者搜索一下,mysql事务中死锁的自动放锁机制。
因为之前听说过oracle中死锁,可以修改某些参数,让事务的一方自动放锁。不过一直也没用过。不知道mysql有没有这种机制。
我对mysql了解不多。
http://blog.csdn.net/forever_feng/archive/2009/07/21/4368003.aspx
你可以看一下这个文章,看看根据里面提到的,修改一下相关的参数能否减少死锁的次数。
或者搜索一下,mysql事务中死锁的自动放锁机制。
因为之前听说过oracle中死锁,可以修改某些参数,让事务的一方自动放锁。不过一直也没用过。不知道mysql有没有这种机制。
#23
非常感谢,我这就去试一下
#24
如果新的解决观点,望各位不吝赐教