Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Service Broker-Verbesserungen in SQL Server 2016

Vor dem dieswöchigen PASS Summit und sicherlich Dutzenden und Aberdutzenden von Ankündigungen rund um SQL Server 2016 dachte ich, ich würde einen Leckerbissen einer Funktion teilen, die seit einiger Zeit in den CTPs versteckt ist, aber Microsoft hatte keine Chance Zur Veröffentlichung:Zusätzliche Wartungsvorgänge für Service Broker-Warteschlangen verfügbar.

Remus Rusanu (@rusanu) erörterte in diesem Beitrag die Probleme, die eine Fragmentierung bei hoher Lautstärke für Warteschlangen verursachen kann:

  • Umgang mit großen Warteschlangen

Dort enthüllte er, dass Sie tatsächlich DBCC REINDEX verwenden könnten gegen die interne Tabelle, aber Sie mussten den internen Tabellennamen ermitteln und über den DAC verbinden. Nicht gerade praktisch.

Jetzt, fast sechs Jahre später, können Sie den Index REORGANIZE erzwingen, wenn Sie glauben, dass Sie aufgrund der hohen Auslastung Fragmentierungsprobleme haben oder REBUILD Operationen gegen die interne Tabelle der Warteschlange durch direkten Verweis auf die Warteschlange:

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

Woher wissen Sie, wie viel Fragmentierung Sie in einer Warteschlange haben? Nun, Warteschlangen wurden als zulässiges Objekt hinzugefügt, das an sys.dm_db_index_physical_stats übergeben werden kann , auch:

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

Und Sie erhalten eine ähnliche Ausgabe wie bei der gleichen Abfrage einer regulären Tabelle.

Außerdem können Sie die Warteschlange in eine andere Dateigruppe verschieben. Dieser Vorgang erstellt die interne Warteschlangentabelle und alle ihre Indizes in der neuen Dateigruppe neu:

ALTER QUEUE dbo.myQueue MOVE TO [MY_FILEGROUP];

Diese neuen Funktionen sollten eine größere Skalierbarkeit von Service Broker-Lösungen ermöglichen.