Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2010, 22h38   #1
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Par défaut fréquence utilisation d'index

Bonsoir ,
j'ai crée un ensemble d'index pour optimiser certaines requêtes .
alors ma question : y a t'il un moyen pour déterminer la fréquence d'utilisation de ces index ?? La vue V$OBJECT_USAGE me permet seulement de savoir si l'index a été utilisé ou non
Merci
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 10h48   #2
Membre chevronné
 
Avatar de 13thFloor
 
Homme
DBA Oracle freelance
Inscription : janvier 2005
Messages : 558
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : France

Informations professionnelles :
Activité : DBA Oracle freelance

Informations forums :
Inscription : janvier 2005
Messages : 558
Points : 718
Points : 718
Bonjour,
la colonne tch de la requête suivante va t'indiquer le nombre de fois que le buffer est accédé.
Code :
1
2
3
4
5
6
7
8
SELECT DISTINCT b.owner, b.segment_name,tch,state,
       dbablk,
       class
     FROM x$bh a, dba_extents b
     WHERE b.file_id=a.dbarfil
     AND a.dbablk BETWEEN b.block_id
     AND b.block_id+blocks-1
    AND segment_type='INDEX' AND segment_name='TON_INDEX';
Les différents status sont :
0 FREE no valid block image
1 XCUR a current mode block, exclusive to this instance
2 SCUR a current mode block, shared with other instances
3 CR a consistent read (stale) block image
4 READ buffer is reserved for a block being read from disk
5 MREC a block in media recovery mode
6 IREC a block in instance (crash) recovery mode

Pour ma part, le comptage de l'usage de l'index est vue avec la classe 1.
Mais je ne sais pas à quoi correspond la colonne DBABLK.
Si quelqu'un a l'info.
13thFloor est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2010, 18h02   #3
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Bonsoir ,

Je vous remercie infiniment pour votre collaboration ,
Votre requête fonctionne convenablement mais elle ne prend pas en considération le nombre de fois que mon index est utilisé avant l'exécution de votre requête . c-à-d le comptage commence par 1
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h15   #4
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
lorsque je redémarre ma base de données , le compteur est mis à zero
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h25   #5
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 105
Points : 150
Points : 150
> La vue V$OBJECT_USAGE me permet seulement de savoir si l'index a été utilisé ou non

Vous pouvez vérifier fréquemment v$object_usage et désactivez, puis activer le index monitoring, et plus tard aller et vérifier de nouveau et désactiver et activer...

pseudo code:

Code :
1
2
3
4
5
6
while true; do
SELECT * FROM v$object_usage;
ALTER INDEX ... nomonitoring usage;
ALTER INDEX ... monitoring usage;
sleep 3600
end
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 00h52   #6
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Merci
le but de la recherche fréquences d'utilisation des index est de comparer leurs utilités afin de supprimer les index les moins utilisés pour satisfaire une contrainte de stockage.
y a t il d'autres solutions plus pratiques ??
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 03h56   #7
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 105
Points : 150
Points : 150
> y a t il d'autres solutions plus pratiques ??

Code :
1
2
3
SELECT executions FROM v$sql WHERE plan_hash_value =
(SELECT plan_hash_value FROM v$sql_plan
 WHERE object_name = '&index_name');
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/12/2010, 15h56   #8
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Citation:
Envoyé par yong321 Voir le message
> y a t il d'autres solutions plus pratiques ??

Code :
1
2
3
SELECT executions FROM v$sql WHERE plan_hash_value =
(SELECT plan_hash_value FROM v$sql_plan
 WHERE object_name = '&index_name');
Merci votre requêtes fonctionne convenablement mais le même problème persiste encore : lorsque je redémarre ma base de donnée le compteur est mis à zéro.
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 17h10   #9
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 105
Points : 150
Points : 150
> Merci votre requêtes fonctionne convenablement mais le même
> problème persiste encore : lorsque je redémarre ma base de
> donnée le compteur est mis à zéro.

Vous pouvez
soit select exécutions_(total|delta) from dba_hist_sqlstat ...
ou prendre des snapshots des données régulièrement par vous-même.
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 18h53   #10
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
j'ai testé cette requête :
Code :
1
2
3
4
SELECT sql_id , executions_total FROM dba_hist_sqlstat 
WHERE plan_hash_value =
(SELECT plan_hash_value FROM v$sql_plan
 WHERE object_name = 'IJB');
cette requête me retourne :
Code :
1
2
3
4
5
6
7
 
