Hallo Lug!
Ich habe folgende Tabelle:
CREATE TABLE pages ( sequences longtext COLLATE utf8_unicode_ci NOT NULL, revid int(11) NOT NULL, pageid int(11) NOT NULL, title varchar(250) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (revid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Sie ist 3GB groß und enthält 550k Einträge. Die sequences sind Text.
Es gibt drei Befehle, die ich auf der Tabelle ausführe: INSERT INTO pages (sequences,revid,pageid,title) VALUES(:sequences,:revid,:pageid,:title) SELECT sequences FROM pages WHERE revid=:revid (30x pro Sekunde) SELECT count(*) AS pages FROM pages
Jetzt gibt es zwei Probleme. Erstens wächst der Speicherbedarf von MySQL fast auf die Größe der Tabelle. Gebe ich ihm nicht den RAM, also momentan innodb_buffer_pool_size=3G, wird die Ausführungszeit der Queries extrem lang, und die CPU-Last steigt ins Unermessliche.
Zweites kostet es 25% CPU, wenn ich jede Sekunde das SELECT count(*) ausführe. Egal, ob sich an der Tabelle überhaupt etwas ändert. Diesen SELECT habe ich testweise in einen VIEW gepackt, aber das ändert nichts. Fordere ich zweimal pro Sekunde SELECT count(*) an, verdoppelt sich die Last auf 50%.
Thomas