Avant le sommet PASS de cette semaine, et sûrement des dizaines et des dizaines d'annonces autour de SQL Server 2016, j'ai pensé partager une friandise d'une fonctionnalité cachée dans les CTP depuis un certain temps maintenant, mais que Microsoft n'a pas eu une chance à publier :opérations de maintenance supplémentaires disponibles pour les files d'attente de Service Broker.
Remus Rusanu (@rusanu) a évoqué les problèmes que la fragmentation à volume élevé peut entraîner pour les files d'attente dans cet article :
- Gérer les files d'attente volumineuses
Là, il a révélé que vous pouviez réellement utiliser DBCC REINDEX
par rapport à la table interne, mais vous deviez déterminer le nom de la table interne et vous connecter via le DAC. Pas vraiment pratique.
Aujourd'hui, près de six ans plus tard, si vous pensez rencontrer des problèmes de fragmentation en raison d'une charge élevée, vous pouvez forcer l'index REORGANIZE
ou REBUILD
opérations sur la table interne de la file d'attente en référençant directement la file d'attente :
ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Comment savez-vous combien de fragmentation vous avez dans une file d'attente ? Eh bien, les files d'attente ont été ajoutées en tant qu'objet autorisé à transmettre à sys.dm_db_index_physical_stats
, aussi :
SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID(), OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'), -1, 0, 'SAMPLED' );
Et vous obtenez une sortie similaire à la même interrogation d'une table normale.
De plus, vous pouvez déplacer la file d'attente vers un autre groupe de fichiers ; cette opération reconstruira la table de file d'attente interne et tous ses index sur le nouveau groupe de fichiers :
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Ces nouvelles fonctionnalités devraient permettre une plus grande évolutivité des solutions Service Broker.