Typo3-DB Optimierungen

  • maxhb maxhb
    Flash Gordon
    0 x
    2148 Beiträge
    0 Hilfreiche Beiträge
    23. 03. 2006, 16:23

    Hallo!
    Habe einw enig mit der Typo3-DB rumexperimentiert und würde gern mit Euch das vorläufige Ergebnis diskutieren:
    Das Original-Posting stammt von http://www.typo3forum.net/forum/tools-und-tipps/5473-typo3-db-optimierung.html#post24464

    [quote="maxhb"]Hi!
    Beim Anschauen der Typo3-Tabellen ist mir aufgefallen, dass dort Indizes sehr serh sparsam eingesetzt werden.
    Wenn man mal darüber nachdenkt, dann gibt es aber diverse Spalten, die sich als Index nahezu anbieten. Dies sind insbesondere die Spalten "hidden", "deleted" und "sorting".

    Ich hab' mal einen kleinen Versuch gestartet und meine Typo3-Db folgendermaßen modifiziert:
    [code]ALTER TABLE `cache_hash` ADD INDEX ( `hash` ( 4 ) ) ;

    ALTER TABLE `pages` ADD INDEX ( `deleted` ( 1 ) ) ;
    ALTER TABLE `pages` ADD INDEX ( `hidden` ( 1 ) ) ;
    ALTER TABLE `pages` ADD INDEX ( `doktype` );
    ALTER TABLE `pages` ADD INDEX ( `sorting` );

    ALTER TABLE `tt_content` ADD INDEX ( `deleted` ( 1 ) ) ;
    ALTER TABLE `tt_content` ADD INDEX ( `hidden` ( 1 ) ) ;

    ALTER TABLE `sys_template` ADD INDEX ( `deleted` ( 1 ) ) ;
    ALTER TABLE `sys_template` ADD INDEX ( `hidden` ( 1 ) ) ;
    ALTER TABLE `sys_template` ADD INDEX ( `sorting` );[/code] Mit diesen SQL-Kommandos werden eine Reihe von zusätzlichen Indizes angelegt (Keine Angst, der Vorgang kann problemlos wieder Rückgängig gemacht werden!).

    Wie man sieht sind das noch längst nicht alle Tabellen, sondern nur die, die mir so auf Anhieb als besonders wichtig aufgefallen sind.

    Nimmt man jetzt mal nur die reine Zeit, die DB-Anfragen zur Anzeige einer Seite benötigen, dann ergeben obige Anpassungen bei mir einen Speedup um den Faktor 300.
    Konkret ist die mittlere Zeit für DB-Anfragen von 0,122s auf 0,0004s gesunden.

    Das ist zwar in absoluter Zeit nicht die Welt, aber der Faktor 300 steht erstmal als grobe Abschätzung im Raum.

    Mir ist klar, dass die Zeit, die DB-Anfragen benötigen nur ein Teil der CPU-Leistung sind, die Typo3 benötigt, aber wenn man solche Zugewinne geschenkt bekommt...

    Die Messung der DB-Zugriffszeiten habe ich übrigens durch anpassen der Datei t3lib/class.t3lib_db.php vorgenommen und mr dort ein Logfile erstellen lassen. Habe dort die Methode exec_SELECTquery aufgebohrt:

    1. function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='') {
    2. // Start
    3. static $total_time = 0;
    4. $logfile = '/tmp/max/typo3.log';
    5.  
    6. if($total_time == 0) {
    7. $message = str_repeat('-',80) . "\n";
    8. } else {
    9. $message = '';
    10. }
    11. $message .= str_replace("\n"," ",$this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit));
    12. $message = preg_replace("/(\s+)/"," ",$message);
    13. if(!function_exists('getmicrotime')) {
    14. function getmicrotime() {
    15. list($usec, $sec) = explode(" ",microtime());
    16. return ((float)$usec + (float)$sec);
    17. }
    18. }
    19.  
    20. $start = getmicrotime();
    21. // Ende
    22.  
    23. $res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->link);
    24. if ($this->debugOutput) $this->debug('exec_SELECTquery');
    25.  
    26. // Start
    27. $ende = getmicrotime();
    28.  
    29. $time = $ende - $start;
    30. $total_time += $time;
    31.  
    32. $message = $time . " (" . $total_time . ")\n" . $message . "\n";
    33. error_log($message,3,$logfile);
    34. // Ende
    35. return $res;
    36. }

    Vielleicht mag ja mal jemand einen ähnlichen Versuch starten und seine Ergebnisse hier posten.

    Ganz allgemein frage ich mich, ob die Tatsache, dass Typo3 so wenige Indizes verwendet Absicht ist oder ob sich noch niemand die Mühe gemacht hat, das DB-Modell mal genauer anzuschauen.

    cu
    maxhb[/quote]

    CU
    maxhb


  • 1
  • just2b just2b
    TYPO3-Yoda
    0 x
    18741 Beiträge
    2 Hilfreiche Beiträge
    23. 03. 2006, 16:28

    Hallo,

    hast du das schon in die dev-liste gepostet?

    lg georg

  • maxhb maxhb
    Flash Gordon
    0 x
    2148 Beiträge
    0 Hilfreiche Beiträge
    23. 03. 2006, 16:37

    [quote="just2b"]hast du das schon in die dev-liste gepostet?[/quote]
    Ne, wollte erstmal nachfragen, ob jemand diese Beobchtungen nachvollziehen kann (außerdem müßte ich den Text wohl erst noch übersetzen oder?).
    Oder ob es eine einfach und plausible Erklärung gibt, warum diese Felder bisher keine Indizes sind.

    Kann mir irgendwie garnicht vorstellen, dass noch niemand daran gedacht hat, die Typo3-DB Struktur per Indizes zu optimieren... liegt ja irgendwie auf der Hand #paralyzed#

    CU
    maxhb

  • just2b just2b
    TYPO3-Yoda
    0 x
    18741 Beiträge
    2 Hilfreiche Beiträge
    23. 03. 2006, 16:38

    [quote="maxhb"]
    Ne, wollte erstmal nachfragen, ob jemand diese Beobchtungen nachvollziehen kann.
    Oder ob es eine einfach udn plausible Erklärung gibt, warum diese Felder bisher keine Indizes sind.
    [/quote]
    das werden dir wohl die Core-Leute beantworten können ;)

    lg georg
    PS: RS-Fehler in deiner sig

  • maxhb maxhb
    Flash Gordon
    0 x
    2148 Beiträge
    0 Hilfreiche Beiträge
    23. 03. 2006, 21:13

    [quote="just2b"]hast du das schon in die dev-liste gepostet?[/quote]
    Ist mittlerweile geschen.

    CU
    maxhb

  • sventb sventb
    R2-D2
    0 x
    75 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2016, 07:47

    Ich wundere mich auch gerade, wieso bei TYPO3 auch in der neuesten Version auf diese Spalten keine Indizes gesetzt sind. Da die DB-Abfragen ja meistens "AND deleted=0 AND hidden=0" enthalten, sollte es doch Sinn machen, einen Index darauf zu setzen:

    [code]KEY visibility (deleted, hidden)[/code]

  • 1