每批后冲洗时间越来越长

问题描述 投票:0回答:0

我有以下代码:

$em = $this->getContainer()->get('doctrine.orm.default_entity_manager');

$orderRepo = $em->getRepository(Order::class);

$orders = $orderRepo->createQueryBuilder('o')
    ->andWhere('o.deletedAt IS NULL')
    ->andWhere('o.state NOT IN (:invalidStates)')
    ->setParameters([
        'invalidStates' => [
            Booking::STATE_DECLINED,
            Booking::STATE_EXPIRED,
            Booking::STATE_CANCELED_BY_CLIENT,
            Booking::STATE_FAILED,
            Booking::STATE_CANCELED_HANDLING_FEE,
        ]
    ])->getQuery()->iterate();

$count = 0;
foreach ($orders as $order) {
    /** @var Order $order */
    $order = $order[0];
    $output->write(sprintf('Processing order %s... ', $order->getReference()));
    if ($this->shouldSkip($order)) {
        $output->writeln('Doesn\'t meet criteria, skipping.');
        continue;
    }
    $paymentPlanName = PayoutPlanFactory::make($order)->getPayoutPlanName();
    $output->write(sprintf('Setting payment plan to %s...', $paymentPlanName));
    $order->setPayoutPlan($paymentPlanName);
    $em->persist($order);
    $em->detach($order);
    $output->writeln(' Done.');

    $flushStart = microtime(true);
    if ((++$count % 100) === 0) {
        $output->write('Flushing 100 records... ');
        $em->flush();
        $flushEnd = microtime(true);
        $diff = $flushEnd - $flushStart;
        $output->writeln(sprintf('Done in %.1F s.', $diff));
        $output->write('Clearing em... ');
        $em->clear();
        $output->writeln('Done.');
    }
}
$em->flush();
$em->clear();

运行时,我的冲洗时间每次都增加,如下所示:

Flushing 1000 records... Done in 0.8 s.
Flushing 1000 records... Done in 0.6 s.
Flushing 1000 records... Done in 0.7 s.
Flushing 1000 records... Done in 0.8 s.
Flushing 1000 records... Done in 1.0 s.

这一直在上升和上升。我试过做一个 while 循环,每次我只从数据库中提取 1000 条记录,然后在继续处理下一个 1000 条记录之前处理它们,但它一直在发生。

Order
-实体进行审计,但是属性
payout_plan
在审计中被忽略。我们的审计是基于这个:https://github.com/simplethings/entity-audit

可能是什么问题?

doctrine-orm symfony-2.8
© www.soinside.com 2019 - 2024. All rights reserved.