undurchsichtige Index-(Nicht-)Nutzung - extrem langsam

Er erwartet andere Ergebnissmengen, als in der Realität später kommen. So erwartet er 641874 Rows für status = 1, es kommen aber ‘nur’ 28000.

Hast Du inzwischen mal einen kombinierten Index, wie von mir und anderen schon mehrfach vorgeschlagen, geprüft?

Andreas

Und die völlig falschen Annahmen würde Autovacuum zusammen mit Autoanalyze in Ordnung bringen.
Das ist aber leider ausgeschaltet …

Hast Du inzwischen mal einen kombinierten Index, wie von mir und anderen schon mehrfach vorgeschlagen, geprüft?

Nein. Das hat zwei Gründe:

  1. Ich muss den autovacuum abwarten.
  2. Es geht ohne kombinierten Index in 14ms, wenn der richtige Query Plan gewählt wird (vgl. Post # 20). Das kann der kombinierte Index wohl kaum wesentlich schneller. Also braucht er lediglich Speicherplatz. Ich würde das daher nicht für die optimale Lösung halten. Mein erster Versuch ist ‘DROP INDEX “public”.“statusindex”’. Aber der steht momentan auf “waiting”, solange noch der autovacuum läuft…

Er erwartet andere Ergebnissmengen, als in der Realität später kommen. So erwartet er 641874 Rows für status = 1, es kommen aber ‘nur’ 28000.

Das ist das Komische daran. Es sind momentan genau 655 rows mit status = 1 in der Tabelle. Die falsche Erwartung kommt wahrscheinlich daher, dass der analyze noch nicht gelaufen ist. Aber wie kommt er auf die 28000 als echtes Ergebnis??? Heißt das, dass der Index defekt/veraltet ist und auch Zeilen ausgibt, die nicht status = 1 haben?

EDIT: Inzwischen hat aks geantwortet:

Und die völlig falschen Annahmen würde Autovacuum zusammen mit Autoanalyze in Ordnung bringen.
Das ist aber leider ausgeschaltet …

Damit sind die Fragen im Prinzip beantwortet. Falsche Annahmen aufgrund veralteter Indexdaten und Statistiken.

Vielen herzlichen Dank an alle! Ich sage Bescheid, sobald die vacuum- und analyze-Prozesse durch sind und ich noch mal richtig testen konnte.

Beste Grüße
Jonathan

Wenn Vacuum und Analyze durch sind, ist deine Tabelle im besten Fall für kurze Zeit in Ordnung.
Eher wird es so sein, dass die Daten bis dahin schon wieder veraltet sind. Und damit auch die Statistiken.

Überleg dir lieber, wie du die Datenbank performanter hinbekommen könntest.
Ich kann mit Tabellenpartitionierung als einen Ansatz vorstellen.
Den Index kann man auch überarbeiten und daraus einen partiellen Index machen.
Das Autovacuum kann man an die Realität anpassen.

Alles Schritte, die dafür sorgen, dass die Maintenance Operationen deine Datenbank - und damit deine Anfragen - aktuell halten.

So, ich wollte einfach nur berichten, dass ich den autovacuum analyze mal kurz unterbrochen habe um den index auf status zu löschen. Die vormals problematischen Anfragen sind jetzt rasend schnell. Auch die sonstigen Vorschläge haben wir in die Konfiguration eingearbeitet, was insgesamt zu einer deutliche besseren Performance geführt hat. (und das, obwohl weiterhin laufend dieser eine autovacuum analyze läuft)

Ganz herzlichen Dank an alle für die Hilfe!
Viele Grüße
Jonathan

So, und nachdem nun die Brandstellen einigermaßen gelöscht sind: wie wäre es mit einer kompletten Überarbeitung der Konfiguration sowie einer Analyse aller Probleme?