MySQL Datenbank + PHP Anwendung "langsam"

Aredon

Benutzer
Beiträge
6
Hallo,

ich habe da ein gröberes Problem gestern feststellen müssen mit meiner MySQL-Datenbank...

Ich war mitten im Programmieren und beim Testen, plötzlich wurden die PHP-Seitenaufrufe immer langsamer und bis zu 20 Sekunden dauerte es, dass die Seite geladen wurde. Andere Anwendungen waren nicht betroffen, also sprich diese, die keine Datenbankanbindung hatten. Achja, ich Hoste den Server selbst und die CPU war unauffällig, der RAM allerdings auch.

Laut PHPMyAdmin sollte ich den Cache erhöhen, allerdings bin ich mir nicht sicher, welche Variablen auf welche Werte zu setzen. (Screenshot im Anhang).

Stunden später war dann wieder alles "normal". Habt ihr eine Idee ob das jetzt am MySQL-Cache liegen kann, oder etwas anderem oder bin ich am ganz falschem Ansatz? Hattet ihr das auch schon?

MfG,
PatrickBildschirmfoto vom 2015-09-30 03:40:13.png
 
Werbung:
Hallo, leider hab ich keinen Screenshot von der Prozessliste gemacht :(

Weiters hatte ich keine Slow-Query-Logs aktiviert, sodass ich erst wieder etwas warten muss, bis ich dieses Fehlverhalten wieder bekomme und dies dann auslesen kann.

Ich melde mich dann, sobald ich neues weiß.
 
Klingt für mich nach einer vor Dir programmierten Sache, oder? Dann solltest Du aber eigentlich schon mit so einfachen Dingen wie dem Slow-Log täglich arbyten ...
 
Sodala, da bin ich wieder... laut dem Slow-Query sind es mehrere Tabellen die betroffen sind, jedoch immer abwechselnd, und nicht immer nur die selbe. Habe die Indexes nun auch optimiert. Scheinte gleich mal besser zu laufen, aber nächsten Tag war dann wieder ne andere Tabelle betroffen :confused: Wieder optimiert... Wieder besser und wieder ne andere Tabelle, äh jetzt hab ich alle mal optimiert... bis jetzt kann ich nichts konkreteres dazu erstmal sagen (wahrscheinlich morgen erst wieder). Hier mal ein kleiner Auszug vom Log:

----------------------
# Time: 151006 3:14:27
# User@Host: project[project] @ localhost []
# Query_time: 2.157774 Lock_time: 0.000030 Rows_sent: 0 Rows_examined: 1
SET timestamp=1444094067;
UPDATE cookies SET try = '0', expiry = '1449278065' WHERE user_id = '1';
# Time: 151006 3:20:02
# User@Host: root[root] @ localhost []
# Query_time: 3.827951 Lock_time: 0.000107 Rows_sent: 1 Rows_examined: 1
SET timestamp=1444094402;
SELECT *,
`TABLE_SCHEMA` AS `Db`,
`TABLE_NAME` AS `Name`,
`TABLE_TYPE` AS `TABLE_TYPE`,
`ENGINE` AS `Engine`,
`ENGINE` AS `Type`,
`VERSION` AS `Version`,
`ROW_FORMAT` AS `Row_format`,
`TABLE_ROWS` AS `Rows`,
`AVG_ROW_LENGTH` AS `Avg_row_length`,
`DATA_LENGTH` AS `Data_length`,
`MAX_DATA_LENGTH` AS `Max_data_length`,
`INDEX_LENGTH` AS `Index_length`,
`DATA_FREE` AS `Data_free`,
`AUTO_INCREMENT` AS `Auto_increment`,
`CREATE_TIME` AS `Create_time`,
`UPDATE_TIME` AS `Update_time`,
`CHECK_TIME` AS `Check_time`,
`TABLE_COLLATION` AS `Collation`,
`CHECKSUM` AS `Checksum`,
`CREATE_OPTIONS` AS `Create_options`,
`TABLE_COMMENT` AS `Comment`
FROM `information_schema`.`TABLES` t
WHERE BINARY `TABLE_SCHEMA`
IN ('project')
AND t.`TABLE_NAME` = 'cookies' ORDER BY Name ASC;
# Time: 151006 3:23:03
# User@Host: project[project] @ localhost []
# Query_time: 2.740511 Lock_time: 0.000056 Rows_sent: 0 Rows_examined: 5
SET timestamp=1444094583;
SELECT * FROM tbl_one WHERE type = '0' AND info = '0' AND expired < '1440000000';
---------------------------

Oder grenze ich vllt. etwa schon an die MySQL-Limits?
 
Select *, <lange Liste von Spalten> ist schon mal reichlich dumm.

Davon abgesehen ist das finden lang laufender Abfragen der erste Schritt. Der nächste wäre dann, sich das mit Explain anzuschauen. Beim MySQL-Explain bitte Kotztüte in Reichweite haben ;-)

Wie hast Du denn Indexe optimiert, wenn ich mal fragen darf?
 
Select *, <lange Liste von Spalten> ist schon mal reichlich dumm.
Stimmt, denn diese Liste wird nicht von der PHP-Applikation angefordert (siehe User: root), sondern von PHPMYAdmin, denn da konnte ich auch wieder nichts verwalten, da die Seite wieder gässlich am hängen war :eek:

Habe die Spalten mit id indiziert, das hat sich auch dann extrem verbessert.

Du magst MySQL scheinbar nicht :D Und du meinst nicht, dass es am Cache liegen könnte (z.B.: zu klein)?
 
Stimmt, denn diese Liste wird nicht von der PHP-Applikation angefordert (siehe User: root), sondern von PHPMYAdmin, denn da konnte ich auch wieder nichts verwalten, da die Seite wieder gässlich am hängen war :eek:

Hä?

Habe die Spalten mit id indiziert, das hat sich auch dann extrem verbessert.

Es gibt Regeln, nach denen man Indexe setzt.

Du magst MySQL scheinbar nicht :D

Absolut korrekt.

Und du meinst nicht, dass es am Cache liegen könnte (z.B.: zu klein)?

Cache? Welcher?

Die Geschwindigkeit einer DB-Abfrage hängt maßgeblich am Abfrageplan (ich rede jetzt mal von Datenmengen, die um viele Größenordnungen größer als RAM und Caches sind).
 
PHPMyAdmin fragt ja nach allem ab, was für einen sichtbar an Tabellen und Datenbanken ist, deswegen diese lange Liste (da ich als root eingeloggt war). So eine Abfrage macht meine PHP-Anwendung nicht (da ich für jede Anwendung einen eigenen Benutzer / Datenbank habe). Verständlicher?

In meinen Tabellen sind sowieso nur 5-20 Datensätze vorhanden, also sind das auch keine großen Datenmengen die die Datenbank bremsen...
 
Was haben Sekunden mit Datensätzen zu tun? Trotzdem habe ich mit bis zu 20 Sekunden andauernden Abfragen zu tun.

Ich denke, wir kommen hier nicht weiter.
 
Werbung:
Zurück
Oben