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 01/07/2011, 11h46   #1
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Par défaut Changement de plan d'exécution

Bonjour

En 10.2.0.4, j'ai un traitement de nuit qui fait une requête (avec bind variables), je le trace pour récupérer avec tkprof le plan d'exécution (qui n'est pas terrible)
Je calcule le lendemain matin le plan d'exécution de cette même requête bindée, et il est différent en mieux (pas le même ordre de jointure des différentes tables, pas les mêmes indexes utilisés)

Entre temps, pas de modifications des stats des tables ni indexes
Le traitement tracé ne semble pas faire de "alter session" pour modifier des paramètres d'instance

Quelles sont autres les raisons qui pourraient expliquer que le plan d'exécution soit différent la nuit, et quelques heures plus tard le matin ?

Une charge ponctuelle trop importante sur la base pourrait-elle avoir une influence sur le plan d'exécution ?
Ou autre ?

Merci d'avance pour votre aide, je commence à m'arracher les cheveux là ...
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 14h13   #2
Membre confirmé
 
Avatar de jkofr
 
Homme Jacques
Administrateur de base de données
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Nom : Homme Jacques
Âge : 43
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 219
Points : 219
Envoyer un message via MSN à jkofr
Un calcul des stats par les nightly jobs peut-être?

Quelle est la valeur de la colonne LAST_ANALYZED de tes tables juste avant ton traitement?

Jko
__________________
OCA-OCP 11g, SQL and Performance & Tuning Expert 11g
Data Guard 11g, ASM & Grid Control 11g, Apex
jkofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 14h46   #3
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Merci pour ton aide
J'y avais pensé mais non, j'ai bien vérifié, j'avais désactivé le calcul quotidien des stats depuis plusieurs jours pour être sûr
Le dernier calcul des stats date d'avant le nightly job, j'ai bien vérifié dans la colonne last_analyzed (donc pas de nouvelles stats calculées par le batch)

Je ne comprends donc toujours pas pourquoi j'ai un plan d'exécution différent entre le nightly job et après
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h02   #4
Membre confirmé
 
Avatar de jkofr
 
Homme Jacques
Administrateur de base de données
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Nom : Homme Jacques
Âge : 43
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 219
Points : 219
Envoyer un message via MSN à jkofr
Peut-être un changement massif de données.
Dans ce cas, tes stats et histos sont plus en phase avec la répartition de tes données.

Une idées a explorer.

Tu devais extraire tous les prédicats de la requête en question pour voir.

jko
__________________
OCA-OCP 11g, SQL and Performance & Tuning Expert 11g
Data Guard 11g, ASM & Grid Control 11g, Apex
jkofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h05   #5
Membre expérimenté
 
François
Inscription : février 2010
Messages : 305
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 305
Points : 535
Points : 535
Est-ce qu'il y a eu un hard parse de la requete le soir ('mauvais plan') et le matin ('bon plan')?
Si les statistics sont les memes, et la bind variable aussi, c'est peut-etre du a l'usage des bind variables en elles memes.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h34   #6
Membre confirmé
 
Avatar de jkofr
 
Homme Jacques
Administrateur de base de données
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Nom : Homme Jacques
Âge : 43
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 219
Points : 219
Envoyer un message via MSN à jkofr
Citation:
Envoyé par Rams7s Voir le message
Est-ce qu'il y a eu un hard parse de la requete le soir ('mauvais plan') et le matin ('bon plan')?
Si les statistics sont les memes, et la bind variable aussi, c'est peut-etre du a l'usage des bind variables en elles memes.
En combinaison donc d'un changement radical de la répartition des histos...

Je pousserai l'investigation dans cette direction.

jko
__________________
OCA-OCP 11g, SQL and Performance & Tuning Expert 11g
Data Guard 11g, ASM & Grid Control 11g, Apex
jkofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2011, 16h57   #7
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Il faudrait au moins poster les deux explains plan que vous avez déjà jugés comme bon et mauvais. Je me hasarde en pensant que ''bon et mauvais'' pour vous correspondent à ''rapide et lent'' respectivement n'est ce pas?

Puisque vous dites que vous avez récupéré l'explain plan avec tkprof (peut-être avez vous activé le 10046 events et l'avez profilé avec tkprof) il y a donc de fortes chances que les explains plans que vous avez obtenus sont les vrais explains plan exécutés par votre requête. je veux dire qu'il ne faut pas se baser sur les explains plan obtenus par la commande explain plan for ... suivi d'un select * from table(dbms_xplan.display) car ces derniers ne sont qu'une approximation et peuvent représenter une erreur car ils considèrent tous les binds variables comme des varchar2

Vous n'avez également pas précisé si les bind variables que vous avez utilisées la nuit diffèrent de celles que vous avez utilisées le matin, néanmoins il semblerait que votre problème de changement d'explain plan provienne du "bind variable peeking". L'Optimizer (CBO) calcule son explain plan sur la base des premières input bind variables et le "stock" dans le library cache du shared pool pour une eventuelle réutilisation. En l'absence d'histograme sur les colonnes "bindées" il est probable que l'explain plan ne change pas. Dans le cas contraire, toutes les requêtes suivantes subiront un bind variable peeking pouvant conduire à un explain plan différent.

Le cache et l'activité de la base de données au moment de l'execution de la requête peuvent jouer un role très important aussi: pensez bien que le travail nécessaire pour un select sur une table qui est en train d'être modifiée (read consistency) est différent de celui fait lors d'un select sur une table calme.

Enfin, il suffit parfois d'un seul record de plus pour faire basculer un explain plan d'un état A à un état B. C'est le record de la limite :-)

Enfin, si les bind variables de nuit et celles de jour sont identiques je vous suggere dans ce cas de lire l'article suivant écrit par Jonathan Lewis suite à une question que j'ai posée moi-même il y a quelques années déjà

http://jonathanlewis.wordpress.com/2.../12/no-change/

Bien cordialement

Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 18h32   #8
Membre confirmé
 
Avatar de Ahmed AANGOUR
 
Homme Ahmed AANGOUR
DBA Etudes Oracle
Inscription : janvier 2010
Messages : 123
Détails du profil
Informations personnelles :
Nom : Homme Ahmed AANGOUR
Âge : 33
Localisation : France

Informations professionnelles :
Activité : DBA Etudes Oracle

Informations forums :
Inscription : janvier 2010
Messages : 123
Points : 217
Points : 217
un bon plan le matin, un bon plan le soir...ça me rappelle l'histoire vraie qu'on m'a raconté une fois concernant un pb soumis au support Oracle. Le pb énoncé par le client consistait à dire que lorsqu'il faisait beau l'application ne rencontrait pas de pb de perf mais lorsqu'il pleuvait la base était dans les choux.

Si vous voulez en savoir plus j'ai repris cette anecdote (que je trouve géniale) pour illustrer le Bind Peeking dans un article que j'ai écris il y'a plusieurs mois:
http://ahmedaangour.blogspot.com/201...e-peeking.html
__________________
Mon blog Oracle: http://ahmedaangour.blogspot.com/
Ahmed AANGOUR 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 05h59.


 
 
 
 
Partenaires

Hébergement Web