Überprüfen Sie den Wert von innodb_thread_concurrency.
Bei meinem System führte eine Erhöhung des Werts von 8 auf 32 gemäß den Richtlinien in der MySQL-Dokumentation zu einer erkennbaren Verringerung der Anzahl der Threads, die gleichzeitig den Status "Elemente freigeben " melden. Außerdem ist die beobachtete durchschnittliche Abfragezeit um eine Größenordnung gesunken.
Während dies einen großen Unterschied in der Server-Gesamtleistung ausmachte, war dies nicht die Silberkugel für die Befreiung von Gegenständen. Mein Hardware-Ökosystem lässt mich die Hypothese aufkommen, dass dieser Zustand hauptsächlich auf Systemen mit "langsamen" Festplatten (RAID 1 mit 2x10.000 Festplatten) und auf Systemen mit schnellerem Speicher (RAID 10 mit 12x15.000 Festplatten) auftritt. Daher kann auch eine Überprüfung der Festplattenleistung erforderlich sein.
Viel Glück!
Ebenfalls:
Es ist erwähnenswert, dass der Standardwert von innodb_thread_concurrency je nach verwendetem 5.0-Punkt-Release radikal unterschiedlich ist.
Der Standardwert wurde mehrmals geändert: 8 vor MySQL 5.0.8, 20 (unendlich) von 5.0.8 bis 5.0.18, 0 (unendlich) von 5.0.19 bis 5.0.20 und 8 (endlich) von 5.0.21 auf. - Quelle
Dies bedeutet, dass ein scheinbar harmloses Upgrade von 5.0.20 auf 5.0.21 die Standardeinstellung von unendlich auf 8 änderte und die Leistungsauswirkungen mit sich brachte.
Das Freigeben von Elementen ist eine Abfrageausführungsphase, in der temporäre Strukturen, Puffer usw. freigegeben werden. In dieser Phase wird ein Teil des Abfragecaches ausgeführt, aber dies ist nicht das einzige, was dort geschieht. Ich würde vorschlagen, SHOW PROFILES zu verwenden, um zu sehen, wie lange diese Phase im Verhältnis zu anderen Phasen dauert, und wenn die Zeit, die verbraucht wird, ein Problem darstellt, Fehlerbehebung mit Tools wie dem Profiler und dem Oprofile für Arme.
quelle
Es gab einen Fehlerbericht zu diesem Problem, der das Freigeben von Elementen und den Abfragecache betraf . Obwohl der Bug geschlossen ist, wurde innodb_thread_concurrency nicht erwähnt .
Zufällig habe ich im Mai mit Ronald Bradford bei Percona Live NYC gesprochen. Ich erzählte ihm von einer Situation, in der ich innodb_thread_concurrency getweeked habe, weil der mehrfache InnoDB-Pufferpool von MySQL 5.5 eine Menge Thread-Sperren verursachte und ich vermutete, dass sich die zwischengespeicherten Daten, die ich am wahrscheinlichsten benötigte, auf die mehrfachen Pufferpools verteilt hatten.
Er sagte mir klar, dass ich niemals Werte gegen innodb_thread_concurrency setzen sollte. Es sei immer der Standardwert, der jetzt Null (0) ist. Auf diese Weise können Sie vom InnoDB-Speicher selbst entscheiden, wie viele innodb_concurrency_tickets generiert werden sollen. Dies ist es, was die unendliche Parallelität bewirkt.
Das Freigeben von Elementen tritt höchstwahrscheinlich häufiger auf, wenn wir innodb_thread_concurrency Beschränkungen auferlegen. Das sollte immer Null sein (0). Ich würde ein Risiko eingehen und innodb_concurrency_tickets erhöhen und sehen, ob es hilft oder nicht.
quelle
Wir hatten ein Problem mit genau den gleichen Symptomen. Es stellte sich heraus, dass der Datenträger mit den InnoDB-Protokolldateien voll ist. Eine Prüfung wert.
quelle
Noch ein Hinweis: Könnte innodb fsync () sein. Versuchen Sie die Einstellung
innodb_flush_log_at_trx_commit = 2
In my.cnf
Die innodb-Protokolldatei wird dann alle 1-2 Sekunden auf die Festplatte geschrieben, stattdessen bei jedem Commit ob. Leichte Beeinträchtigung der Datenintegrität, großer Geschwindigkeitsgewinn.
quelle