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.