-
Notifications
You must be signed in to change notification settings - Fork 475
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open transactions must be committed or rolled back, otherwise it will affect other requests. 打开的事务必须提交或回滚,否则会影响其他请求。 #161
Comments
数据库连接是单例,请检查是否有开启的事务,没有被提交或回滚。 // 手动管理事务
try {
DB::beginTransaction();
DB::doSomeInsertOrUpdate();
if (someCondition) {
// 这里会造成事务没有Commit,应在return前加上Commit或Rollback
return;
}
DB::commit();
} catch(\Throwable $e){
DB::rollback();
throw $e;
}
// 自动管理事务
// 推荐写法,避免手动管理遗漏Commit或Rollback
DB::transaction(function() {
DB::doSomeInsertOrUpdate();
if (someCondition) {
// 不会出问题,因为DB::transaction()自动管理事务,会在return前Commit,一旦有异常就Rollback
return;
}
}); |
@hhxsv5 检查过,不存在没有commit或者rollback 的情况 |
我之前也有这个错误 就是因为事务没有提交或回滚 |
@liulianjun1995 我的php-fpm 运行没有这个问题。你也是这样吗? |
经过我们检查,的确是因为事务没有commit和回滚,而是函数直接return了导致的 |
@xeonselina 可以提供下错误的示例,便于其他人发现问题。 |
我们出错的代码类似于这样 DB::beginTransaction();
try{
if($userIsNotValid){
return false;
}
DB::doSomeInsertOrUpdate();
DB::commit();
}
catch(\Exception $e){
DB::rollback();
throw $e;
} 这里的return语句会导致transaction没被释放,进而有的锁可能会不释放 |
数据库操作中目前发现一个问题:
此时数据库事务锁住了, 如果重启laravelS服务, 此时 B,C,D的数据会丢失 |
在 if 的里面 |
恩恩,谢谢,您说的这种处理是没问题的。 就想请教下,如果发生了这种情况(比如开发代码考虑不周等情况)。没有走到rollback, 数据库死锁。 |
我也遇到数据丢失的问题 |
#270 - Add “server_timeout” parameter for detect server-side timeout. |
Tell us your software version
7.2.19
4.3.5
5.4.*
Detail description about this issue(error/log)
将公司项目从迁移到swoole后,就会报这个错。最后没有办法,切回的fpm这个问题就没有了。
Give us a
reproducible
code block andsteps
//TODO: Your code
The text was updated successfully, but these errors were encountered: