Thomas Ingenhorst

Ein weiteres neues Feature des SQL Servers ist der Balanced Data Distributor. Diesen gab es bereits im SQL Server 2012 und 2014 als zusätzliche Komponente, im SQL Server 2016 wurde er nun dem Standard hinzugefügt. Deshalb werde ich in diesem Blogbeitrag erklären, was der Balanced Data Distributor (BDD) kann und an einem Beispiel demonstrieren.

Der BDD verbessert die Performance in SSIS-Paketen, indem die Komponente den eingehenden Datenpuffer aus einer Quelle gleichmäßig in mehrere Datenströme aufteilt und so die Fähigkeit von Mehrkernprozessoren optimal ausnutzt. In meinem Beispiel habe ich Daten aus einem Flatfile in eine SQL Server Tabelle geschrieben, was ein typische Szenario für SSIS-Pakete darstellt. In meinem ersten Paket habe ich ca. 11 Mio. Zeilen ohne BDD in eine Tabelle geschrieben. Hier hat mein SSIS-Paket 4:23 Minuten benötigt. Sämtliche Einstellungen wie beispielsweise „Rows per batch“ etc. habe ich im Default gelassen.

ohne BDD

Datenbeladung ohne BDD

Anschließend habe ich das gleiche Flatfile ausgelesen und den Datenstrom in drei gleichgroße Datenflüsse aufgeteilt und dies in eine weitere SQL Server Tabelle geschrieben. Auch hier habe ich keine weiteren Änderungen an den Einstellungen vorgenommen. Mit dem Balanced Data Distributor konnte ich die Paketlaufzeit auf ca. 3 Minuten verbessern. Eine mehrfache Ausführung der Pakete sorgte für einen Unterschied von ca. 4 Minuten zu 3 Minuten. Die Tests haben gezeigt, dass meine CPU ohne BDD eine konstante Auslastung von 55% hatte, mit dem Balanced Data Distributor stieg die Auslastung auf 90% an. Dies zeigt sehr deutlich, dass hier die Verarbeitungslast deutlich besser über sämtliche Kerne verteilt wird. Hier muss man jedoch erwähnen, dass dieser Test in einer virtuellen Maschine durchgeführt wurde und die VM auf 4 logische Prozessoren beschränkt war. Bei einem Server mit mehr Kernen und besserer Leistung lässt sich hier eventuell noch mehr Performance gewinnen.

mit BDD

Datenbeladung mit BDD

 

Die beiden Tests haben gezeigt, dass der Balanced Data Distributor eine wichtige Rolle für die Performance in SSIS-Paketen sein kann. Es gibt jedoch 4 wichtige Voraussetzungen, die man bei der Verwendung von BDD´s beachten sollte:

  1. Die Verwendung eines Balanced Data Distributors macht nur dann Sinn, wenn die Datenquelle des Pakets eine ausreichende Lesegeschwindigkeit zur Verfügung stellt. Ist dies nicht der Fall, so wird sich die Paketlaufzeit durch die Unterteilung in mehrere Datenflüsse nicht verbessern.
  2. Das Ziel muss eine ausreichende Parallelität aufweisen, damit schnell in die Tabelle geschrieben werden kann.
  3. Die Datenmenge in der Quelle muss eine ausreichende Größe haben, damit bei der Beladung mehrere Puffer geöffnet werden. Bei kleinen Datenmengen gibt es nur einen Puffer und hier macht die Verwendung eines Balanced Data Distributors ebenfalls keinen Sinn.
  4. Wenn die Datenreihenfolge in dem Ziel von Bedeutung sind, dann sollte ebenfalls kein BDD eingesetzt werden. Der Balanced Data Distributor verwendet das Roundrobin-Prinzip und kann somit keine konstante Datenreihenfolge gewährleisten.