comment puis-je effacer oracle cache de plan d'exécution pour le benchmarking?
Sur oracle 10gr2, j'ai plusieurs requêtes sql que je suis la comparaison des performances, mais après la première manche, le v$sql de la table a le plan d'exécution stockées pour la mise en cache, donc pour l'une des questions que je aller à partir de 28 secondes sur la première course de la .5 secondes après.
J'ai essayé
ALTER SYSTÈME de CHASSE d'eau BUFFER_CACHE; -- après l'exécution de cette, la requête s'exécute constamment à 5 secondes, ce qui je ne crois pas est exacte.
pensé que peut-être la suppression de la ligne de l'élément lui-même à partir du cache:
delete from v$sql où sql_text comme 'select * from....
mais une erreur de ne pas pouvoir supprimer de la vue.
- v$sql n'est pas vraiment un tableau, c'est une dynamique de performance, et non, vous ne pouvez pas supprimer des lignes à partir d'elle.
Vous devez vous connecter pour publier un commentaire.
Peter vous a donné la réponse à la question que vous avez posée.
C'est la déclaration que vous utiliseriez pour "supprimer des déclarations préparées à partir de la mémoire cache".
(Requêtes préparées ne sont pas les seuls objets supprimés de la piscine partagée, la déclaration n'est plus.)
Comme je l'ai indiqué dans mon précédent commentaire (votre question),
v$sql
n'est pas un tableau. C'est une dynamique de performance, une commode table-comme la représentation de l'Oracle de structures internes de la mémoire. Vous devez seulement SÉLECTIONNER le privilège de la dynamique de la performance des points de vue, vous ne pouvez pas supprimer des lignes d'eux.vider la piscine commune et le cache tampon?
La suite de ne pas répondre directement à votre question. Au lieu de cela, il répond à une fondamentalement différente (et peut-être plus important) question:
Doit nous avons l'habitude de vider la piscine commune et/ou le cache de tampons pour mesurer les performances d'une requête?
En bref, la réponse est non.
Je pense que Tom Kyte adresses ce assez bien:
http://www.oracle.com/technology/oramag/oracle/03-jul/o43asktom.htmlhttp://www.oracle.com/technetwork/issue-archive/o43asktom-094944.html
<extrait>
En fait, il est important que l'outil de réglage de ne pas le faire. Il est important pour exécuter le test, ignorer les résultats, et ensuite exécuter deux ou trois fois et la moyenne de ces résultats. Dans le monde réel, la mémoire tampon ne sera jamais dépourvu de résultats. Jamais. Lorsque vous vous branchez, votre objectif est de réduire la logique d'e/S (LIO), parce que le physique I/O (PIO) prendra soin de lui-même.
Considérez ceci: Rinçage de la piscine commune et le cache tampon est encore plus artificiel que de ne pas en les évacuant. La plupart des gens semblent sceptiques sur ce, je pense, parce qu'il va à l'encontre de la sagesse conventionnelle. Je vais vous montrer comment faire cela, mais pas de sorte que vous pouvez l'utiliser pour tester. Plutôt, je vais l'utiliser pour démontrer pourquoi il est un exercice futile et totalement artificiel (et, par conséquent, conduit à de mauvaises hypothèses). Je viens de commencer mon PC, et j'ai exécuter cette requête à l'encontre d'une grande table. J' "flush" le cache de tampons et de l'exécuter à nouveau:
</extrait>
Je pense que Tom Kyte est tout à fait exact. En matière de lutte contre le problème de performances, je ne pense pas que la "compensation de l'oracle cache de plan d'exécution" est normalement une étape pour la fiabilité de l'analyse comparative.
Nous allons résoudre le problème de la performance.
Vous nous dites que vous avez observé que la première exécution d'une requête prend beaucoup plus de temps (~28 secondes) par rapport à des exécutions suivantes (~5 secondes), même lorsque les bouffées de chaleur (tous les index et les blocs de données) le cache de tampons.
Pour moi, cela suggère que le dur analyser est en train de faire certains de levage lourd. C'est beaucoup de travail, ou sa rencontre beaucoup d'attentes. Cela peut être l'objet d'enquêtes et à l'écoute.
Je me demandais si peut-être les statistiques sont inexistantes, et l'optimiseur est de dépenser beaucoup de temps à recueillir des statistiques, avant de préparer un plan de requête. C'est l'une des premières choses que je voudrais vérifier, que les statistiques sont collectées sur l'ensemble des tables de référence, les index et les colonnes indexées.
Si votre requête joint un grand nombre de tables, le CBO peut-être envisager un grand nombre de permutations pour rejoindre l'ordre.
Une discussion de l'Oracle de traçage est au-delà de la portée de cette réponse, mais c'est la prochaine étape.
Je pense que vous allez probablement vouloir le suivi des événements 10053 et 10046.
Voici un lien vers un "événement 10053" discussion par Tom Kyte vous pouvez trouver utile:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:63445044804318
tangentiellement liés anecdote re: dur dur d'analyser les performances
Quelques années en arrière, je ne vois qu'une seule requête qui s'est écoulé fois en termes de MINUTES sur la première exécution, les exécutions suivantes en termes de secondes. Ce que nous avons trouvé était que la majorité de l'époque de la première exécution de temps a été passé sur le disque dur les analyser.
Ce problème de requête a été écrit par un CrystalReports développeur qui innocemment (naïvement?) rejoint deux humongous vues de rapports.
L'un des points de vue a été une jointure de 62 tables, l'autre point de vue a été une jointure de 42 tables.
La requête utilisée Optimiseur Basé sur les Coûts. Traçage a révélé qu'il n'était pas temps d'attente, il était tout le temps CPU passé à évaluer les possibles chemins de jointure.
Chaque constructeur a fourni des "rapports" points de vue n'était pas trop mauvais en soi, mais quand deux d'entre eux ont été rejoints, il a été terriblement lents. Je crois que le problème a été le grand nombre de joindre les permutations que l'optimiseur envisage. Il est un exemple de paramètre qui limite le nombre de permutations considérés par l'optimiseur, mais notre solution était de ré-écrire la requête. L'amélioration de la requête ne s'est joint à la douzaine de tables qui ont été effectivement requises par la requête.
(La première immédiat et à court terme "band aid" correctif a été à l'annexe de la requête plus tôt le matin, avant le rapport de la tâche de génération de courant. Que fait le rapport de la génération "plus vite", parce que la génération du rapport course de l'utilisation de l'instruction préparée dans la piscine commune, en évitant le dur analyser.
L'aide de bande fix n'était pas une vraie solution, il a juste déplacé le problème vers un préliminaire à l'exécution de la requête, lorsque le temps d'exécution n'a pas été remarqué.
Notre prochaine étape aurait probablement été de mettre en œuvre un "stockées plan" de la requête, afin de procurer une stabilité plan de requête.
Bien sûr, l'état de la réutilisation (en évitant le dur analyser, à l'aide de variables de liaison) est le modèle normatif dans Oracle. Il mproves les performances, l'évolutivité, yada, yada, yada.
Ce anecdotiques incident peut être entièrement différent que le problème que vous observez.
HTH
Il a été un moment depuis que j'ai travaillé avec Oracle, mais je crois que les plans d'exécution sont mis en cache dans la piscine commune. Essayez ceci:
Le cache de tampons est où Oracle stocke récemment utilisé données afin de minimiser les e /s de disque.
Nous avons fait beaucoup de travail ces derniers temps avec le réglage des performances des requêtes, et d'un coupable de l'incohérence des performances de la requête est le cache du système de fichiers que Oracle est assis sur.
Il est possible que pendant que vous rincez l'Oracle de cache du système de fichiers a encore les données de votre requête demandant ce sens que la requête retournera toujours rapide.
Malheureusement, je ne sais pas comment faire pour effacer le cache du système de fichiers - je viens de l'utiliser très utile script à partir de notre très utiles aux administrateurs systèmes.