Hallo!
Mal eine kleine Erfahrung von mir, die mir meine Seite um bis zu dem Faktor 10 schneller gemacht hat. Sollte das schon bekannt sein, bitte löschen oder so ... ;-)
Ich betreibe eine Seite mit TYPO3 4.1.6, YAML und mm_forum. Dabei habe ich auch CoolUri eingesetzt. Ich habe dieses stark auf mm_forum angepasst, so dass so gut wie keine Paramter mehr in den URLs vorkommen. Dies führte zu vielen Einträgen in der Datenbank-Tabelle "link_cache" (mehr als 40.000, das Forum hat viele Einträge und die PNs sind auch beliebt ...)
Das führte aber dazu, dass bei ca. 30 eingeloggten Usern die Antwortzeiten auf bis zu 30 Sekunden anstiegen (2-3 wären ok gewesen). Nach einigem Forschen fand ich durch das MStudieren der slow-queries.log von mySQL heraus, dass es fast immer CoolURI-Queries waren, die sehr lange Laufzeiten hatten. Es stellte sich heraus, dass eine Query der Form
SELECT *, DATEDIFF(NOW(),tstamp) AS daydiff FROM link_cache WHERE params='a:1:{s:2:\"id\";s:2:\"90\";}';
(nur ein Beispiel) lange Antwortzeiten lieferte. Ein Hinzufügen eines Indizes über 'params' mit einer Länge von 1024 (es handelt sich um einen Blob, ein varchar wäre an dieser Stelle für's Indizieren besser gewesen ...) hat das Problem mit einem Schlag gelöst. Ich habe wieder Antwortzeiten um die 1 bis 2 Sekunden ... so muss das sein. Die Tabelle sieht nun so aus:
CREATE TABLE `link_cache` (
`id` int(10) unsigned NOT NULL auto_increment,
`params` blob,
`url` varchar(255) default NULL,
`tstamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`crdatetime` datetime default NULL,
`sticky` tinyint(1) unsigned default '0',
PRIMARY KEY (`id`),
KEY `url` (`url`),
KEY `params` (`params`(1000))
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Die Größe des indizierten Bereichs kann auf die eigenen Bedürfnisse angepaßt werden.
Evtl. hilft es je jemandem weiter ...
Gruß, mamuesp