Prima del PASS Summit di questa settimana, e sicuramente di dozzine e dozzine di annunci su SQL Server 2016, ho pensato di condividere un bocconcino di una funzionalità che è stata nascosta nei CTP per un po' di tempo, ma che Microsoft non ha avuto alcuna possibilità per pubblicizzare:ulteriori operazioni di manutenzione disponibili per le code di Service Broker.
Remus Rusanu (@rusanu) ha discusso dei problemi che la frammentazione ad alto volume può causare alle code in questo post:
- Gestire grandi code
Lì, ha rivelato che potresti effettivamente utilizzare DBCC REINDEX
contro la tabella interna, ma dovevi determinare il nome della tabella interna e connetterti tramite il DAC. Non proprio conveniente.
Ora, quasi sei anni dopo, se ritieni di avere problemi di frammentazione a causa del carico elevato, puoi forzare l'indice REORGANIZE
o REBUILD
operazioni sulla tabella interna della coda facendo riferimento direttamente alla coda:
ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Come fai a sapere quanta frammentazione hai in una coda? Bene, le code sono state aggiunte come oggetto consentito da passare a sys.dm_db_index_physical_stats
anche :
SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID(), OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'), -1, 0, 'SAMPLED' );
E ottieni un output simile alla stessa interrogazione di una tabella normale.
Inoltre, puoi spostare la coda in un altro filegroup; questa operazione ricostruirà la tabella della coda interna e tutti i suoi indici sul nuovo filegroup:
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Queste nuove funzionalità dovrebbero consentire una maggiore scalabilità delle soluzioni di Service Broker.