Improve performance when converting between DBs

Use a transaction when doing multiple inserts increase the writing
speed.

Ref: https://stackoverflow.com/a/68495887

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
pull/31219/head
Carl Schwan 4 years ago
parent 1bfd001cf6
commit db6927ee05
  1. 40
      core/Command/Db/ConvertType.php

@ -353,27 +353,37 @@ class ConvertType extends Command implements CompletionAwareInterface {
$result = $query->execute();
while ($row = $result->fetch()) {
$progress->advance();
if (!$parametersCreated) {
foreach ($row as $key => $value) {
$insertQuery->setValue($key, $insertQuery->createParameter($key));
try {
$toDB->beginTransaction();
while ($row = $result->fetch()) {
$progress->advance();
if (!$parametersCreated) {
foreach ($row as $key => $value) {
$insertQuery->setValue($key, $insertQuery->createParameter($key));
}
$parametersCreated = true;
}
$parametersCreated = true;
}
foreach ($row as $key => $value) {
$type = $this->getColumnType($table, $key);
if ($type !== false) {
$insertQuery->setParameter($key, $value, $type);
} else {
$insertQuery->setParameter($key, $value);
foreach ($row as $key => $value) {
$type = $this->getColumnType($table, $key);
if ($type !== false) {
$insertQuery->setParameter($key, $value, $type);
} else {
$insertQuery->setParameter($key, $value);
}
}
$insertQuery->execute();
}
$insertQuery->execute();
$result->closeCursor();
$toDB->commit();
} catch (\Throwable $e) {
$toDB->rollBack();
throw $e;
}
$result->closeCursor();
}
$progress->finish();
$output->writeln('');
}

Loading…
Cancel
Save