Ves*_*shi 5 php postgresql internal-server-error yii2
我在Yii2中有批量删除操作,下面是代码剪切删除带有活动日志的记录(这里DBMS是PostgreSQL) -
$companies = Yii::$app->request->post('ids', '');
if($companies && count($companies)) {
foreach ($companies as $company) {
try{
$utsendelseid = $company['utsendelseid'];
$mailid = $company['mailid'];
$model = MailSend::find()->where(['utsendelseid' => $utsendelseid, 'mailid' => $mailid])->one();
if($model && !$model->mailsendt) {
if($model->delete()) {
// if model deleted successfully then keep a log using commandBus
$companyModel = $this->findCompanyModel($model->kundenr);
$questionnaireModel = $this->findModel($utsendelseid);
Yii::$app->commandBus->handle(new AddCompanyLogCommand([
'kundenr' => $model->kundenr,
'portal_id' => ($questionnaireModel?$questionnaireModel->prosjektkode:''),
'activity' => Yii::t('backend', 'Slettet fra spørreskjema'),
'notes' => Yii::t('backend', 'Company "{company}" has been deleted from questionnaire - "{questionnaire}"("{questionnaire_id}")', [
'company' => ($companyModel?$companyModel->etternavn:''),
'questionnaire' => ($questionnaireModel?$questionnaireModel->beskrivelse:''),
'questionnaire_id' => $utsendelseid
]),
'activity_type_code' => 30,
]));
}
}
}
// even tried with PDOException
catch(Exception $e){
echo $e->getMessage();
// exit the request processing here
exit(0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要删除的记录数低于300,这样可以正常工作.如果300以上的记录数甚至代码都在try {} catch()块内,我会收到内部服务器错误.我将最大执行时间设置为-1,将最大内存分配设置为5120M,这不是现在的问题.我认为这是一个有太多连接错误的问题,而有多少SQL操作,因此,我通过put启用Yii2中的持久连接'attributes'=> [PDO::ATTR_PERSISTENT => true].但问题仍然存在.
这里,查询执行最多45秒,并在那里发生错误.在45秒内,它会删除多达300条记录并记录它们.之后,它会给出内部服务器错误.查询中没有错误.好的,我编写了自定义查询来加速并删除多达500条记录.但是在拥有超过500条记录时需要面对同样的问题.
我的问题是 -
为什么我收到内部服务器错误,即使代码在try {} catch()块内?
为什么它可以工作45秒?
这是Apache的子进程查杀案例吗?
是否允许运行查询的最长时间问题?
如果这种情况的连接太多,那么为什么持久连接会出现问题呢?
提前致谢.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |