sql >> Database teknologi >  >> RDS >> Sqlserver

Service Broker-forbedringer i SQL Server 2016

Forud for denne uges PASS Summit, og sikkert snesevis og snesevis af meddelelser omkring SQL Server 2016, tænkte jeg, at jeg ville dele en godbid af en funktion, der har været skjult i CTP'erne i nogen tid nu, men som Microsoft ikke har haft en chance at offentliggøre:Yderligere vedligeholdelsesoperationer tilgængelige for Service Broker-køer.

Remus Rusanu (@rusanu) diskuterede de problemer, som fragmentering ved høj lydstyrke kan forårsage for køer i dette indlæg:

  • Håndtering af store køer

Der afslørede han, at du faktisk kunne bruge DBCC REINDEX mod den interne tabel, men du skulle bestemme det interne tabelnavn og oprette forbindelse via DAC'en. Ikke ligefrem praktisk.

Nu, næsten seks år senere, kan du tvinge indekset REORGANIZE, hvis du mener, at du oplever fragmenteringsproblemer på grund af høj belastning. eller REBUILD handlinger mod køens interne tabel ved at referere køen direkte:

ALTER QUEUE dbo.myQueue REORGANIZE;
-- or
ALTER QUEUE dbo.myQueue REBUILD;

Hvordan ved du, hvor meget fragmentering du har i en kø? Nå, køer er blevet tilføjet som et tilladt objekt at overføre til sys.dm_db_index_physical_stats også:

SELECT * FROM sys.dm_db_index_physical_stats
  (
    DB_ID(), 
    OBJECT_ID(N'dbo.QueryNotificationErrorsQueue'), 
    -1, 0, 'SAMPLED'
  );

Og du får lignende output til den samme forespørgsel af et almindeligt bord.

Derudover kan du flytte køen til en anden filgruppe. denne handling vil genopbygge den interne køtabel og alle dens indekser på den nye filgruppe:

ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];

Disse nye muligheder skulle give mulighed for større skalerbarhed af Service Broker-løsninger.


  1. Grupperet sammenkædning:Bestilling og fjernelse af dubletter

  2. Flet flere rækker til en enkelt række

  3. kan ikke modtage ud parameter fra oracle procedure udført af mybatis

  4. Kan jeg have en fremmednøgle, der refererer til en kolonne i en visning i SQL Server?