BUT2/BD/Lekpa/TP_Optimisation/reponse.txt

122 lines
5.3 KiB
Plaintext
Raw Normal View History

2024-02-26 20:37:20 +01:00
tallend studio
sql developper
Se connecter au terminal:
sqlplus "wamster@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=lorien.arda.lan)(Port=1521))(CONNECT_DATA=(SID=ORCLIUT)))"
Mettre a jour les statistiques des tables:
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'LIGNE_COMMANDE');
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'COMMANDE');
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'PRODUIT');
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'CLIENT');
Verifier les statistiques:
select TABLE_NAME, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT , AVG_ROW_LEN, SAMPLE_SIZE, LAST_ANALYZED FROM user_tables;
TABLE_NAME: Le nom de la table.
BLOCKS: Le nombre total de blocs de stockage utilisés par la table.
EMPTY_BLOCKS: Le nombre de blocs vides dans la table.
AVG_SPACE: L'espace moyen utilisé par chaque bloc de la table.
CHAIN_CNT: Le nombre de chaînes de migration dans la table. Les chaînes de migration se produisent lorsqu'une ligne ne peut pas tenir dans un seul bloc et doit être stockée dans plusieurs blocs.
AVG_ROW_LEN: La longueur moyenne des lignes de la table en octets.
SAMPLE_SIZE: La taille de l'échantillon utilisé pour collecter les statistiques sur la table.
LAST_ANALYZED: La date à laquelle les statistiques de la table ont été analysées pour la dernière fois.
-------------------------------------------EXERCICE 2---------------------------------------------
SET AUTOTRACE ON
select * from commande where reference='008084';
le sgbd accede directement à la donnée en lisant la table ligne par ligne
1 recursive calls:
Le nombre de fois où le système a effectué des appels récursifs. Ces appels sont généralement associés à des opérations internes du système de gestion de base de données (SGDB) et peuvent être liés à la gestion des verrous, à la gestion des transactions, etc.
0 db block gets:
Le nombre de blocs de données récupérés à partir du cache de la base de données en mémoire (buffer cache). Cela représente le nombre de lectures logiques.
23 consistent gets:
Le nombre de blocs de données récupérés de manière cohérente depuis le cache de la base de données en mémoire. Cela inclut les blocs qui ont été lus à partir du disque et ont également été modifiés dans le cache.
0 physical reads:
Le nombre de lectures physiques effectuées depuis le disque. Cela représente le nombre de fois où des données ont dû être lues à partir du stockage physique, généralement parce qu'elles n'étaient pas présentes dans le cache.
0 redo size:
La taille du journal de transactions (redo log) générée pendant l'exécution de la requête. Le journal de transactions enregistre les modifications apportées à la base de données et est utilisé pour la récupération en cas de panne.
513 bytes sent via SQL*Net to client:
La quantité de données envoyées au client via le protocole SQL*Net.
41 bytes received via SQL*Net from client:
La quantité de données reçues du client via le protocole SQL*Net.
2 SQL*Net roundtrips to/from client:
Le nombre d'échanges de messages entre le client et le serveur via le protocole SQL*Net.
0 sorts (memory):
Le nombre de tri effectué en mémoire. Cela peut se produire lorsqu'une requête nécessite un tri des données, et cela peut être plus efficace s'il peut être fait en mémoire.
0 sorts (disk):
Le nombre de tri effectué sur le disque. Cela peut se produire si le tri ne peut pas être entièrement effectué en mémoire.
1 rows processed:
Le nombre total de lignes traitées par la requête.
en réexecutant, la recursive row passe de 1 à 0.
c'est peut être car les ressources sont directement dispo dans le cache, ou que des optimisations internes du SGDB ont été faites.
-------------------------------------------EXERCICE 3---------------------------------------------
SELECT ID,
ROWID,
DBMS_ROWID.ROWID_RELATIVE_FNO(rowid) FICHIER,
DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) BLOC,
DBMS_ROWID.ROWID_ROW_NUMBER(rowid) NUMLIGNE
FROM COMMANDE;
ROWID permet de recuperer des infos sur le fichier le bloc et la ligne d'un tuple sql
SELECT ID,
ROWID,
DBMS_ROWID.ROWID_RELATIVE_FNO(rowid) FICHIER,
DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) BLOC,
DBMS_ROWID.ROWID_ROW_NUMBER(rowid) NUMLIGNE
FROM COMMANDE
WHERE id=10;
select * from commande where rowid='AAAncgAAFAABPKgAAh';
Il n'y a qu'un bloc qui a été lu.
On peut difficilement faire plus efficace. il n'y a que le recursive call qui peut diminuer.
en réexecutant la requette il passe à 0.
-------------------------------------------EXERCICE 4---------------------------------------------
CREATE INDEX ix_reference ON COMMANDE(REFERENCE) ;
EXEC DBMS_STATS.GATHER_INDEX_STATS('wamster','ix_reference');
select ix_reference from COMMANDE;
-------------------------------------------EXERCICE 5---------------------------------------------
create index ix_prix_total on ligne_commande(PRIX_TOTAL) ;
SELECT commande_id FROM LIGNE_COMMANDE WHERE PRIX_TOTAL>1000 ;
SELECT commande_id FROM LIGNE_COMMANDE WHERE PRIX_TOTAL/2>500 ;
la deuxième requete recupere plus de blocs dans le cache
drop index ix_prix_total;
-------------------------------------------EXERCICE 6---------------------------------------------