Bonjour,
Je vous écris ce message car j'ai des problèmes de performance sur une requête.
Contexte : Grosse DB de plusieurs TO
Shelduled Jobs : Rebuild des index si une table est trop fragmentée (plus de 12%)
SELECT utilisé en entrée :
Seulement voilà, en général ce select met une 20aine de secondes à donner un résultat mais parfois il faut plusieurs heures!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT object_id, index_id, partition_number, avg_fragmentation_in_percent INTO #work_to_do FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') WHERE avg_fragmentation_in_percent > 12.0 AND index_id > 0;
Je ne comprends pas ce qui pose ces problèmes de performances... Quand j'exécute le SELECT il peut ne pas me donner de résultat au point de devoir killer le select, si je relance quelques minutes après il me sort le résultat en quelques secondes. Tout ça en désactivant les autres requêtes susceptible de tourner, rien d'autre ne tourne sur le server.
Le soucis lors de l'exécution normale de cette tâche Schedulée est que si elle prend trop de temps, elle bloque alors un/des autre(s) processus Schedulés quelques heures après... Au point que les processus se bloquent entre-eux et un kill manuel est obligatoire...
J'ai donc plusieurs questions :
1. Quelle pourrait-être la cause de cette différence de temps entre 2 exécutions?
2. Est-ce qu'on peut améliorer la performance de cette query? (En tout cas s'assurer qu'elle prenne toujours autant de temps)
3. Sinon, existe-t-il une option à ajouter à la query pour ne pas qu'elle bloque l'exécution des suivantes?
4. D'autres idées? ^^
Merci.Microsoft SQLServer 2012
Microsoft SQL Server Management Studio 11.0.3128.0
Microsoft Analysis Services Client Tools 11.0.3128.0
Microsoft Data Access Components (MDAC) 6.2.9200.16384
Microsoft MSXML 3.0 4.0 6.0
Microsoft Internet Explorer 9.10.9200.16635
Microsoft .NET Framework 4.0.30319.18051
Operating System 6.2.9200
Cordialement.
Partager