Ich habe einen Entwicklungsserver, den ich kürzlich von 14.04 auf 16.04 aktualisiert habe.
Ich habe eine Datenbank 'Algebra', die Daten für meine Website algebra.com hostet. Es handelt sich um eine Q & A-Website mit Fragen und Antworten und einer Beziehung von 1 zu N.
Nach dem Upgrade hat sich die Leistung derselben Datenbankabfragen dramatisch verschlechtert.
Beispielsweise dauerte eine Abfrage, bei der Fragen und Antworten nach Fragen-ID verknüpft werden, weniger als eine halbe Sekunde. Nach dem Upgrade dauert es eine Minute.
Da es sich um einen Entwicklungsserver handelt, kann ich ihn mit dem Produktionsserver vergleichen, auf dem Ubuntu 14.04 noch ausgeführt wird und dessen Abfrage nur 0,38 Sekunden dauert.
Hier sind die Abfragepläne
mysql> explain SELECT
-> questions.id, questions.email, questions.topic, questions.question,
-> questions.date,
-> questions.deleted,
-> questions.is_spam,
-> questions.solved,
->
-> questions.tb_id,
-> questions.tb_isbn,
-> questions.tb_title,
-> questions.tb_edition,
-> questions.tb_chapter,
-> questions.tb_problem,
->
-> solutions.id, solutions.author author, solutions.date, solutions.answer
-> FROM questions, solutions
-> WHERE
-> questions.solved = 1
-> AND questions.id = solutions.question
-> AND questions.deleted != 1
-> AND questions.is_spam != 1
-> ORDER BY solutions.date DESC
-> LIMIT 50;
Auf dem "Good Server":
+----+-------------+-----------+--------+-----------------------+---------+---------+----------------------------+--------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+--------+-----------------------+---------+---------+----------------------------+--------+----------------+
| 1 | SIMPLE | solutions | ALL | solutions_by_question | NULL | NULL | NULL | 650770 | Using filesort |
| 1 | SIMPLE | questions | eq_ref | PRIMARY | PRIMARY | 4 | algebra.solutions.question | 1 | Using where |
+----+-------------+-----------+--------+-----------------------+---------+---------+----------------------------+--------+----------------+
2 rows in set (0.00 sec)
Auf dem "Bad Server:
+----+-------------+-----------+------------+------+-----------------------+-----------------------+---------+----------------------+--------+----------+----------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------+------------+------+-----------------------+-----------------------+---------+----------------------+--------+----------+----------------------------------------------+
| 1 | SIMPLE | questions | NULL | ALL | PRIMARY | NULL | NULL | NULL | 482186 | 8.10 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | solutions | NULL | ref | solutions_by_question | solutions_by_question | 4 | algebra.questions.id | 1 | 100.00 | Using index condition |
+----+-------------+-----------+------------+------+-----------------------+-----------------------+---------+----------------------+--------+----------+----------------------------------------------+
Der Datenbankinhalt ist mehr oder weniger derselbe, die Entwicklungsdatenbank ist eine Sicherung des Servers von letzter Nacht.
Irgendwelche Ideen, wo ich diese wilde Gänsejagd beginnen kann, um den Leistungsabfall zu verstehen?
Vielen Dank!