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

Administration SQL Server Discussion :

Recherche Query sur les key lookup RID lookup + Plan d'execution les plus utilisés


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Par défaut Recherche Query sur les key lookup RID lookup + Plan d'execution les plus utilisés
    Bonjour a Tous

    Je recherche une query permettant de tracer dans le plan cache :

    - les RID lookup (avec le plan d'execution + la requete associée)
    - les Keylookup (avec le plan d'execution + la requete associée)
    - plans d'executions les plus utilisés sur ma BDD (+ la requete associée)
    - les plans d'executions liés a une table (+ la requete associée)

    Avez vous ca en stock ?

    merci a vous

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 996
    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 996
    Billets dans le blog
    6
    Par défaut
    Quick et super dirty :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM   sys.dm_exec_cached_plans AS cp
           CROSS APPLY sys.dm_exec_query_plan(plan_handle)
           CROSS APPLY sys.dm_exec_sql_text(plan_handle)
    WHERE  CAST(query_plan AS NVARCHAR(max)) LIKE '%RID lookup%' COLLATE French_CI_AI
       OR  CAST(query_plan AS NVARCHAR(max)) LIKE '%Keylookup%' COLLATE French_CI_AI
    ORDER BY usecounts desc
    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/ * * * * *

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Pour ce qui est du numbre d'exécution de chaque plan, vous pouvez vous en remettre à la colonne sys.dm_exec_query_stats.execution_count.
    Combiné à sys.dm_exec_query_plan, vous obtiendrez le plan, mais attention, c'est coûteux

    Pour les keylookup, c'est du costaud. J'ai une requête qui le fait, mais pas de système de production sous la main pour vérifier qu'elle est correcte.
    Pour les RID lookup, je n'ai pas mais je vais chercher. Pour les plans liés à une table en particulier, ce doit être assez facile.

    I'll be back

    @++

  4. #4
    Membre éclairé Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Par défaut
    merci a vous

    j'attends ton retour elkuset

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Voici pour les key lookup :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
     
    WITH
    	XMLNAMESPACES (	DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
    	, HANDLE AS
    	(
    		SELECT		QS.plan_handle
    				, TP.query_plan
    		FROM		(
    					SELECT	DISTINCT plan_handle
    					FROM	sys.dm_exec_query_stats
    				) AS QS
    		OUTER APPLY	sys.dm_exec_query_plan(QS.plan_handle) AS TP
    	)
    SELECT		Q.n.value('(@StatementText)[1]', 'VARCHAR(4000)') AS sql_text
    		, S.i.value('(@PhysicalOp)[1]', 'VARCHAR(128)') AS PhysicalOp
    		, S.i.value('(./IndexScan/Object/@Database)[1]', 'VARCHAR(128)') AS DatabaseName
    		, S.i.value('(./IndexScan/Object/@Schema)[1]', 'VARCHAR(128)') AS SchemaName
    		, S.i.value('(./IndexScan/Object/@Table)[1]', 'VARCHAR(128)') AS TableName
    		, S.i.value('(./IndexScan/Object/@Index)[1]', 'VARCHAR(128)') AS IndexName
    		, STUFF
    		(
    			(
    				SELECT	DISTINCT ', ' + cg.value('(@Column)[1]', 'VARCHAR(128)')
    				FROM	S.i.nodes('./OutputList/ColumnReference') AS t(cg)
    				FOR	XML PATH('')
    			),1,2,''
    		) AS output_columns
    		, STUFF
    		(
    			(
    				SELECT	DISTINCT ', ' + cg.value('(@Column)[1]', 'VARCHAR(128)')
    				FROM	S.i.nodes('./IndexScan/SeekPredicates/SeekPredicateNew//ColumnReference') AS t(cg)
    				FOR	XML PATH('')
    			),1,2,''
    		) AS seek_columns
    		, S.i.value('(./IndexScan/Predicate/ScalarOperator/@ScalarString)[1]', 'VARCHAR(4000)') AS Predicate
    		, P.usecounts
    		, PH.query_plan
    FROM		HANDLE AS PH
    INNER JOIN	sys.dm_exec_cached_plans AS P
    			ON PH.plan_handle = P.plan_handle
    CROSS APPLY	PH.query_plan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/*') AS Q(n)
    CROSS APPLY	Q.n.nodes('.//RelOp[IndexScan[@Lookup="1"] and IndexScan/Object[@Schema!="[sys]"]]') AS S(i)
    OPTION		(RECOMPILE, MAXDOP 1);
    Je n'ai pas encore eu le temps de chercher pour les RID lookup ...

    @++

Discussions similaires

  1. Recherche fonction sur les listes
    Par becks dans le forum Général Python
    Réponses: 5
    Dernier message: 05/05/2006, 16h11
  2. [XSL] recherche infos sur xsl:key
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 17/02/2006, 17h23
  3. Recherche site sur les maths 1er S
    Par argon dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/01/2006, 20h19
  4. Recherche documentation sur les arbres
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2004, 01h40
  5. recherche doc sur les courbe de bézier
    Par amaury pouly dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/04/2003, 22h41

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