Przed zbliżającym się w tym tygodniu PASS Summit, a na pewno dziesiątkami ogłoszeń dotyczących SQL Server 2016, pomyślałem, że podzielę się ciekawostką o funkcji, która od jakiegoś czasu była ukryta w CTP, ale Microsoft nie miał szansy do opublikowania:Dodatkowe operacje konserwacyjne dostępne dla kolejek Service Broker.
Remus Rusanu (@rusanu) omówił w tym poście problemy, jakie może powodować fragmentacja przy dużej głośności w kolejkach:
- Radzenie sobie z dużymi kolejkami
Tam ujawnił, że faktycznie można użyć DBCC REINDEX w stosunku do tabeli wewnętrznej, ale trzeba było określić nazwę tabeli wewnętrznej i połączyć się przez DAC. Niezupełnie wygodne.
Teraz, prawie sześć lat później, jeśli uważasz, że masz problemy z fragmentacją z powodu dużego obciążenia, możesz wymusić indeks REORGANIZE lub REBUILD operacje na wewnętrznej tabeli kolejki, odwołując się bezpośrednio do kolejki:
ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Skąd wiesz, ile masz fragmentacji w kolejce? Cóż, dodano kolejki jako dozwolony obiekt do przekazania do sys.dm_db_index_physical_stats też:
SELECT * FROM sys.dm_db_index_physical_stats
(
DB_ID(),
OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'),
-1, 0, 'SAMPLED'
); I otrzymujesz podobne dane wyjściowe do tego samego zapytania dla zwykłej tabeli.
Dodatkowo możesz przenieść kolejkę do innej grupy plików; ta operacja odbuduje wewnętrzną tabelę kolejek i wszystkie jej indeksy na nowej grupie plików:
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Te nowe możliwości powinny umożliwić większą skalowalność rozwiązań Service Broker.