Ich habe eine Datenbank "Algebra" mit einer Tabelle "Fragen" mit 1.033.990 Zeilen. Die Datensätze haben das Attribut "Gelöst" INT. Ich habe eine einfache Frage
select count(*) from questions where solved = 0
Ich habe zwei Server mit ähnlichen CPUs. Auf beiden Servern sind die Tabellen gleich. (Datenbank ist eine Replik der Produktion). Sie sind auf SSDs. Ein Server hat Ubuntu 14.04 mit MySQL 5.5.49 und ein anderer Server hat Ubuntu 16.04 mit MySQL 5.7.12.
Das Problem ist, dass diese Abfrage unter MySQL 5.5 nur 0,009 Sekunden dauert, unter MySQL 5.7 jedoch 0,304 Sekunden. Welches ist 34-mal langsamer !!!
Die Abfragepläne sind ungefähr ähnlich:
Langsamer Server:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE questions NULL index NULL by_topic_solved 97 NULL 1033990 10.00 Using where; Using index
Schneller Server:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE questions index NULL by_topic_solved 97 NULL 1033989 Using where; Using index
Warum dies der Fall sein könnte, verblüfft mich. Ich habe andere, kompliziertere Leistungsprobleme mit diesem neuen 5.7-Setup gesehen, aber dies ist das einfachste Problem, das es in Bezug auf die zugrunde liegende Abfrage zu lösen gilt.
Ich begreife, um die Erklärung dafür zu finden oder wo ich anfangen soll. my.cnf war zwischen den beiden in etwa ähnlich. Vorschläge werden dankbar angenommen.
quelle
Antworten:
Ich habe dieses Problem vollständig verstanden. Was sich geändert hat, ist, dass in der neuen Version von mysql der Abfragecache aufgrund der Standardeinstellung von query_cache_type = OFF deaktiviert ist. Als ich den Abfragecache durch Setzen von query_cache_type = 1 wieder aktivierte, war die Leistung gleich wieder besser. Da meine Site 100-mal mehr SELECT-Abfragen als INSERT / UPDATE-Abfragen verwendet, ist die Verwendung des Abfrage-Caches für mich sinnvoll. Vielen Dank, dass Sie mich darauf hingewiesen haben, in diese Richtung zu schauen!
quelle