Voorafgaand aan de PASS Summit van deze week, en zeker tientallen en tientallen aankondigingen rond SQL Server 2016, dacht ik dat ik een lekkernij zou delen van een functie die al een tijdje verborgen is in de CTP's, maar dat Microsoft geen kans heeft gehad om te publiceren:Aanvullende onderhoudswerkzaamheden beschikbaar voor Service Broker-wachtrijen.
Remus Rusanu (@rusanu) besprak de problemen die fragmentatie op hoog volume kan veroorzaken voor wachtrijen in dit bericht:
- Omgaan met grote wachtrijen
Daar onthulde hij dat je daadwerkelijk DBCC REINDEX
. zou kunnen gebruiken tegen de interne tabel, maar u moest de interne tabelnaam bepalen en verbinding maken via de DAC. Niet bepaald handig.
Nu, bijna zes jaar later, als u denkt dat u fragmentatieproblemen ondervindt vanwege een hoge belasting, kunt u index REORGANIZE
forceren. of REBUILD
bewerkingen tegen de interne tabel van de wachtrij door rechtstreeks naar de wachtrij te verwijzen:
ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Hoe weet je hoeveel fragmentatie je in een wachtrij hebt? Welnu, wachtrijen zijn toegevoegd als een toegestaan object om door te geven aan sys.dm_db_index_physical_stats
, ook:
SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID(), OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'), -1, 0, 'SAMPLED' );
En je krijgt dezelfde output als dezelfde ondervraging van een gewone tafel.
Bovendien kunt u de wachtrij naar een andere bestandsgroep verplaatsen; deze operatie zal de interne wachtrijtabel en al zijn indexen opnieuw opbouwen in de nieuwe bestandsgroep:
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Deze nieuwe mogelijkheden moeten zorgen voor een grotere schaalbaarheid van Service Broker-oplossingen.