Antes do PASS Summit desta semana, e certamente dezenas e dezenas de anúncios em torno do SQL Server 2016, pensei em compartilhar um pedacinho de um recurso que está oculto nos CTPs há algum tempo, mas que a Microsoft não teve a chance para divulgar:Operações de manutenção adicionais disponíveis para filas do Service Broker.
Remus Rusanu (@rusanu) discutiu os problemas que a fragmentação em alto volume pode causar nas filas neste post:
- Lidando com grandes filas
Lá, ele revelou que você poderia realmente usar
DBCC REINDEX
contra a tabela interna, mas você tinha que determinar o nome da tabela interna e conectar-se através do DAC. Não exatamente conveniente. Agora, quase seis anos depois, se você acredita que está enfrentando problemas de fragmentação devido à alta carga, pode forçar o índice
REORGANIZE
ou REBUILD
operações na tabela interna da fila referenciando a fila diretamente:ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Como você sabe quanta fragmentação você tem em uma fila? Bem, as filas foram adicionadas como um objeto permitido para passar para
sys.dm_db_index_physical_stats
, também:SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID(), OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'), -1, 0, 'SAMPLED' );
E você obtém uma saída semelhante à mesma interrogação de uma tabela regular.
Além disso, você pode mover a fila para outro grupo de arquivos. esta operação reconstruirá a tabela de fila interna e todos os seus índices no novo grupo de arquivos:
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Esses novos recursos devem permitir maior escalabilidade das soluções do Service Broker.