Identifier les partitions ayant vicié la statistique dans une liste de schéma
J'ai 5 développement de schémas. Et chacun d'entre eux ont des tables partitionnées. Nous avons également des scripts pour créer dynamiquement les tables de partition (Mensuel/Annuel). Nous devons aller à DBA à chaque fois pour obtenir les détails sur la partition des tableaux. Notre vrai problème, c'est que nous avons une table de partition avec 9 partitions. Chaque jour, après un delta de l'opération de chargement (Mises à jour/Supprime l'aide d'un PL/SQL
) aussi certains APPEND
charge à l'aide de SQL*Loader
. Cette opération se produit lorsque la base de données a la charge de pointe. Nous avons quelques problèmes de performance sur cette table.(SELECT
requêtes)
Quand ils sont signalés à DBA, ils disent les statistiques de la table sont obsolètes et après qu'ils font "la collecte de statistiques", comme par magie, la requête fonctionne plus rapidement. J'ai cherché sur ce et a identifié quelques informations sur dynamic performance
vues.
Donc, maintenant , j'ai les Questions suivantes.
1) les développeurs de générer la liste de tous les partitionon tables, le nom de partition, pas de registres disponibles sans passer par DBA?
2) Doit-on identifier la dernière analysé la date de chaque partition
3) de plus, le statut de la partition(index) si elle utilisable ou inutilisable.
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé pour interroger all_ les tableaux mentionnés ci-dessous.
La statistique et de l'histogramme des détails que vous mentionnez sera mise à jour à une fréquence automatiquement par Oracle. Mais lorsque la base de données est occupé avec beaucoup de charges, j'ai vu ces opérations doit être déclenché manuellement. Nous avons été confrontés à une situation similaire, nous avons donc utilisé la force de l'Analyser son fonctionnement après notre charge pour les tables critiques. Vous avez besoin d'avoir le privilège de l'identifiant que vous utilisez pour charger la table.
MODIFIER:
ANALYZE
de ne plus recueillirCBO
stats comme mentionné iciDonc,
DBMS_STATS
paquet doit être utilisé.Et jusqu'à ce que l'analyse est terminée, l'affichage des tableaux ci-dessous peuvent ne pas produire les résultats précis (en Particulier la last_analyzed et num_rows colonnes)
Remarque: Essayez de remplacer
all_
commedba_
dans les noms de table, si vous y avez accès, vous pouvez les essayer.Vous pouvez également essayer d'obtenir
SELECT_CATALOG_ROLE
pour le développement de votre id que vous utilisez, de sorte que vous pouvez SÉLECTIONNER ledata dictionary views
, ce qui réduit la dépendance surDBA
sur ces requêtes.(Encore DBA sont les bonnes personnes pour quelques questions!!)Requête pour identifier la table de partition, partition de nom, le nombre de lignes et la dernière Analysé date!
Ci-Dessous la Requête renvoie l'index/nom de la table qui sont
UNUSABLE
Ci-Dessous la Requête renvoie l'index/la table (
PARTITION
) nomUNUSABLE
ANALYZE
pour recueillir des statistiques post Oracle 8i, utilisez plutôt DBMS_STATS. Vous pouvez consulter asktom.oracle.com/pls/asktom/... tropNormalement il n'est pas nécessaire pour identifier les objets qui ont besoin de statistiques recueillies. Oracle recueille automatiquement des statistiques pour rassis objets, à moins que la tâche a été
désactivé manuellement. C'est généralement suffisant pour les systèmes OLTP. Utiliser cette requête pour connaître l'état de la tâche:
Pour les données de l'entrepôt systèmes, il n'ya pas besoin d'interroger le dictionnaire de données pour rassis stats. Dans un entrepôt de données statistiques doivent être prises en compte après presque
chaque opération. Les développeurs doivent prendre l'habitude de toujours penser à les statistiques après un truncate, insert, swap, etc. Finalement, ils vont "juste savoir" quand à recueillir des données statistiques.
Mais si vous voulez continuer à voir la façon dont Oracle détermine si les statistiques sont rassis, regardez
DBA_TAB_STATISTICS
etDBA_TAB_MODIFICATIONS
.Voici un exemple de chargement initial avec la collecte des statistiques. La table et les partitions ne sont pas obsolètes.
Maintenant ajouter un grand nombre de lignes et les statistiques sont obsolètes.
USER_TAB_MODIFICATIONS
donne des renseignements plus précis sur la table de caducité.ALL_PART_TABLES
ouUSER_PART_TABLES
(à condition d'avoir accès).ALL_TAB_PARTITIONS
peut être utilisée pour obtenir le nombre de lignes par partition, alongwith d'autres détails.Vérifier d'autres points de vue Oracle a pour la collecte des détails sur les tables partitionnées.
Je voudrais suggérer que vous devriez analyser les tableaux, et, éventuellement, de reconstruire les index, chaque jour après votre chargement de données. Si votre charge de données affecte un grand nombre d'enregistrements dans la table, et va affecter les indices existants, c'est une bonne idée de façon proactive la mise à jour des statistiques pour la table et l'index.
Vous pouvez utiliser sur le système de points de vue pour obtenir cette information (Vérifier http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin005.htm)
J'ai eu un peu ce genre de problème et je l'ai résolu par la collecte de statistiques sur rassis partitions en utilisant uniquement 11g nouveau
INCREMENTAL
option.C'est l'approche inverse à votre problème, mais il pourrait valoir la peine d'examiner (précisément, de la façon dont oracle détermine ce qui est "périmé" partition est).
Je préfère toujours l'approche proactive - sens, de recueillir des statistiques sur vicié de la partition lors de la dernière étape de mon etl, plutôt que de donner le développeur plus fort privs.