- App
- WoltLab Suite Forum
Hallo,
wenn ich unter "Anzeigen aktualisieren" die Funktion "Forenstatistiken aktualisieren" ausführe, wird folgendes SQL-Statement ausgeführt:
(aus der UpdateBoardsAction.class.php kopiert)
$sql = "UPDATE wbb".WBB_N."_board board
SET threads = (
SELECT COUNT(*)
FROM wbb".WBB_N."_thread
WHERE boardID = board.boardID
AND isDeleted = 0
AND isDisabled = 0
),
posts = (
SELECT IFNULL(SUM(replies), 0) + COUNT(*)
FROM wbb".WBB_N."_thread thread
WHERE boardID = board.boardID
AND isDeleted = 0
AND isDisabled = 0
)
WHERE board.boardID IN (0".$boardIDs.")";
Diese Abfrage bringt bei uns bei der Ausführung den Boardbetrieb für 20 Minuten zum Erliegen, die User kriegen erst keine Antworten mehr zu ihren Requests, und dann irgendwann die Fehlermeldung "too many connections". Die Datenbank braucht dann ziemlich lange, bis sie sich davon erholt hat.
Die Abfrage setzt zum Updaten offenbar ein Lock auf die board-Tabelle, das aufrechterhalten wird, bis die recht aufwendigen Unterabfragen durchgelaufen sind.
Wäre schön, wenn Ihr diese Abfrage in zukünftigen Versionen etwas zerlegen oder eine temporäre Tabelle benutzen könntet.
Daten zum Board:
WBB 3.1.3 auf Dedicated Server
Themen: 70 000
Datenbankgröße: 1,76 GB