En aquest tema, aprendrem com analitzar i millorar el rendiment de les consultes en PostgreSQL. Això és crucial per assegurar que les nostres aplicacions funcionin de manera eficient i que les bases de dades responguin ràpidament a les sol·licituds dels usuaris.
Conceptes Clau
- EXPLAIN i EXPLAIN ANALYZE: Eines per obtenir informació sobre com PostgreSQL executa una consulta.
- Plans d'execució: Detalls sobre com es processa una consulta.
- Costos d'execució: Mètriques que indiquen l'eficiència d'una consulta.
- Buffers: Informació sobre l'ús de memòria durant l'execució de la consulta.
EXPLAIN i EXPLAIN ANALYZE
EXPLAIN
La comanda EXPLAIN
mostra el pla d'execució que PostgreSQL utilitzarà per a una consulta. Això inclou informació sobre les operacions que es realitzaran, com ara escanejos de taules, unions, etc.
EXPLAIN ANALYZE
La comanda EXPLAIN ANALYZE
executa la consulta i mostra el pla d'execució juntament amb les estadístiques reals de temps i ús de recursos.
Interpretant Plans d'Execució
Un pla d'execució conté diverses parts que cal entendre per analitzar el rendiment de la consulta:
- Node Type: El tipus d'operació (Seq Scan, Index Scan, etc.).
- Cost: Una estimació del cost d'execució de l'operació.
- Rows: El nombre estimat de files que es retornaran.
- Width: L'amplada mitjana de les files retornades.
- Actual Time: El temps real d'execució de l'operació (només amb
EXPLAIN ANALYZE
).
Exemple de Pla d'Execució
Sortida:
Seq Scan on employees (cost=0.00..35.50 rows=10 width=100) (actual time=0.012..0.015 rows=3 loops=1) Filter: (department = 'Sales'::text) Rows Removed by Filter: 7 Planning Time: 0.123 ms Execution Time: 0.045 ms
Explicació del Pla
- Seq Scan: Escaneig seqüencial de la taula
employees
. - Cost=0.00..35.50: El cost estimat per iniciar l'operació és 0.00 i el cost total és 35.50.
- Rows=10: S'espera que es retornin 10 files.
- Width=100: L'amplada mitjana de les files és de 100 bytes.
- Actual Time=0.012..0.015: El temps real d'execució va ser entre 0.012 i 0.015 ms.
- Rows Removed by Filter: 7: 7 files van ser eliminades pel filtre.
- Planning Time: El temps que va trigar a planificar la consulta.
- Execution Time: El temps total d'execució de la consulta.
Costos d'Execució
Els costos d'execució són una estimació de la quantitat de recursos necessaris per executar una consulta. Els costos es divideixen en:
- Startup Cost: El cost inicial per començar l'operació.
- Total Cost: El cost total per completar l'operació.
Els costos es mesuren en unitats abstractes que representen el temps d'execució i l'ús de recursos.
Buffers
Els buffers proporcionen informació sobre l'ús de memòria durant l'execució de la consulta. Això inclou:
- Shared Buffers: Memòria compartida utilitzada per la consulta.
- Local Buffers: Memòria local utilitzada per la consulta.
- Temp Buffers: Memòria temporal utilitzada per la consulta.
Exemple amb Buffers
Sortida:
Seq Scan on employees (cost=0.00..35.50 rows=10 width=100) (actual time=0.012..0.015 rows=3 loops=1) Buffers: shared hit=5 Filter: (department = 'Sales'::text) Rows Removed by Filter: 7 Planning Time: 0.123 ms Execution Time: 0.045 ms
Explicació dels Buffers
- Buffers: shared hit=5: La consulta va accedir a 5 pàgines de memòria compartida que ja estaven en memòria (hit).
Exercicis Pràctics
Exercici 1
Utilitza EXPLAIN
per obtenir el pla d'execució de la següent consulta:
Solució
Exercici 2
Utilitza EXPLAIN ANALYZE
per obtenir el pla d'execució i les estadístiques reals de la següent consulta:
Solució
Resum
En aquesta secció, hem après com utilitzar EXPLAIN
i EXPLAIN ANALYZE
per analitzar el rendiment de les consultes en PostgreSQL. Hem vist com interpretar els plans d'execució, comprendre els costos d'execució i utilitzar la informació dels buffers per optimitzar les nostres consultes. Aquestes eines són essencials per assegurar que les nostres bases de dades funcionin de manera eficient i que les consultes es processin ràpidament.
Curs de PostgreSQL
Mòdul 1: Introducció a PostgreSQL
Mòdul 2: Operacions bàsiques de SQL
Mòdul 3: Consultes SQL avançades
Mòdul 4: Disseny de bases de dades i normalització
Mòdul 5: Funcionalitats avançades de PostgreSQL
Mòdul 6: Optimització i millora del rendiment
- Optimització de consultes
- Estratègies d'indexació
- Analitzant el rendiment de les consultes
- Vacuuming i manteniment
Mòdul 7: Seguretat i gestió d'usuaris
- Rols d'usuari i permisos
- Mètodes d'autenticació
- Encriptació de dades
- Còpia de seguretat i restauració
Mòdul 8: Treballant amb JSON i funcionalitats NoSQL
Mòdul 9: Extensions i eines avançades
- PostGIS per a dades geoespacials
- Cerca de text complet
- Wrappers de dades externes
- PL/pgSQL i altres llenguatges procedimentals