SQL_ID          EXECUTIONS_TOTAL                                                  
------------- ----------------                                                  
4bnwsym4ddcma               1                                                  
ckpz7bhy8zatd                  1                                                  
038br0dx72qac                  2                                                  
2cnkv8y5t5f01                  1
peut être dois je faire un count(EXECUTIONS_TOTAL ) ??
mais lorsque j'utilise mon index "IJB" et je re-exécute cette requête rien ne change au niveau du résultat ??
Merci Mr Yong pour votre aide
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 19h47   #11
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 105
Points : 150
Points : 150
> peut être dois je faire un count(EXECUTIONS_TOTAL ) ??

Soit count() soit sum().

> mais lorsque j'utilise mon index "IJB" et je re-exécute cette requête
> rien ne change au niveau du résultat ??

Vous pouvez attendre jusqu'à ce que le snapshot est prise, peut-être une heure.

Pour une évaluation à long terme de index usage, vous regardez dba_hist_sqlstat.
Pour une évaluation à court terme de index usage, vous regardez v$sql.
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2010, 11h05   #12
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Bonjour Mr Yong ,
Je vous remercie infiniment pour votre collaboration ,
mais le résultat de la requête(dba_hist_sqlstat) n'a pas changé.
je pense que je dois travailler avec la vue v$sql et créer un compteur manuellement . c-à-d je récupère la valeur de (select executions) à chaque arrêt de la base de donnée.
qu'en pensez vous ? y a t'il d'autres solutions plus pratiques ?? Merci
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 16h24   #13
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 105
Points : 150
Points : 150
> je récupère la valeur de (select executions) à chaque arrêt de la base de donnée.

Vous n'avez pas à select executions à chaque arrêt de la base de données. Vous pouvez juste faire périodiquement.

> le résultat de la requête(dba_hist_sqlstat) n'a pas changé.

Je ne sais pas pourquoi, sauf si vous avez modifié sampling interval (select * from dba_hist_wr_control).

> y a t'il d'autres solutions plus pratiques ?

Pour l'instant, je ne peux pas penser à quelque chose de mieux.
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2010, 11h17   #14
Membre éprouvé
 
Femme
Administrateur de base de données
Inscription : novembre 2007
Messages : 341
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : novembre 2007
Messages : 341
Points : 478
Points : 478
ça vaut peut-être le coup de requêter la table dba_hist_active_sess_history en repérant le object_id de l'index en question (CURRENT_OBJ# dans cette table)
Heaven93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 09h45   #15
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Citation:
Envoyé par Heaven93 Voir le message
ça vaut peut-être le coup de requêter la table dba_hist_active_sess_history en repérant le object_id de l'index en question (CURRENT_OBJ# dans cette table)
Si j'ai bien compris :

Code :
1
2
3
SELECT count(CURRENT_OBJ#)FROM dba_hist_active_sess_history 
WHERE CURRENT_OBJ# =(SELECT object# FROM v$sql_plan 
WHERE object_name = 'IJB');
l'utilisation de cette requête ne résout pas le problème .
Merci
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h08   #16
Membre éprouvé
 
Femme
Administrateur de base de données
Inscription : novembre 2007
Messages : 341
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : novembre 2007
Messages : 341
Points : 478
Points : 478
pas du tout, ta requête doit inclure le sql_id (pas de jointure avec v$sqlplan puisque tu connais déjà le numéro d'objet mais plutôt avec dba_hist_sqlstat), le snap_id...
mais à mon avis tu prends le problème à l'envers. si tu as construit des indexes pour optimiser "certaines" requêtes qui sont donc identifiées, pourquoi tu ne les exécutes pas toi-même en examinant le plan d'exécution et tu ajustes au besoin? d'autant qu'apparemment tu n'as pas eu peur que ces indexes dégradent d'autres requêtes...
Heaven93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 00h03   #17
Candidat au titre de Membre du Club
 
Salmen
Étudiant
Inscription : octobre 2010
Messages : 59
Détails du profil
Informations personnelles :
Nom : Salmen
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 59
Points : 13
Points : 13
Merci Mr Heaven ,
peut être j'ai pas bien expliqué le but de mon travail.
Ça consiste à mettre en place une stratégie de sélection dynamique d 'index de jointure binaire. les fréquences d'utilisation des index représente l'un des paramètres d'entrés de mon modèles.
Vos suggestions sont les bien venues
CssFaxien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h11.


 
 
 
 
Partenaires

Hébergement Web