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.