Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Miglioramenti di Service Broker in SQL Server 2016

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.