Skip to content

Commit

Permalink
Merge pull request #11334 from creative-commoners/pulls/5.2/analyze-t…
Browse files Browse the repository at this point in the history
…able

FIX Run ANALYZE TABLE before fetching table stats
  • Loading branch information
GuySartorelli committed Aug 14, 2024
2 parents 7b91207 + 25a41de commit 9e6ecde
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions src/ORM/Connect/MySQLDatabase.php
Original file line number Diff line number Diff line change
Expand Up @@ -569,23 +569,21 @@ public function clearTable($table)
// Not simply using "TRUNCATE TABLE \"$table\"" because DELETE is a lot quicker
// than TRUNCATE which is very relevant during unit testing. Using TRUNCATE will lead to an
// approximately 50% increase it the total time of running unit tests.
//
// Using max(ID) to determine if the table should reset its auto-increment, rather than using
// SELECT "AUTO_INCREMENT" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
// after deleting from the table, because in MySQL 8, under certain conditions, notably
// when running behat, sometimes the auto-increment was being reset to 2 for unknown reasons
$self = $this;
$fn = function () use ($self, $table) {
$maxID = $self->query("SELECT MAX(ID) FROM \"$table\"")->value();
$self->query("DELETE FROM \"$table\"");
if ($maxID > 0) {
$self->query("ALTER TABLE \"$table\" AUTO_INCREMENT = 1");
}
};
if ($this->supportsTransactions()) {
$this->withTransaction($fn);
} else {
$fn();
$this->query("DELETE FROM \"$table\"");

// Check if resetting the auto-increment is needed

// First run ANALYZE TABLE to reset table stats which are cached for 24 hours by
// default in MySQL 8
$this->query("ANALYZE TABLE \"$table\"");

$autoIncrement = $this->preparedQuery(
'SELECT "AUTO_INCREMENT" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?',
[ $this->getSelectedDatabase(), $table]
)->value();

if ($autoIncrement > 1) {
$this->query("ALTER TABLE \"$table\" AUTO_INCREMENT = 1");
}
}
}

0 comments on commit 9e6ecde

Please sign in to comment.