Před letošním PASS Summitem a jistě desítkami a desítkami oznámení o SQL Server 2016 jsem si myslel, že se podělím o drobnost funkce, která je již nějakou dobu skryta v CTP, ale že Microsoft neměl šanci zveřejnit:Další operace údržby dostupné pro fronty Service Broker.
Remus Rusanu (@rusanu) v tomto příspěvku diskutoval o problémech, které fragmentace při vysoké hlasitosti může způsobit frontám:
- Zacházení s velkými frontami
Tam odhalil, že můžete skutečně použít DBCC REINDEX proti interní tabulce, ale museli jste určit název interní tabulky a připojit se přes DAC. Není to zrovna pohodlné.
Nyní, téměř o šest let později, pokud se domníváte, že dochází k problémům s fragmentací kvůli vysoké zátěži, můžete vynutit index REORGANIZE nebo REBUILD operace proti interní tabulce fronty přímým odkazem na frontu:
ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Jak víte, jak velkou fragmentaci máte ve frontě? No, fronty byly přidány jako povolený objekt pro předání do sys.dm_db_index_physical_stats , také:
SELECT * FROM sys.dm_db_index_physical_stats
(
DB_ID(),
OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'),
-1, 0, 'SAMPLED'
); A získáte podobný výstup jako při stejném dotazování běžné tabulky.
Kromě toho můžete frontu přesunout do jiné skupiny souborů; tato operace znovu sestaví tabulku interní fronty a všechny její indexy na nové skupině souborů:
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Tyto nové funkce by měly umožnit větší škálovatelnost řešení Service Broker.