Raccomandazioni sulle prestazioni del database (da Azure PSQL)

Ciao,

stiamo ospitando il nostro forum basato su Discourse su Azure con un’istanza di “Azure Database for PostgreSQL”. Uno dei vantaggi di questo servizio sono i consigli sulle prestazioni basati sulle “caratteristiche del database” e sull’utilizzo.
Da quando abbiamo migrato su Azure, abbiamo ricevuto alcuni suggerimenti riguardo a indici mancanti e presumibilmente ridondanti che desidero condividere con voi.
Dopo aver creato questi indici mancanti, abbiamo notato un lieve (non significativo) incremento delle prestazioni complessive, ma non abbiamo potuto applicare i consigli di DROP INDEX, in quanto potrebbero/potrebbero in futuro interrompere aggiornamenti futuri o migrazioni del database. In ogni caso, non possiamo dire se questi indici siano sicuri da eliminare o se ciò avrebbe un effetto negativo sulle prestazioni.

Di seguito sono riportati gli indici suggeriti da Azure per la creazione (impatto “basso” e “moderato”):
create-indexes.csv (1,5 KB)

Queste sono le raccomandazioni per gli indici “già coperti”:

Riepilogo

Elimina l’indice index_optimized_images_on_upload_id sulla tabella public.optimized_images.
Motivo: L’indice è coperto da index_optimized_images_on_upload_id_and_width_and_height.

Elimina l’indice index_post_revisions_on_post_id sulla tabella public.post_revisions.
Motivo: L’indice è coperto da index_post_revisions_on_post_id_and_number.

Elimina l’indice post_timings_summary sulla tabella public.post_timings.
Motivo: L’indice è coperto da post_timings_unique.

Elimina l’indice index_topic_links_on_topic_id sulla tabella public.topic_links.
Motivo: L’indice è coperto da unique_post_links.

Elimina l’indice index_post_uploads_on_post_id sulla tabella public.post_uploads.
Motivo: L’indice è coperto da idx_unique_post_uploads.

Dovresti prendere queste raccomandazioni di “DROP” con le dovute cautele, poiché penso che influenzeranno solo le dimensioni complessive del database invece di aumentare le prestazioni. Ad esempio: l’intero nostro database occupa circa 120 GB e tutte queste raccomandazioni libererebbero solo 422 MB. Azure stesso definisce l’impatto come “basso”. Sembra quindi che si tratti di una semplice pulizia.

Come detto sopra, volevo solo condividere questo con voi, in quanto potrebbe aiutare a ottimizzare leggermente le prestazioni. Oltre a questi indici, non ci sono state altre raccomandazioni fornite da Azure per il periodo in cui utilizziamo i loro servizi.

Cordiali saluti,
Sascha

Grazie per la condivisione, alcune delle raccomandazioni sono un po’ strane…

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)

Questo indice duplicato triplicato che viene suggerito ha una selettività estremamente bassa; il problema con indici del genere è che il planner tende correttamente a ignorarli. Se ci sono solo 10 valori diversi, devi combinarli con qualcos’altro, ad esempio topic_id.

Per quanto riguarda gli indici sottoutilizzati, circa 6 mesi fa abbiamo eseguito alcune statistiche sul database per cercare indici che non venivano utilizzati nella nostra infrastruttura. Abbiamo eliminato alcuni di essi, ma questo argomento è un buon promemoria per noi per ripetere questo processo.

Grazie per aver pubblicato questo.

Grazie per la tua risposta e per avermi indicato questi 3 indici. Non avevo notato questa triplicazione poiché i suggerimenti non sono arrivati tutti insieme, ma li ho applicati gradualmente nel corso di settimane.
È piuttosto strano che non siano comparsi tra i suggerimenti di DROP. Sembra che Azure abbia ancora del lavoro da fare :blush: (e dovrò controllare quei suggerimenti due volte).

Cordiali saluti