Podcast
Questions and Answers
Quelle est la condition utilisée pour filtrer les commandes dans l'étape 4 ?
Quelle est la condition utilisée pour filtrer les commandes dans l'étape 4 ?
Quel est l'impact de l'index créé sur la vitesse d'exécution de la requête ?
Quel est l'impact de l'index créé sur la vitesse d'exécution de la requête ?
Combien de lignes ont été traitées par la requête après l'application du filtre ?
Combien de lignes ont été traitées par la requête après l'application du filtre ?
Quel est le nom de l'index qui est créé dans l'étape 4 ?
Quel est le nom de l'index qui est créé dans l'étape 4 ?
Signup and view all the answers
Quel est le temps total nécessaire pour planifier et exécuter la requête avant l'optimisation ?
Quel est le temps total nécessaire pour planifier et exécuter la requête avant l'optimisation ?
Signup and view all the answers
Qu'est-ce qu'un "scan d'index" ?
Qu'est-ce qu'un "scan d'index" ?
Signup and view all the answers
Quel est l'impact de l'optimisation sur le temps réel d'exécution de la requête ?
Quel est l'impact de l'optimisation sur le temps réel d'exécution de la requête ?
Signup and view all the answers
Quel est le nombre de fois que l'opération de recherche d'index a été effectuée ?
Quel est le nombre de fois que l'opération de recherche d'index a été effectuée ?
Signup and view all the answers
Quel rôle joue le paramètre autovacuum dans PostgreSQL ?
Quel rôle joue le paramètre autovacuum dans PostgreSQL ?
Signup and view all the answers
Quel est l'effet du VACUUM ANALYZE sur la base de données ?
Quel est l'effet du VACUUM ANALYZE sur la base de données ?
Signup and view all the answers
Quel paramètre définit la quantité de mémoire utilisée pour le cache des blocs partagés ?
Quel paramètre définit la quantité de mémoire utilisée pour le cache des blocs partagés ?
Signup and view all the answers
Que se passe-t-il après avoir ajusté les paramètres dans postgresql.conf ?
Que se passe-t-il après avoir ajusté les paramètres dans postgresql.conf ?
Signup and view all the answers
Quel est l'objectif principal de la commande EXPLAIN ANALYZE ?
Quel est l'objectif principal de la commande EXPLAIN ANALYZE ?
Signup and view all the answers
Quel est le temps nécessaire pour l'exécution de la requête présentée ?
Quel est le temps nécessaire pour l'exécution de la requête présentée ?
Signup and view all the answers
Quelle est la condition d'index utilisée pour la recherche du client ?
Quelle est la condition d'index utilisée pour la recherche du client ?
Signup and view all the answers
Quel est l'objectif principal de l'utilisation d'un index combiné ?
Quel est l'objectif principal de l'utilisation d'un index combiné ?
Signup and view all the answers
Qu'indique le coût estimé de l'accès aux données dans le plan d'exécution ?
Qu'indique le coût estimé de l'accès aux données dans le plan d'exécution ?
Signup and view all the answers
Quel résultat a été obtenu après l'application de la condition d'index ?
Quel résultat a été obtenu après l'application de la condition d'index ?
Signup and view all the answers
Que montre la commande EXPLAIN ANALYZE dans l'exécution d'une requête ?
Que montre la commande EXPLAIN ANALYZE dans l'exécution d'une requête ?
Signup and view all the answers
Quel est le but de l'index partiel mentionné dans l'extrait ?
Quel est le but de l'index partiel mentionné dans l'extrait ?
Signup and view all the answers
Quel est le coût estimé pour accéder aux données dans le plan d'exécution ?
Quel est le coût estimé pour accéder aux données dans le plan d'exécution ?
Signup and view all the answers
Quel est le rôle principal d'un index dans une base de données ?
Quel est le rôle principal d'un index dans une base de données ?
Signup and view all the answers
Quel était le temps de planification pour l'exécution de la requête mentionnée ?
Quel était le temps de planification pour l'exécution de la requête mentionnée ?
Signup and view all the answers
Quel type de scan est réalisé dans le plan d'exécution après création de l'index ?
Quel type de scan est réalisé dans le plan d'exécution après création de l'index ?
Signup and view all the answers
Que signifie un temps d'exécution de 0.020 ms ?
Que signifie un temps d'exécution de 0.020 ms ?
Signup and view all the answers
Qu'est-ce que la commande EXPLAIN ANALYZE permet d'obtenir ?
Qu'est-ce que la commande EXPLAIN ANALYZE permet d'obtenir ?
Signup and view all the answers
Quelle est la condition d'index utilisée dans l'exemple donné ?
Quelle est la condition d'index utilisée dans l'exemple donné ?
Signup and view all the answers
Quel résultat montre que la requête n'a trouvé aucune ligne ?
Quel résultat montre que la requête n'a trouvé aucune ligne ?
Signup and view all the answers
Quel était le coût estimé pour le scan de l'index sur la table clients ?
Quel était le coût estimé pour le scan de l'index sur la table clients ?
Signup and view all the answers
Quel est le principal but de la commande EXPLAIN ?
Quel est le principal but de la commande EXPLAIN ?
Signup and view all the answers
Quelle différence existe-t-il entre EXPLAIN et EXPLAIN ANALYZE ?
Quelle différence existe-t-il entre EXPLAIN et EXPLAIN ANALYZE ?
Signup and view all the answers
Pourquoi créer un index GIN sur la colonne nom des produits ?
Pourquoi créer un index GIN sur la colonne nom des produits ?
Signup and view all the answers
Quelle commande est utilisée pour effectuer une recherche textuelle sur la colonne nom avec un index GIN ?
Quelle commande est utilisée pour effectuer une recherche textuelle sur la colonne nom avec un index GIN ?
Signup and view all the answers
Quels bénéfices EXPLAIN ANALYZE apporte-t-il à la compréhension des performances de requête ?
Quels bénéfices EXPLAIN ANALYZE apporte-t-il à la compréhension des performances de requête ?
Signup and view all the answers
Quelle fonction est utilisée pour convertir la colonne nom en vecteur de recherche textuelle lors de la création d'un index GIN ?
Quelle fonction est utilisée pour convertir la colonne nom en vecteur de recherche textuelle lors de la création d'un index GIN ?
Signup and view all the answers
Quand utiliseriez-vous EXPLAIN ANALYZE plutôt qu'EXPLAIN ?
Quand utiliseriez-vous EXPLAIN ANALYZE plutôt qu'EXPLAIN ?
Signup and view all the answers
Quel est l'impact d'utiliser un index GIN sur les performances des requêtes textuelles ?
Quel est l'impact d'utiliser un index GIN sur les performances des requêtes textuelles ?
Signup and view all the answers
Quelle commande permet de se connecter à la base de données postgres
?
Quelle commande permet de se connecter à la base de données postgres
?
Signup and view all the answers
Dans la table commandes
, quelle colonne représente la date à laquelle la commande a été passée ?
Dans la table commandes
, quelle colonne représente la date à laquelle la commande a été passée ?
Signup and view all the answers
Quelle commande permet de créer une nouvelle base de données nommée ecommerce
?
Quelle commande permet de créer une nouvelle base de données nommée ecommerce
?
Signup and view all the answers
Quelle fonction permet de générer des nombres aléatoires dans la requête d'insertion des produits ?
Quelle fonction permet de générer des nombres aléatoires dans la requête d'insertion des produits ?
Signup and view all the answers
Quelle commande permet de définir le temps minimum d'exécution d'une requête pour déclencher un enregistrement dans le journal des requêtes lentes ?
Quelle commande permet de définir le temps minimum d'exécution d'une requête pour déclencher un enregistrement dans le journal des requêtes lentes ?
Signup and view all the answers
Qu'est-ce que generate_series(1, 1000)
produit ?
Qu'est-ce que generate_series(1, 1000)
produit ?
Signup and view all the answers
Quel est l'objectif principal de l'exercice 1 « Analyse des requêtes lentes » ?
Quel est l'objectif principal de l'exercice 1 « Analyse des requêtes lentes » ?
Signup and view all the answers
Quelle est la syntaxe utilisée pour insérer des données dans la table clients
?
Quelle est la syntaxe utilisée pour insérer des données dans la table clients
?
Signup and view all the answers
Flashcards
Connexion à PostgreSQL
Connexion à PostgreSQL
Processus d'accès à une instance de PostgreSQL pour l'utilisation de ses fonctions.
Création de la base de données
Création de la base de données
Action de créer une nouvelle base de données dans PostgreSQL.
Création des tables
Création des tables
Définir des structures de données dans la base de données pour stocker des informations spécifiques.
Insertion de données
Insertion de données
Signup and view all the flashcards
generate_series
generate_series
Signup and view all the flashcards
random()
random()
Signup and view all the flashcards
Analyse des Requêtes Lentes
Analyse des Requêtes Lentes
Signup and view all the flashcards
log_min_duration_statement
log_min_duration_statement
Signup and view all the flashcards
Lignes réelles
Lignes réelles
Signup and view all the flashcards
Boucles
Boucles
Signup and view all the flashcards
Filtre
Filtre
Signup and view all the flashcards
Temps de planification
Temps de planification
Signup and view all the flashcards
Temps d'exécution
Temps d'exécution
Signup and view all the flashcards
Index
Index
Signup and view all the flashcards
Index Scan
Index Scan
Signup and view all the flashcards
Coût estimé
Coût estimé
Signup and view all the flashcards
Lignes estimées
Lignes estimées
Signup and view all the flashcards
Condition d'index
Condition d'index
Signup and view all the flashcards
Création d'un index
Création d'un index
Signup and view all the flashcards
EXPLAIN ANALYZE
EXPLAIN ANALYZE
Signup and view all the flashcards
Scan d'index
Scan d'index
Signup and view all the flashcards
Coût d'accès
Coût d'accès
Signup and view all the flashcards
Index combiné
Index combiné
Signup and view all the flashcards
Index partiel
Index partiel
Signup and view all the flashcards
EXPLAIN
EXPLAIN
Signup and view all the flashcards
Index GIN
Index GIN
Signup and view all the flashcards
to_tsvector
to_tsvector
Signup and view all the flashcards
to_tsquery
to_tsquery
Signup and view all the flashcards
OPTIMISATION DES REQUÊTES
OPTIMISATION DES REQUÊTES
Signup and view all the flashcards
Analyse de performance
Analyse de performance
Signup and view all the flashcards
autovacuum
autovacuum
Signup and view all the flashcards
autovacuum_naptime
autovacuum_naptime
Signup and view all the flashcards
VACUUM ANALYZE
VACUUM ANALYZE
Signup and view all the flashcards
shared_buffers
shared_buffers
Signup and view all the flashcards
work_mem
work_mem
Signup and view all the flashcards
Study Notes
TD 5: Optimisation des performances d'une base de données PostgreSQL
- Objectif: Créer une base de données de gestion des commandes pour une entreprise de commerce électronique contenant 1 000 000 lignes de données.
Étapes et Concepts :
-
1. Connexion à PostgreSQL:
- Utiliser la commande
\c postgres;
pour se connecter à la base de données PostgreSQL avec le comptepostgres
.
- Utiliser la commande
-
2. Création de la base de données:
- Créer une nouvelle base de données nommée
ecommerce
avec la commandeCREATE DATABASE ecommerce;
- Créer une nouvelle base de données nommée
-
3. Connexion à la nouvelle base de données:
- Se connecter à la base de données
ecommerce
avec la commande\c ecommerce;
- Se connecter à la base de données
-
4. Création des tables:
- Créer la table
clients
avec les colonnes suivantes :id SERIAL PRIMARY KEY
(clé primaire auto-incrémentée)nom VARCHAR(100)
email VARCHAR(100)
- Créer la table
produits
avec les colonnes suivantes :id SERIAL PRIMARY KEY
(clé primaire auto-incrémentée)nom VARCHAR(100)
prix DECIMAL
- Créer la table
commandes
avec les colonnes suivantes :id SERIAL PRIMARY KEY
(clé primaire auto-incrémentée)client_id INT
produit_id INT
date_commande DATE
- Créer la table
-
5. Insertion de données aléatoires:
- Insérer 100 000 clients avec des noms et des adresses e-mail aléatoires.
- Insérer 1 000 produits avec des noms et des prix aléatoires.
- Insérer 1 000 000 commandes avec des informations sur les clients, les produits et la date.
- Utiliser les fonctions
md5(random()::text)
etrandom() * 100
pour générer des données aléatoires. - L'insertion des dates de commande est déterminée à partir de
2023-01-01
+ un nombre aléatoire de jours entre 0 et 365.
Exercice 1: Analyse des Requêtes Lentes
-
Objectif: Identifier et optimiser une requête lente.
-
1. Activation des logs pour les requêtes lentes:
- Configurer PostgreSQL pour enregistrer les requêtes dont la durée d'exécution dépasse 500 millisecondes avec
SET log min duration statement = 500;
- Configurer PostgreSQL pour enregistrer les requêtes dont la durée d'exécution dépasse 500 millisecondes avec
-
2. Exécution d'une requête lente:
- Exécuter la requête
SELECT FROM commandes WHERE date_commande > '2023-01-01';
pour tester la performance.
- Exécuter la requête
Exercice 2: Utilisation des Index
-
Objectif: Améliorer les performances des recherches en utilisant des index.
-
1. Création de l'index sur la colonne
nom
de la tableclients
:- Créer un index
idx_clients_nom
sur la colonnenom
de la tableclients
avec la commandeCREATE INDEX idx_clients_nom ON clients (nom);
- Créer un index
-
2. Exécution de la requête et analyse du plan d'exécution:
- Exécuter la requête
SELECT * FROM clients WHERE nom = '96a007831d3efbf4a066f031b50a520';
et analyser la requête pour voir comment des améliorations peuvent amener à des optimisations.
- Exécuter la requête
Exercice 3 : Utilisation des Index Combinés
-
Objectif: Optimiser les recherches multi-colonnes avec des index combinés.
-
1. Création d'un index combiné sur les colonnes
client_id
etdate_commande
de la tablecommandes
:- Créer un index
idx_commandes_client_date
sur les colonnesclient_id
etdate_commande
de la tablecommandes
avec la commandeCREATE INDEX idx_commandes_client_date ON commandes (client_id, date_commande);
- Créer un index
-
2. Exécution de la requête et analyse de la requête :
- Exécuter la requête
EXPLAIN ANALYZE SELECT * FROM commandes WHERE client_id = 12345 AND date_commande > '2023-01-01';
et analyser le résultat.
- Exécuter la requête
Exercice 4 : Index Partiel
-
Objectif: optimiser les performances en utilisant des index partiels.
-
1. Création d'un index partiel sur la colonne
prix
de la tableproduits
: -
Créer un index
idx_produits_prix
sur la colonneprix
de la tableproduits
uniquement pour les valeursprix > 50
avec la commandeCREATE INDEX idx_produits_prix ON produits (prix) WHERE prix > 50;
-
2. Exécution et analyse de la requête :
- Exécuter la requête
EXPLAIN ANALYZE SELECT * FROM produits WHERE prix > 50;
et faire l'analyse correspondante.
- Exécuter la requête
Exercice 5 : Optimisation des Jointures
-
Objectif: Améliorer les jointures avec des index.
-
1. Création des index sur les colonnes de jointure :
- Créer des index
idx_commandes_client_id
etidx_commandes_produit_id
sur les colonnesclient_id
etproduit_id
de la tablecommandes
.
- Créer des index
Exercice 6 : Réduire les Scans Séquentiels
-
Objectif: Minimiser les accès disques.
-
1. Identification des requêtes lentes :
- Utiliser
EXPLAIN ANALYZE SELECT * FROM commandes WHERE client_id = 12345;
pour analyser les requêtes afin d'identifier des scans séquentiels.
- Utiliser
-
2. Création des index nécessaires :
- Créer un index sur la colonne
client_id
pour optimiser les requêtes qui utilisent cette colonne.
- Créer un index sur la colonne
Exercice 7 : Utiliser EXPLAIN et EXPLAIN ANALYZE
-
Objectif: Comprendre les plans d'exécution des requêtes pour les optimiser
-
1. Utilisation de EXPLAIN :
-
Utilisez
EXPLAIN SELECT * FROM commandes WHERE produit_id = 567;
pour obtenir le plan d'exécution estimé.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
Ce TD se concentre sur l'optimisation des performances d'une base de données PostgreSQL. Vous apprendrez à créer une base de données de gestion des commandes pour une entreprise de commerce électronique avec 1 000 000 lignes de données. Des étapes comme la connexion, la création de la base de données et des tables seront couvertes.