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