Diese Frage kann wahrscheinlich auch auf StackOverflow gestellt werden, aber ich werde es hier zuerst versuchen ...
Die Leistung von INSERT- und UPDATE-Anweisungen in unserer Datenbank scheint sich zu verschlechtern und die Leistung unserer Web-App zu beeinträchtigen.
Tabellen sind InnoDB und die Anwendung verwendet Transaktionen. Gibt es einfache Verbesserungen, die ich vornehmen kann, um die Dinge zu beschleunigen?
Ich glaube, wir haben einige Probleme mit Sperren. Wie kann ich das herausfinden?
mysql
performance
innodb
mmattax
quelle
quelle
Antworten:
Überprüfen Sie, ob Ihre Hardware und Ihr Betriebssystem richtig konfiguriert und optimiert sind:
Überprüfen Sie, ob Ihre MySQL / InnoDB-Instanz richtig eingestellt ist:
Load data infile
Befehl ist viel schneller für Serien von Einfügungen.select count(*) from table;
ist für Innodb viel langsamer als für Myisam.Einige nützliche Links:
quelle
Mit der Standardkonfiguration von innoDB können Sie nur Transaktionen schreiben und auf die Festplatte übertragen. Wenn Sie ein wenig ACID verlieren können, experimentieren Sie mit innodb_flush_log_at_trx_commit. Setzen Sie den Wert auf 0, um das Protokoll etwa jede Sekunde auf die Festplatte zu schreiben und zu löschen. Auf 1 (Standard) setzen, um bei jedem Commit zu schreiben und zu leeren. Auf 2 setzen, um nach jedem Commit in die Protokolldatei zu schreiben, aber nur einmal pro Sekunde zu leeren.
Wenn Sie mit dem Verlust von 1s von Transaktionen umgehen können, kann dies eine großartige Möglichkeit sein, die Schreibleistung erheblich zu verbessern.
Achten Sie auch darauf, was Ihre Festplatten tun. RAID 10> RAID 5 für Schreibvorgänge auf Kosten einer zusätzlichen Festplatte.
quelle
Sperrprobleme werden anhand des Verbindungsstatus in angezeigt
show full processlist;
Lesen Sie die
my.cnf
und MySQL-Dokumentation. Konfigurationsmöglichkeiten sind sehr gut dokumentiert.Im Allgemeinen möchten Sie so viel wie möglich im Speicher verarbeiten. Für die Abfrageoptimierung bedeutet dies, dass temporäre Tabellen vermieden werden. Richtige Anwendung von Indizes.
Die Optimierung richtet sich nach Ihrer bevorzugten Datenbank-Engine und Anwendungsarchitektur. Es gibt erhebliche Ressourcen, die eine Internetsuche bereits entfernt haben.
quelle
Durch Einschalten der Innodb-Monitore können Sie die Ursachen für Sperren und Deadlocks ermitteln:
SHOW ENGINE INNODB STATUS und die InnoDB-Monitore
quelle
InnoDB ist ein ziemlich guter Motor. Es hängt jedoch stark davon ab, „gestimmt“ zu sein. Eine Sache ist, dass innoDB etwas länger dauern kann als MyISAM, wenn sich Ihre Einfügungen nicht in der Reihenfolge zunehmender Primärschlüssel befinden. Dies kann leicht überwunden werden, indem eine höhere innodb_buffer_pool_size festgelegt wird. Mein Vorschlag ist, es auf 60-70% Ihres gesamten RAM festzulegen. Ich betreibe derzeit 4 solcher Server in der Produktion und füge ungefähr 3,5 Millionen Zeilen pro Minute ein. Sie haben bereits fast 3 Terabyte. InnoDB musste es sein, wegen der hochkonkurrierenden Inserts. Es gibt weitere Möglichkeiten, um Einfügungen zu beschleunigen. Und ich habe einige verglichen.
quelle