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

MS SQL Server Discussion :

Profiling procédures stockées


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 75
    Points
    75
    Par défaut Profiling procédures stockées
    Bonjour tout le monde,

    j'aurais voulu savoir si quelqu'un connait un outil pour connaitre facilement si les procédures stockées d'une bdd sont utilisées ou non
    (afin de supprimer les procédures qui ne sont plus utilisées)

    Merci d'avance
    Pensez à utiliser les boutons et

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Bonjour,

    la solution la plus simple serait de se tourner vers l'Audit SQL Server https://msdn.microsoft.com/fr-fr/library/cc280386.aspx.

    Un sujet similaire avait été évoqué en 2012 :

    http://www.developpez.net/forums/d12...-statistiques/

    Bon courage
    MCSA SQL SERVER |MCT | MVP Data Platform

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 75
    Points
    75
    Par défaut
    Super ! Merci c'est exactement ce qu'il me faut

    Mais j'ai une ptite question tout de même par rapport aux server audit , la solution proposée par mikedavem :

    Je suis sur SQL Server 2012 édition standard, je peux créer le serveur audit mais pas extraire ses data !

    J'ai le message suivant :
    L'audit granulaire n'est pas disponible dans cette édition de SQL Server. Pour plus d'informations sur la prise en charge des fonctionnalités dans les différentes éditions de SQL Server, consultez la documentation en ligne de SQL Server.

    Est ce normal de pouvoir créer un serveur audit et ne pas pouvoir en extraire les données? y a t il une autre solution pour extraire les données ?
    Pensez à utiliser les boutons et

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Effectivement la version Standard est bridé c'était évoqué dans mon deuxième liens :

    cependant il y a peut etre une parade (extrait du deuxième liens) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    WITH stored_procedure_used
    AS
    (
    SELECT 
     af.schema_name + '.' + af.object_name AS [stored_procedure],
    COUNT(*) AS nb_executions
    FROM sys.fn_get_audit_file('D:\Audit\*', DEFAULT, DEFAULT) AS af
    INNER JOIN test.sys.objects AS o
     ON o.object_id = af.object_id
    INNER JOIN sys.schemas AS s
     ON s.name = af.schema_name
    WHERE af.action_id = 'EX'
     AND o.type_desc = 'SQL_STORED_PROCEDURE'
    GROUP BY af.schema_name + '.' + af.object_name
    )
    SELECT 
     s.name + ' ' + o.name AS [stored_procedure],
     0 AS nb_executions
    FROM test.sys.objects AS o
    INNER JOIN sys.schemas AS s
     ON o.schema_id = s.schema_id
    WHERE o.type_desc = 'SQL_STORED_PROCEDURE'
     AND NOT EXISTS (SELECT * 
                     FROM stored_procedure_used AS su
    				 WHERE su.stored_procedure = s.name + '.' + o.name)
    UNION ALL 
    SELECT * 
    FROM stored_procedure_used
    MCSA SQL SERVER |MCT | MVP Data Platform

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 75
    Points
    75
    Par défaut
    Oui j'ai bien vu le lien justement... mais cette extraction ne peut pas marcher dans la mesure ou tu ne peux pas associer ton audit sur la base de ton choix avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-StoredProcedureUsed] FOR SERVER AUDIT [Audit-File]
    ADD (EXECUTE ON DATABASE::[maBase] BY [public])
    GO
    Donc l'extraction ne donne rien...
    Pensez à utiliser les boutons et

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Hello,

    Avec 2012 tu peux utiliser les événements étendus pour ce besoin. L'idée est de compter le nombre d'occurrences d'apparition des modules de type P (exécution d'une procédure stockée) dans une cible de type histogramm.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE EVENT SESSION [sp_tracking] 
    ON SERVER 
    ADD EVENT sqlserver.module_end
    (
        ACTION(sqlserver.database_name)
        WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'<mabase>') 
    		   AND [object_type]='P ')
    ) 
    ADD TARGET package0.histogram
    (
    	SET filtering_event_name=N'sqlserver.module_end',
    	slots=(10000),
    	source=N'object_name',
    	source_type=(0)
    )
    WITH 
    (
    	MAX_MEMORY = 4096 KB,
    	EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
    	MAX_DISPATCH_LATENCY = 30 SECONDS,
    	MAX_EVENT_SIZE = 0 KB,
    	MEMORY_PARTITION_MODE = NONE,
    	TRACK_CAUSALITY = OFF,
    	STARTUP_STATE = OFF
    )
    GO
    Il suffit de remplacer ma <mabase> par ta base concernée.

    Pour démarrer la trace il suffit d'exécuter la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER EVENT SESSION [sp_tracking] ON SERVER 
    WITH STATE = START;
    GO
    ou utiliser éventuellement l'interface graphique Management > Extended Events > Sessions > Ta session > Clic droit - Start Session

    Pour récupérer le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    WITH sp_traking_xe
    AS
    (
    	SELECT 
    		CAST(t.target_data AS XML) AS target_data
    	FROM sys.dm_xe_sessions AS se
    	JOIN sys.dm_xe_session_targets AS t
    		ON se.address = t.event_session_address
    	WHERE se.name = 'sp_tracking'
    )
    SELECT 
    	T.x.value('(./value/text())[1]', 'SYSNAME') AS proc_name,
    	T.x.value('(.//@count)[1]', 'BIGINT') AS nb_occurences
    FROM sp_traking_xe
    CROSS APPLY target_data.nodes('/HistogramTarget/Slot') AS T(x)
    ou utilisation de l'interface graphique au choix ...

    ++

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Et pourquoi pas plus simplement le profiler SQL ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Possible en effet mais l'impact sur les performances sera plus important que les événements étendues dans ce contexte. Ce que j'aime bien avec les événements étendues ici, c'est la possibilité d'utiliser une cible qui ne fait que compter au lieu d'avoir à stocker probablement une grande quantité de données via le profiler et agréger par la suite. On peut également jouer avec les options de sessions pour augmenter les buffers allouées à l'enregistrement des événements si jamais l'activité de la base est importante pour minimiser l'impact sur les performances, chose que l'on ne peut pas faire avec SQL Profiler. Je pense notamment aux options MAX_MEMORY et MEMORY_PARTITION_MODE.

    ++

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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