IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

Refonte MLD sous sybase


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Refonte MLD sous sybase
    Bonjour(Nouveau sur le forum),

    Voila je suis face à une grosse base de données sous Sybase, et je dois refaire le modèle de données de la base en supprimant les tables et procédures stockées non utilisés sachant qu'il y a un traitement quotidien sur la base. J'ai entendu parlé d'un outils qui me permettais de voir les statistique d'utilisation des tables et procédures de la base ou un truc du genre, un outils interne ou autre qu'on pouvait lancer.
    Existe-il vraiment un outils de ce genre la? Sinon avez vous une autre alternative à me proposer.

    Merci par avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Pour les tables, et pour autant qu'on soit en 12.5.0.3 ou plus récent, on peut utiliser la table master..monOpenObjectActivity (qui fait partie des tables "MDA") pour estimer le taux d'utilisation. je souligne le terme "estimer" parce que les données dans cette table sont remisent à zero lors du redémarrage du data server, et peuvent aussi être effacées si les variables de config "number of open objects" et "number of open indexes" sont trop petites.

    Pour les procs c'est nettement plus compliqué. Un outil comme sqlbrowser (www.sqlbrowser.com) peut faire une analyse statique de tout le code SQL sur le serveur, ce qui donne de l'information sur les dépendances entre les objets. Ensuite, il est possible en utilisant la table master..monSysStatement (aussi une table MDA) de déterminer les statements qui sont exécutés. A nouveau - cette utilisation donne une estimation, et n'est pas complètement triviale à mettre en oeuvre.

    On peut aussi utiliser l'auditing et auditer toutes les executions de proc stockées.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci bien pour ta réponse, je vais vérifier tout ça.

    Si j'ai bien compris, tant que la base n'est pas redémarré les stats dans master..monOpenObjectActivity sont correctes?

    Oue je peux localiser "number of open objects" et "number of open indexes" pour vérifier que leur taille n'est correcte?

    Concernant l'auditing des proc stockées, tu parles bien de modifier tous les procs en faisaint en sorte qu'ils font un insert sur une table qui sert de log à chaque que la proc est èxécuté?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Pour vérifier la valeur de "number of open ..." - sp_monitorconfig 'all', et voir la colonne "max used" et "num reuse".

    Pour l'auditing - non - on peut mettre en place l'audit Sybase (via la base sybsecurity) et ensuite mettre en marche l'auditing de l'exec de procs stockées (via sp_audit 'exec_procedure', 'all', 'all', 'on').

    Mais effectivement, si tu as un nombre relativement restreint de procs qui sont soupçonnées de ne plus être utilisées alors on peut aussi ajouter du logging à la proc même...

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Bonjour, Merci pour ces infos
    J'ai pu tester quelques un de tes scripts dans les tutos.
    Cependant j'avais des question : Y-a il une requête permettant de connaître la date du dernier démarrage du dataserver?
    En effet je ne contrôle pas ce niveau d'utilisation des bases.

    La colonne OptSelectCount de monOpenObjectActivity me donne bien le nombre de fois que l'index à été lu pour l'objet?
    DOnc je peux en déduire que sur chaque utilisation du "select" sur une table passe obligatoirement pas la lecture de l'index associé?


    La différence entre OptSelectCount UsedCount(qu'est que l'optimiseur)?

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Une façon de voir quand le serveur a été démarré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select crdate from master..sysdatabases where name = 'tempdb'
    puisque la base tempdb est re-créée au démarrage.

    Sur monOpenObjectActivity - IndId 0 représente la table elle même (cad un table scan). IndId 1 est le "Clustered" index.

    OptSelectCount: nombre de fois que cet index à été pris en compte par l'optimiseur.
    UsedCount: nombre de fois que cet index a été effectivement utilisé

    La différence peux venir d'un chemin d'optimisation qui change en cours d'execution.
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci pour ces infos, ça règle tout mon problème.
    Une ultime question, j'ai une table qui comporte environ 10 million de données, je tente de supprimer(ou désactiver) un trigger sur cette table mais je n'y arrive pas.
    J'ai laisser tourner toute la nuit et le matin rien,j'ai deja eu le temps d'être deconnecté.
    AUrait-tu un moyen de pro pour palier à ce problème sans supprimer la table.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Si c'est vraiment un trigger, alors c'est soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    drop trigger <nom_du_trigger>
    ou alors (desactivation temporaire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table <nom table> disable trigger
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    bonjour,
    Juste un point pour les OptSelectCount UsedCount, si j'ai bien compris ces attributs comptabilisent uniquement les indexes ayant été sollicités dans une CLAUSE WHERE d'un select?
    Donc je ne pourrais pas avoir d'informations sur les autres tables qui ne disposent pas d'indexes ou de requetes sans clause WEHERE? Si Oui existe t-il un autre moyen ou pas?

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Si l'optimiseur choisi de faire un table scan alors le OptSelectCount, etc. est incrémenté pour l'IndId 0, cad la table elle même.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    En faite je n’ai pas très bien compris ce dernier point.
    Ce que je retiens c’est que lorsque qu’il n’y a aucun index sur une table ou que les indexes de la table ne satisfont pas à la requête (ex : select * from client where age=20 , et que la colonne age n’est pas indexée), la requête utilise nécessairement un table scan pour analyser toute la table. Dans ce cas la, les indicateurs optselectcount et usecount ne sont pas impactés. Est-ce exact ?
    Si oui, est-ce qu’il y a d’autres indicateurs permettant de connaître le nombre de table scan sur les tables.

    Merci par avance.

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Non - OptSelectCount et UsedCount sont impactés, pour la ligne où IndID = 0, cette ligne correspondant à la table elle même, et non pas à l'un des indexes.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

Discussions similaires

  1. [ASE12][TSQL]Curseur sous Sybase
    Par jeff37 dans le forum Sybase
    Réponses: 4
    Dernier message: 15/01/2007, 17h42
  2. [ASE][T-SQL]Decode sous Sybase
    Par KHOULALENE dans le forum Sybase
    Réponses: 2
    Dernier message: 09/02/2006, 11h02
  3. log des requêtes sous sybase 10
    Par VsMetal dans le forum Sybase
    Réponses: 3
    Dernier message: 03/05/2004, 14h09
  4. Les index sous Sybase
    Par Emdis dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 02/06/2003, 15h21
  5. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo