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

  1. EXPLAIN i EXPLAIN ANALYZE: Eines per obtenir informació sobre com PostgreSQL executa una consulta.
  2. Plans d'execució: Detalls sobre com es processa una consulta.
  3. Costos d'execució: Mètriques que indiquen l'eficiència d'una consulta.
  4. 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 SELECT * FROM employees WHERE department = 'Sales';

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.

EXPLAIN ANALYZE SELECT * FROM employees WHERE department = 'Sales';

Interpretant Plans d'Execució

Un pla d'execució conté diverses parts que cal entendre per analitzar el rendiment de la consulta:

  1. Node Type: El tipus d'operació (Seq Scan, Index Scan, etc.).
  2. Cost: Una estimació del cost d'execució de l'operació.
  3. Rows: El nombre estimat de files que es retornaran.
  4. Width: L'amplada mitjana de les files retornades.
  5. Actual Time: El temps real d'execució de l'operació (només amb EXPLAIN ANALYZE).

Exemple de Pla d'Execució

EXPLAIN ANALYZE SELECT * FROM employees WHERE department = 'Sales';

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

EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM employees WHERE department = 'Sales';

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:

SELECT * FROM orders WHERE order_date > '2023-01-01';

Solució

EXPLAIN SELECT * FROM orders WHERE order_date > '2023-01-01';

Exercici 2

Utilitza EXPLAIN ANALYZE per obtenir el pla d'execució i les estadístiques reals de la següent consulta:

SELECT * FROM customers WHERE city = 'Barcelona';

Solució

EXPLAIN ANALYZE SELECT * FROM customers WHERE city = 'Barcelona';

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

Mòdul 7: Seguretat i gestió d'usuaris

Mòdul 8: Treballant amb JSON i funcionalitats NoSQL

Mòdul 9: Extensions i eines avançades

Mòdul 10: Estudis de cas i aplicacions del món real

© Copyright 2024. Tots els drets reservats