Wir haben Percona OSC für eine Weile verwendet, um Änderungen an unserem MySQL-Schema vorzunehmen, ohne die Tabellen zu sperren, und es hat gut funktioniert, in der Regel eine neue Spalte oder einen Index zu "großen" innodb -Tabellen (~ 3,8 Millionen Zeilen) hinzuzufügen ein paar Stunden.Warum funktioniert Percona pt-Online-Schema-Änderung so schlecht?
Die letzte Aktualisierung, die ich versuchte, war jedoch nur zu 40% nach 7 Stunden (über Nacht, während unserer ruhigsten Periode) abgeschlossen, mit einer Schätzung von weiteren 11 Stunden (die weiter zunimmt). Alle 4 GB des verfügbaren Speichers auf dem RedHat-Server wurden genutzt - 32 GB, die wir kürzlich von 16 GB aufgerüstet haben.
Also, was ist hier los? Warum konnte die Zeit plötzlich so hoch gesprungen sein? Haben wir gerade eine Art Schwelle erreicht, mit der percona/mysql/der Server nicht umgehen kann? Gibt es Konfigurationen, die wir optimieren können, um die Leistung zu verbessern?
Die Tabelle enthält 32 Spalten und 12 Indizes (einschließlich Primärschlüssel und 2 anderen eindeutigen Indizes). Ich weiß, das ist viel, aber wie ich bis vor kurzem sagte, hat es gut funktioniert.
Die Tabelle weist auch mehrere Fremdschlüssel auf, auf die wir mit der Methode drop_swap aktualisieren.
Der vollständige Befehl, den ich verwendet wurde:
pt-online-schema-change --execute --ask-pass --set-vars innodb_lock_wait_timeout=50 --alter-foreign-keys-method=drop_swap
--alter "ADD is_current TINYINT(1) DEFAULT '1' NOT NULL" u=admin,p=XXXXXXX,D=xxxxx_live,t=applicant
Die innodb_buffer_pool_size derzeit 2147483648 gesetzt ist - sollte dies erhöht werden? Wenn ja, um wie viel? Der Webserver (apache/php/symfony) läuft ebenfalls auf dieser Box.
Die letzte Änderung, die ich an dieser bestimmten Tabelle vorgenommen habe, war, die Sortierung von 1 Feld in utf8_bin zu ändern (die anderen Felder sind utf8_unicode_ci) - könnte das einen Unterschied machen?