2 Stimmen

Bewertung Ort

Ich versuche, eine Bewertungstabelle mit folgender Quittung zu erstellen

Zuweisung von Plätzen in der Bewertung (MySQL, PHP)

aber meine Datenbank ist stark belastet.

Ich habe versucht, keine Tabelle zu erstellen, sondern eine SPEICHERTABELLE zu verwenden und sie mit folgender SQL-Abfrage zu aktualisieren

insert into tops (uid) select uid from users order by exp desc;

erhielt aber den folgenden MySQL-Fehler

Deadlock beim Versuch, eine Sperre zu erhalten, gefunden; versuchen Sie, die Transaktion neu zu starten

weil es zu viele Abfragen gibt, bis SQL select ausgeführt wird.

Wie lässt sich dieses Problem lösen?

P.S. CREATE TABLE tops as SELECT Arbeit fast gut, außer hohe Server-Last... bis zu Last Durchschnitt: 50 wenn Tops nicht Speicher Tabelle sind.

Meine Tabelle Benutzer hat fast 4,5 Millionen Zeilen.

Danke für jeden Ratschlag.

0voto

plague Punkte 1858
  1. Zu beachten ist, dass MEMORY-Tabellen Tabellensperren wie MYISAM handhaben (beide führen vollständige Tabellensperren durch).

4,5 Millionen Zeilen sind eine Menge von Einfügungen aus einem Select. Ich denke, ein guter Ansatz wäre, ein Skript zu schreiben, das die Daten der Benutzertabelle in Stücken abruft und Batch-Einfügungen vornimmt.

0voto

bash- Punkte 5844

Sie können verwenden InnoDB anstelle der Speichertabelle, wenn Sie eine hohe Gleichzeitigkeit benötigen.

InnoDB unterstützt Sperren auf Zeilenebene y MVCC (Multiversion Concurrency Control), die Sie meiner Meinung nach benötigen. Memory y MyISAM wäre schneller (beim Einfügen/Aktualisieren), aber wenn es häufig zu Deadlocks kommt, dann InnoDB wäre der richtige Weg.

Wenn InnoDB Ihnen Leistungsprobleme bei hoher Last bereitet, liegt das höchstwahrscheinlich an fragmentierten Indizes und zu vielen Seitensplits. Sie können dieses Problem lösen, indem Sie in regelmäßigen Abständen ALTER TABLE innodb_tbl_name ENGINE=InnoDB was die Tabelle und damit auch die Indizes für eine optimale Leistung neu aufbauen würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X