Bonjour,
Mon but est de faire un script permettant de générer les commandes de création des index manquants à partir des plans d’exécutions présent dans le cache.
Je souhaite donc récupérer les différentes informations utiles à la création d'un index dans le fichier xml du plan d’exécution.
Exemple :
A partir du xml suivant :
J'aimerais obtenir un tableau du genre :
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... <MissingIndexes> <MissingIndexGroup Impact="99.8122"> <MissingIndex Database="[msdb]" Schema="[dbo]" Table="[sysssislog]"> <ColumnGroup Usage="EQUALITY"> <Column Name="[executionid]" ColumnId="7" /> </ColumnGroup> <ColumnGroup Usage="INCLUDE"> <Column Name="[event]" ColumnId="2" /> <Column Name="[endtime]" ColumnId="9" /> <Column Name="[message]" ColumnId="12" /> </ColumnGroup> </MissingIndex> </MissingIndexGroup> </MissingIndexes> ...
Impacte Base Schéma Table Colonnes d'égalité/d'inégalité Colonnes Incluse
Ou bien
Impacte Base Schéma Table Colonne Type de colonne (Incluse, d'égalité,d'inégalité)
Je me fou d'avoir une ligne par colonne, cela sera retraiter plus tard
N'étant pas à l'aise avec cette méthode, en m'appuyant sur différents articles j'ai écrit ce bout de code qui me permet de récupérer les premières informations :
Ce qui me permet d'obtenir l'impacte, la base, le schéma, et la table de manière précise ainsi qu'un nouveau xml avec la liste des colonnes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 WITH XMLNAMESPACES (DEFAULT N'http://schemas.microsoft.com/sqlserver/2004/07/showplan') SELECT Top 10 mi.value(N'(MissingIndexGroup/@Impact)[1]', N'varchar(128)') AS "impacte" ,mi.value(N'(MissingIndexGroup/MissingIndex/@Database)[1]', N'varchar(128)') AS "base" ,mi.value(N'(MissingIndexGroup/MissingIndex/@Schema)[1]', N'varchar(128)') As "schéma" ,mi.value(N'(MissingIndexGroup/MissingIndex/@Table)[1]', N'varchar(128)') As "table" ,mi.query('MissingIndexGroup/MissingIndex/ColumnGroup') As "Colonnes" FROM sys.dm_exec_cached_plans As cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) As qp CROSS APPLY qp.query_plan.nodes(N'//MissingIndexes') As MissingIndex(mi)
Mais je ne parviens pas à extraire le détail de ces colonnes ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <p1:ColumnGroup xmlns:p1="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Usage="EQUALITY"> <p1:Column Name="[executionid]" ColumnId="7" /> </p1:ColumnGroup> <p2:ColumnGroup xmlns:p2="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Usage="INCLUDE"> <p2:Column Name="[event]" ColumnId="2" /> <p2:Column Name="[endtime]" ColumnId="9" /> <p2:Column Name="[message]" ColumnId="12" /> </p2:ColumnGroup>
Quelqu'un aurait-il pitié de moi svp ?






Répondre avec citation
Partager