Wie kann das Kosten-Nutzen-Verhältnis beim Hinzufügen eines Index ermittelt werden?

10

Laut Craig Ringer :

Während es normalerweise eine gute Idee ist, einen Index für Ihre referenzseitigen Fremdschlüsselspalten zu erstellen (oder einzuschließen), ist dies nicht erforderlich. Jeder Index , den Sie hinzufügen verlangsamt Operationen leicht nach unten DML, so dass Sie auf Kosten der Leistung auf jeder zahlen INSERT, UPDATEoder DELETE. Wenn der Index selten verwendet wird, lohnt es sich möglicherweise nicht, ihn zu haben.

Wie stellen Sie fest, ob der Nutzen des Hinzufügens eines Index die Kosten übersteigt?

Profilieren Sie Unit-Tests vor / nach dem Hinzufügen eines Index und prüfen Sie, ob insgesamt ein Leistungsgewinn erzielt wurde? Oder gibt es einen besseren Weg?

Gili
quelle
pg_stat_user_indexeshilft Ihnen dabei und zeigt Informationen zur Indexverwendung an. Um die Wartungskosten abzuschätzen, können Sie sich Ihre Tabellenschreibaktivität ansehen. pg_stat_user_tablesAufgrund von HOT müssen jedoch nicht alle Aktualisierungen unbedingt den Index berühren, damit Sie möglicherweise ein wenig überschätzen.
Craig Ringer
@CraigRinger, das ist sehr hilfreich. Vielen Dank!
Gili
Ich verlasse mich fast ausschließlich auf pgBadger. Und mein Bauch.
Colin 't Hart

Antworten:

4

Die Verwendung des Index hängt von der Struktur Ihrer Daten und der Selektivität Ihrer Daten ab. Wenn Sie Fragen stellen, die Sie nicht verwenden, sind diese teuer. Wenn Sie sie effektiv einsetzen, sind sie ein großartiges Werkzeug. Es gibt einen Abfrageplaner und eine Abfrageplaner- EXPLAINAnalyse ( ), die nur das Planen oder Planen und Ausführen von Befehlen ( EXPLAIN ANALYZE) ermöglicht.

Und es gibt ein großartiges Online-Buch: Verwenden Sie den Index Luke über die empfohlene Verwendung von Indizes

Mladen Uzelac
quelle
4
Faustregel ist nett, aber in diesem Fall zu allgemein. Ich suche nach einem konkreten Tool / einer konkreten Messung, die das Hinzufügen / Entfernen von Indizes basierend auf dem tatsächlichen Laufzeitverhalten meiner Anwendung vorschlägt.
Gili
Vielleicht ist dies das Werkzeug, das Sie suchen: enterprisedb.com/products-services-training/products/…
Mladen Uzelac
1

Wählen Sie Faustregeln und befolgen Sie diese. Zum Beispiel erstelle ich immer einen Index auf der referenzierenden Seite eines Fremdschlüssels.

Stellen Sie sicher, dass Sie Ihr Produkt anhand von Leistungskriterien testen, die auf den Anforderungen der Benutzer basieren. Beispielsweise muss das System eine eingehende Last von 100 POST-Anforderungstypen X pro Minute verarbeiten.

Wenn Sie Ihre Leistungsanforderungen nicht erfüllen können, verfeinern Sie Ihr Modell und verstoßen dabei möglicherweise gegen Ihre Faustregeln.

Tempo
quelle