Empfehlungen zur Datenbankleistung (von Azure PSQL)

Hallo,

wir hosten unser auf Discourse basierendes Forum auf Azure mit einer Instanz von „Azure Database for PostgreSQL“. Einer der Vorteile dieses Dienstes sind die Performance-Empfehlungen, die auf „Datenbankmerkmalen“ und der Nutzung basieren.

Seit der Migration zu Azure haben wir Hinweise auf fehlende und vermutlich redundante Indizes erhalten, die ich gerne mit euch teile.

Nach dem Erstellen dieser fehlenden Indizes haben wir eine leichte (nicht große) Gesamtverbesserung der Performance festgestellt. Die Empfehlung zum DROP INDEX konnten wir jedoch nicht umsetzen, da dies zukünftige Updates/Datenbank-Migrationen potenziell beeinträchtigen würde. Wir können daher nicht sagen, ob diese Indizes sicher gelöscht werden können oder ob dies negative Auswirkungen auf die Performance haben wird.

Hier sind die Indizes, die Azure uns zur Erstellung empfohlen hat (Auswirkung: „niedrig“ und „mittel“):
create-indexes.csv (1,5 KB)

Das sind die Empfehlungen für bereits abgedeckte Indizes:

Zusammenfassung

Index index_optimized_images_on_upload_id auf Tabelle public.optimized_images löschen.
Grund: Der Index wird durch index_optimized_images_on_upload_id_and_width_and_height abgedeckt.

Index index_post_revisions_on_post_id auf Tabelle public.post_revisions löschen.
Grund: Der Index wird durch index_post_revisions_on_post_id_and_number abgedeckt.

Index post_timings_summary auf Tabelle public.post_timings löschen.
Grund: Der Index wird durch post_timings_unique abgedeckt.

Index index_topic_links_on_topic_id auf Tabelle public.topic_links löschen.
Grund: Der Index wird durch unique_post_links abgedeckt.

Index index_post_uploads_on_post_id auf Tabelle public.post_uploads löschen.
Grund: Der Index wird durch idx_unique_post_uploads abgedeckt.

Ihr solltet diese „DROP“-Empfehlungen mit einem Körnchen Salz nehmen, da sie meiner Meinung nach nur die Gesamtgröße der Datenbank beeinflussen und nicht die Performance steigern. Zum Beispiel: Unsere gesamte Datenbank nutzt ca. 120 GB, und all diese Empfehlungen würden insgesamt nur 422 MB freigeben. Azure selbst stuft die Auswirkung als „niedrig“ ein. Es scheint also nichts weiter als eine Bereinigung zu sein.

Wie oben erwähnt, wollte ich dies nur mit euch teilen, da es helfen könnte, die Performance etwas zu optimieren. Neben diesen Indizes gab es für die Zeit, in der wir die Dienste von Azure nutzen, keine weiteren Empfehlungen.

Viele Grüße
Sascha

Danke für den Beitrag, einige der Empfehlungen sind etwas seltsam…

CREATE INDEX index_topics_on_category_id ON public.topics USING btree (category_id)
CREATE INDEX index_topics_on_category_id_and_id ON public.topics USING btree (category_id, id)
CREATE INDEX index_topics_on_id_and_category_id ON public.topics USING btree (category_id, id)

Dieser dreifache doppelte Index, der vorgeschlagen wird, hat eine extrem geringe Selektivität. Das Problem mit solchen Indizes ist, dass der Planner sie korrekt oft ignoriert. Wenn es nur 10 verschiedene Werte gibt, musst du sie mit etwas anderem kombinieren, zum Beispiel mit topic_id.

Was untergenutzte Indizes betrifft: Vor etwa sechs Monaten haben wir Statistiken über die Datenbank erstellt, um Indizes zu finden, die wir in unserer Infrastruktur nicht genutzt haben. Wir haben einige entfernt, aber dieses Thema ist eine gute Erinnerung daran, diesen Prozess erneut durchzugehen.

Danke für den Beitrag.

Vielen Dank für deine Antwort und den Hinweis auf diese drei Indizes. Mir ist dieser dreifache Duplikat-Index nicht aufgefallen, da die Empfehlungen nicht auf einmal kamen und ich sie über Wochen hinweg schrittweise angewendet habe.
Es ist ziemlich seltsam, dass sie nicht in den DROP-Empfehlungen auftauchen. Anscheinend hat Azure noch einige Arbeit vor sich :smiley: (und ich muss diese Empfehlungen doppelt prüfen).

Viele Grüße