Преди срещата PASS тази седмица и със сигурност десетки и десетки съобщения около SQL Server 2016, реших да споделя малка част от функция, която е била скрита в CTP от известно време, но че Microsoft не е имала шанс за публикуване:Допълнителни операции по поддръжката са налични за опашки на Service Broker.
Ремус Русану (@rusanu) обсъди проблемите, които фрагментацията при голям обем може да причини за опашки в тази публикация:
- Справяне с големи опашки
Там той разкри, че всъщност можете да използвате DBCC REINDEX
срещу вътрешната таблица, но трябваше да определите името на вътрешната таблица и да се свържете чрез DAC. Не е точно удобно.
Сега, почти шест години по-късно, ако смятате, че изпитвате проблеми с фрагментацията поради голямо натоварване, можете да принудите индексиране REORGANIZE
или REBUILD
операции срещу вътрешната таблица на опашката чрез препратка към опашката директно:
ALTER QUEUE dbo.myQueue REORGANIZE; -- or ALTER QUEUE dbo.myQueue REBUILD;
Как да разберете колко фрагментация имате в опашката? Е, опашките са добавени като допустим обект за преминаване към sys.dm_db_index_physical_stats
, също:
SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID(), OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'), -1, 0, 'SAMPLED' );
И получавате подобен изход като същия въпрос на обикновена таблица.
Освен това можете да преместите опашката в друга файлова група; тази операция ще възстанови вътрешната таблица на опашката и всички нейни индекси в новата файлова група:
ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];
Тези нови възможности трябва да позволят по-голяма мащабируемост на решенията на Service Broker.