Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten Ansicht
  #1  
Alt 22.03.06, 21:01
Benutzerbild von maxhb
TYPO3 Forum Team
Moderator
 
Registriert seit: 19.08.04
Ort: Bremen
Alter: 36
Beiträge: 1.528
Verwendung von Indizes

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` );
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:
Code:
    function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='')    {
        // Start
        static $total_time = 0;
        $logfile = '/tmp/max/typo3.log';
 
        if($total_time == 0) {
            $message = str_repeat('-',80) . "\n";
        } else {
            $message = '';
        }
        $message .= str_replace("\n"," ",$this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit));
        $message = preg_replace("/(\s+)/"," ",$message);
        if(!function_exists('getmicrotime')) {
            function getmicrotime() {
            list($usec, $sec) = explode(" ",microtime()); 
            return ((float)$usec + (float)$sec); 
            }
        }
 
        $start = getmicrotime();
        // Ende
 
        $res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->link);
        if ($this->debugOutput)    $this->debug('exec_SELECTquery');
 
        // Start
        $ende = getmicrotime();
 
        $time = $ende - $start;
        $total_time += $time;
 
        $message = $time . " (" . $total_time . ")\n" . $message . "\n";
        error_log($message,3,$logfile);
        // Ende
        return $res;
    }
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
__________________
FreeBSD || MySQL 5.x || TYPO3 3.6 - 4.2

Meine Stadt, meine Firma, mein Redaktionssystem.

Geändert von mic_jan (17.07.07 um 09:38 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
Sponsored Links
  #2  
Alt 23.03.06, 03:45
Benutzerbild von tom
tom tom ist offline
TYPO3 Forum Team
Moderator
 
Registriert seit: 11.09.04
Ort: Schillerstadt Marbach
Alter: 40
Beiträge: 786
tom eine Nachricht über ICQ schicken tom eine Nachricht über Skype™ schicken

das hört sich ja super an - werde ich mir mal anschauen.

Post doch mal in der dev-Gruppe und frage da nach.

Ich weiss nicht, ob das ein Problem mit Backwards-Kombabilität ist und TYPO3 versucht auch alte MySQL-Versionen zu bedienen ?

Tom
__________________
"Wer nichts anderes tut als Geld verdienen, verdient auch nichts anderes ..."

P.S. Ich habe gerade beschlossen alle meine Tipp- und Rechtschreibfehler unter die Open Content License zu stellen.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #3  
Alt 23.03.06, 15:25
Benutzerbild von maxhb
TYPO3 Forum Team
Moderator
 
Registriert seit: 19.08.04
Ort: Bremen
Alter: 36
Beiträge: 1.528

Zitat:
Zitat von tom
Post doch mal in der dev-Gruppe und frage da nach.
Ist sicherlich auch einen Versuch Wert, bisher habe ich den beitrag aber nochmals als Crossposting unter http://www.typo-3.de/forum/list/list_post//40125/ veröffentlicht, mal schauen, ob da jemand ein paar Gedanken zum Thema äußert.

CU
maxhb
__________________
FreeBSD || MySQL 5.x || TYPO3 3.6 - 4.2

Meine Stadt, meine Firma, mein Redaktionssystem.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #4  
Alt 23.03.06, 20:12
Benutzerbild von maxhb
TYPO3 Forum Team
Moderator
 
Registriert seit: 19.08.04
Ort: Bremen
Alter: 36
Beiträge: 1.528

Zitat:
Zitat von tom
Post doch mal in der dev-Gruppe und frage da nach.
Danke für die Idee, habe ich mittlerweile getan und auch schon ein paar weitere Ideen gewonnen

CU
maxhb
__________________
FreeBSD || MySQL 5.x || TYPO3 3.6 - 4.2

Meine Stadt, meine Firma, mein Redaktionssystem.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #5  
Alt 28.03.06, 18:56
Benutzerbild von maxhb
TYPO3 Forum Team
Moderator
 
Registriert seit: 19.08.04
Ort: Bremen
Alter: 36
Beiträge: 1.528
Wiki-Seiten

Hi!
Unter http://wiki.typo3.org/index.php/Database_optimization habe ich mal eine Wiki-Seite angelegt, damit man Ideen sammeln kann.

CU
maxhb
__________________
FreeBSD || MySQL 5.x || TYPO3 3.6 - 4.2

Meine Stadt, meine Firma, mein Redaktionssystem.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #6  
Alt 04.07.07, 08:34
Forum Aktivist
 
Registriert seit: 15.02.06
Alter: 29
Beiträge: 60

Hallo,

sehr interessant. Wir betreiben hier einen Webserver mit mehreren TYPO3-Installationen und gelegentlich hängt sich mal eine Datenbank weg.

Dann hilft nur noch ein Restart des MySQL-Servers.

Werde mal ein paar Settings ausprobieren.
Für mich stellt sich immer noch die Frage, wann ein vernünftiges Limit von Seiten auf einem Server erreicht ist. Aber das ist ja nicht nur von der Anzahl der gehosteten Seiten abhängig, sondern auch von der Anzahl der PIs.

So, back on test - CG
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #7  
Alt 01.08.07, 16:33
Forum Zuschauer
 
Registriert seit: 01.08.07
Alter: 30
Beiträge: 6

Hmmm, was soll n index auf nem boolschen Feld bringen (hidden, deleted)?
Wenn dann eher l18n_parent und sys_language_uid. Sorting ist in neueren Versionen schon Teil des parent index.

Im uebrigen ist die Messung auch nicht besondere aussagekraeft, da Du den Querycache und aehnliches voellig ausser Acht laesst.

Bye,
Nikolas
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #8  
Alt 01.08.07, 16:51
Benutzerbild von maxhb
TYPO3 Forum Team
Moderator
 
Registriert seit: 19.08.04
Ort: Bremen
Alter: 36
Beiträge: 1.528

Hi!
Eines vorweg: Die Optimierung der MySQL-DB-Struktur hat sich im Prinzip erledigt, da es offenbar Wunsch und Wille des Core-Teams ist das TYPO3-Projekt unabhändig von einer bestimmten DB zu betreiben.

Zitat:
Zitat von pulponair Beitrag anzeigen
Hmmm, was soll n index auf nem boolschen Feld bringen (hidden, deleted)?
Was spricht gegen Indizes auf boolschen Feldern?! Die sind doch z.B. viel effektiver als ein Index auf einem Timestamp-Feld, das eine Kardinalität von zig-tausend besitzt...

Zitat:
Zitat von pulponair Beitrag anzeigen
Im uebrigen ist die Messung auch nicht besondere aussagekraeft, da Du den Querycache und aehnliches voellig ausser Acht laesst.
Bei aktiviertem Query-Cache kann man jegliche Optimierung der Indizes de facto vergessen, wenn man den benutzten Speicher nur groß genug dimensioniert. Letzten Endes landet dann irgendwann alles im Cache

Indizes nutzen in diesem Zusammenhang eigentlich nur dann etwas, wenn eine Reihe von Bedingungen erfüllt sind:
  • Es gibt SQL-Anfragen, die nicht im Cache vorliegen (sprich der query-Cache ist nicht monstergroß)
  • Die im Index erfassten Felder haben tatsächlich verschiedene Werte (Gibt es z.B. keine gelöschten Seiten, dann bringt ein Index auf deleted in der pages Tabelle nix)
  • Es muss hinreichend viele Tabelleneinträge geben, damit eine Suche über Indizes überhaupt relevante / messbare Ergebnisse liefert (bei 10 Einträgen in der pages Tabelle wird man kaum Unterschiede Messen)
  • Die Tabellen werden überwiegend lesend verwendet, da das Anlegen und Verwalten von index-Informationen beim Speichern immer ein wenig zeitlichen Extra-Aufwand bedeutet
  • Die durch einen Index ermittelte Teilmenge einer Tabelle überschreitet nicht einen bestimmten Schwellwert (ich meine 50%), da ansonsten eh die ganze tabelle eingelesen wird.
Abgesehen davon kann man die mittlere Zugriffsgeschwindigkeit auch noch durch den richtigen Einsatz von passende MySQL-Tabellentypen optimieren.

Fazit Alles in Allem ein spannedes Thema, aber das TYPO3 Projekt scheint leider nicht der richtige "Testballon" zu sein. bei etlichen anderen Projekten (z.B. Datawarehouse auf MySQL-Basis) konnte ich aber schon einige Performanzvorteile erreichen.

CU
maxhb
__________________
FreeBSD || MySQL 5.x || TYPO3 3.6 - 4.2

Meine Stadt, meine Firma, mein Redaktionssystem.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
Antwort


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are An


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit $GLOBALS! Kann teilweise verschiedene Indizes nicht auslesen rohamis TYPO3 3.x Fragen und Probleme 8 12.06.08 07:45
Warnung bei Verwendung von sr_feuser_register onkel_schnitzel TYPO3 4.x Fragen und Probleme 2 09.09.07 16:57
newloginbox-Verwendung im Frontend bei .htaccess-geschützem Backend arcdes Alle anderen Extensions 0 18.06.07 11:24
Schock bei Verwendung von error_reporting(E_ALL) muckl TYPO3 4.x Fragen und Probleme 4 26.05.07 16:15
tt_products in Verwendung mit sr_feuser_register 0nyx tt_products 1 10.10.06 10:02


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.


Powered by vBulletin® Version 3.6.8 Patch Level 2 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0
Template-Modifikationen durch TMS