diff --git a/mailpoet/lib/Logging/LogHandler.php b/mailpoet/lib/Logging/LogHandler.php index e1161c16eb..a9b3a8c1eb 100644 --- a/mailpoet/lib/Logging/LogHandler.php +++ b/mailpoet/lib/Logging/LogHandler.php @@ -13,6 +13,11 @@ class LogHandler extends AbstractProcessingHandler { */ const DAYS_TO_KEEP_LOGS = 30; + /** + * How many records to delete on one run of purge routine + */ + const PURGE_LIMIT = 1000; + /** * Percentage value, what is the probability of running purge routine * @var int @@ -76,6 +81,6 @@ class LogHandler extends AbstractProcessingHandler { } private function purgeOldLogs() { - $this->logRepository->purgeOldLogs(self::DAYS_TO_KEEP_LOGS); + $this->logRepository->purgeOldLogs(self::DAYS_TO_KEEP_LOGS, self::PURGE_LIMIT); } } diff --git a/mailpoet/lib/Logging/LogRepository.php b/mailpoet/lib/Logging/LogRepository.php index 5b258671f6..d985c12f57 100644 --- a/mailpoet/lib/Logging/LogRepository.php +++ b/mailpoet/lib/Logging/LogRepository.php @@ -7,6 +7,7 @@ use MailPoet\Entities\LogEntity; use MailPoet\Entities\NewsletterEntity; use MailPoet\Util\Helpers; use MailPoetVendor\Carbon\Carbon; +use MailPoetVendor\Doctrine\DBAL\Driver\PDO\Connection; /** * @extends Repository @@ -65,12 +66,19 @@ class LogRepository extends Repository { return $query->getQuery()->getResult(); } - public function purgeOldLogs(int $daysToKeepLogs) { - $queryBuilder = $this->entityManager->createQueryBuilder(); - return $queryBuilder->delete(LogEntity::class, 'l') - ->where('l.createdAt < :days') - ->setParameter('days', Carbon::now()->subDays($daysToKeepLogs)->toDateTimeString()) - ->getQuery()->execute(); + public function purgeOldLogs(int $daysToKeepLogs, int $limit = 1000) { + $logsTable = $this->entityManager->getClassMetadata(LogEntity::class)->getTableName(); + $this->entityManager->getConnection()->executeStatement(" + DELETE FROM $logsTable + WHERE `created_at` < :date LIMIT :limit + ", [ + 'date' => Carbon::now()->subDays($daysToKeepLogs)->toDateTimeString(), + 'limit' => $limit, + ], + [ + 'date' => Connection::PARAM_STR, + 'limit' => Connection::PARAM_INT, + ]); } public function getRawMessagesForNewsletter(NewsletterEntity $newsletter, string $topic): array {