Aha-Effekt beim Setzen von SQL Instanz Parametern mit dbatools

In der letzten Woche habe ich bei einem Kunden mehrere SQL Server installiert und musste diese alle identisch installieren und konfigurieren. Was liegt hier näher als dies mit einem Powershell Skript zu machen, daher habe ich mir die “Mühe” gemacht und die einzelnen Schritte der SQL Server Konfiguration mit dbatools zu realisieren. Ich möchte in diesem Beitrag nicht auf alle Schritte der Konfiguration eingehen, sondern nur einen Teil davon zeigen, der mir einen gewissen “Aha-Effekt” brachte.

Im Rahmen der SQL Server Konfiguration sollten die Default-Werte von “MaxDop” und “Cost Threshold for Parallelism” angepasst werden. Das Setzen von MaxDoP mittels Powershell bzw dbatools ist relativ einfach da es hierfür einen eigenen Befehl gibt, aber auf für den “Cost Threshold for Parallelism” hat dbatools einen “Workaround”, hier gibt es leider (noch) keinen direkten Befehl für.

Set-DbaMaxDop -SqlInstance sql2008, sql2012

Diese Befehlszeile legt den Wert von “Max DOP” (Maximal Degree of Parallelism) auf den empfohlenen Wert für die SQL Server Instanzen “SQL2008” und “SQL2012” fest. Immer in Verbindung mit diesem Konfigurations-Parameter steht immer der “Cost Threshold”, welcher per Default immer noch auf 5 steht.

Alle SQL Server Instanzen auf einmal…

Um alle SQL Server Instanzen relativ schnell und einfach zu konfigurieren, habe ich mir das Kommando “Get-DbaRegisteredServer” (als Alias von Get-DbaRegServer) vorgenommen. Als Vorbereitung hierfür habe ich auf allen Servern im SQL Server Management Studio die notwendigen Server (hier 2 Server mit je 3 Instanzen) als “Registered Server” angelegt und konnte dann mit Powershell aka dbatools darauf zugreifen.

Laut dbatools-Dokumentation, ruft dieser Befehl eine Liste der SQL Server-Objekte ab, die in lokal registrierten Gruppen sowohl im Azure Data Studio als auch auf dem zentralen Verwaltungsserver gespeichert sind.

geborgt bei dbatools.io - Vielen Dank an Chrissy

Mit diesem Befehl und der Möglichkeit die Objekte aus dem Ergebnis-Objekt als Pipeline weiterzugeben, kann man schöne Dinge machen, wie eben den Wert für “MaxDoP” auf allen Server bzw Instanzen in einer Kommandozeile zu konfigurieren…

Get-DbaRegisteredServer | Set-DbaMaxDop

Nun aber zu meinem Aha-Effekt mit einer weiteren Kommandozeile 😉

Cost Threshold For Parallelism

Wie oben schon angedeutet, geht die Anpassung nur über eine Work-around mit dbatools und nicht mit einem dbatools-Kommando, hierzu verwende ich jetzt “Set-DbaSpConfigure”. Natürlich könnte ich auch den “MaxDoP” mit diesem Kommando konfigurieren, dann muss ich aber selber für die vorherige Ermittlung und Berechnung des jeweiligen Wertes für MaxDoP sorgen, also die vorhandenen Kerne ermitteln, diese dann gegen die Best-Practise matchen und den Wert über eine Variable an den Set-Befehl weitergeben. Ich setze diesen Werte in 98% aller Instanzen auf 40 (ausser der Kunde oder die Applikation möchten etwas anderes), daher benötige ich hier keine Logik.

Meiner obigen Logik bzw der Dokumentation folgend habe ich es mit folgender Kommandozeile versucht:

Get-DbaRegisteredServer | Set-DbaSpConfigure -Name 'CostThresholdForParallelism' -Value 40

Dies brachte mich aber zu einem (auf den ersten Blick) nicht nachvollziehbaren Fehler (auch mein Versuch den Wert als String zu übergeben war nicht erfolgreich):

WARNING: [13:02:23][Set-DbaSpConfigure] Value out of range for Server1\Instanz1 ( <-> )
WARNING: [13:02:23][Set-DbaSpConfigure] Value out of range for Server2\Instanz1 ( <-> )
WARNING: [13:02:23][Set-DbaSpConfigure] Value out of range for Server1\Instanz2 ( <-> )
WARNING: [13:02:23][Set-DbaSpConfigure] Value out of range for Server2\Instanz2 ( <-> )
WARNING: [13:02:23][Set-DbaSpConfigure] Value out of range for Server1\Instanz3 ( <-> )
WARNING: [13:02:23][Set-DbaSpConfigure] Value out of range for Server2\Instanz3 ( <-> )

Ich habe den Grund hierfür leider noch nicht wirklich gefunden, vielleicht kann mir jemand das Phänomen näher bringen… vielleicht ist dies ja aber auch so gewollt oder ggfs sogar ein “Bug”…

Aber ich war vorher schon so erfolgreich mit dem Pipelining, dass ich das auch hier angewendet habe… also Ermitteln wir erst alle SQL-Instanzen, ermitteln dann auf diesen Instanzen den aktuellen Parameter für den “Cost Threshold For Parallelism” und setzen ihn dann auf den neuen Wert 40.

Get-DbaRegisteredServer | Get-DbaSpConfigure -Name 'CostThresholdForParallelism' | Set-DbaSpConfigure -Value 40
ComputerName  : Server1
InstanceName  : Instanz1
SqlInstance   : Server1\Instanz1
ConfigName    : CostThresholdForParallelism
PreviousValue : 5
NewValue      : 40

ComputerName  : Server2
InstanceName  : Instanz1
SqlInstance   : Server2\Instanz1
ConfigName    : CostThresholdForParallelism
PreviousValue : 5
NewValue      : 40

ComputerName  : Server1
InstanceName  : Instanz2
SqlInstance   : Server1\Instanz2
ConfigName    : CostThresholdForParallelism
PreviousValue : 5
NewValue      : 40

ComputerName  : Server2
InstanceName  : Instanz2
SqlInstance   : Server2\Instanz2
ConfigName    : CostThresholdForParallelism
PreviousValue : 5
NewValue      : 40

ComputerName  : Server1
InstanceName  : Instanz3
SqlInstance   : Server1\Instanz3
ConfigName    : CostThresholdForParallelism
PreviousValue : 5
NewValue      : 40

ComputerName  : Server2
InstanceName  : Instanz3
SqlInstance   : Server2\Instanz3
ConfigName    : CostThresholdForParallelism
PreviousValue : 5
NewValue      : 40

Und schon habe ich wieder etwas großartiges für mich selber herausgefunden und bin um eine Erfahrung im Umgang mit dbatools reicher!

Ich liebe dieses Powershell-Modul, mit dem ich zahlreiche (nahezu alles!) Dinge am und um den SQL Server herum anpassen, optimieren und automatisieren kann. Ich verwende es sehr gerne (wie man auch meinen anderen Blog-Posts sehen kann) und mittlerweile bei allen meinen Kunden. VIELEN DANK an @Chrissy und die vielen anderen Contributors, die sich die Mühe rund um dieses Community-Tool zu machen!

Beitragsbild – von Ben White auf Unsplash

Wenn sich Wege trennen, entstehen neue Möglichkeiten

Ich nehme zum 1. Mai Abschied von Atos und wechsle zur Kramer und Crew und möchte euch hiermit einen Rückblick über meinen Weg mit Atos (Atos Origin) geben. Was ich erlebt, gelernt und miterlebt habe, es waren nicht nur unbedingt angenehme Jahre. Aber alles der Reihe nach…

Meine ersten Jahre bei Atos als Junior DBA

Alles begann im Mai 2007, als ich nach einer kurzen Zeit in einer Auffanggesellschaft, meine Stelle als Junior Datenbank Administrator in Hamburg antreten durfte. Ich kannte bis dahin eigentlich nur den SQL Server aus meiner vorherigen Anstellung, sollte nun aber auch zum Beispiel IBM DB2 betreuen, wo in der Anfangszeit mein Schwerpunkt liegt sollte. Im Laufe der ersten Jahre kam dann auch noch MySQL und eine ganze Menge Enterprise Application Integration (EAI) mit TIBCO hinzu, so dass der SQL Server erst einmal in den Hintergrund gerückt wurde.

Nach einigen Projekten, Neu-Ausrichtungen und personellen Veränderungen hatte ich wieder die Verantwortung für zahlreiche Kunden-SQL-Server. So konnte ich die unterschiedlichen Bereiche und Anwendungsfälle in den unterschiedlichsten Ausprägungen mitgestalten und auch letztendlich betreuen. Aber auch hier gab es dann ein “Kommen und Gehen”, zahlreiche Kollegen nahmen im Laufe der Jahre Abschied, einige Studenten nahmen Platz und bereicherten den Alltag und brachten neue Sichtweisen, Kunden kamen und verschwanden, wuchsen oder fusionierten, so änderten sich immer wieder die Anforderungen und Aufgabenstellungen.

meine Entwicklung und Wachstum über die Jahre

Wie das manchmal in größeren Firmen der Fall ist, war es bei Atos früher etwas schwierig immer die Schulung zu bekommen, die man gerne gehabt hätte… daher habe ich für mich entschieden, dass ich mich selber um einen gewissen Teil der Weiterbildung kümmere und habe mich ~2012 der PASS Deutschland angeschlossen und mich online um entsprechende Schulungen, Beiträge, Foren und so weiter gekümmert. Ich habe so einen für mich neuen Weg und eine komplett neue Welt (die Community) entdeckt.

Die SQL Server Community hat mir dann in der Regionalgruppe Hamburg andere Seiten und Features am SQL Server aufgezeigt, mir das Wissen vermittelt, was mich auch in meiner Arbeit weiter gebracht hat. Als ich dann erstmalig 2013 auf das PASS Camp nach Seeheim (FFM) konnte, war das wie eine andere Welt, die ich so bisher nicht gekannt habe. Der Zusammenhalt, das Expertenwissen, die Menge der “Gleichgesinnten” war einfach überwältigend… auch wenn ich das erst später so realisiert habe. Auch wenn ich nach dem PASS-Camp längere Zeit nicht wirklich in der Community aktiv war (manche Dinge müssen eben erst etwas reifen 😉 ), brachte mich mein eingeschlagener Weg wieder mit der Community zusammen und brachte mich erneut weiter nach vorne.

Ohne meine großartigen Kollegen, den offenen Umgang miteinander, die gegenseitige Unterstützung wäre ich nicht an meinem jetzigen Punkt bzw wäre es wahrscheinlich gar nicht zu diesem Wechsel gekommen. Meiner Einschätzung nach geht es nicht ohne den Support aus einem Team und einen “Mentor”. In diesem Sinne möchte ich von Herzen bei all meinen Hamburger Kollegen bedanken, dass sie sich immer meine Stories angehört und meine Arbeit übernommen haben, wenn ich für die Community unterwegs war. Und vor allem Thorsten Moeller, dass er meine Pläne und Aktivitäten immer im Rahmen seiner Möglichkeiten unterstützt und gefördert hat! Daher fällt mir mein Abschied in gewisser Weise auch schwer…

Community-Engagement – neue Ziele, neue Wege

Als ich Ende 2016 das Azure Meetup in Hamburg “gründete”, war dies erst einmal für mich ein großer Schritt in eine neue Welt bzw in neue Gefilde. Ich war bisher immer nur Teilnehmer, also Nutzer vieler anderer Kümmerer (#SharingIsCaring). Jetzt wollte ich selber die Fäden in die Hand nehmen und meinen Teil dazu beitragen, dass andere meinen Weg gehen können, sich eigenständig weiterbilden, mit anderen Gleichgesinnten unterhalten, ein Netzwerk auf-/ausbauen, einfach mit den Aufgaben wachsen!

Auch nach mehr als zwei Jahren leite ich nun dieses Meetup und es macht immer noch wahnsinnig viel Spaß, sich um die unterschiedliche Themenbereiche in der Microsoft Cloud zu kümmern und der Community hier immer wieder spannende Sprecher und Vorträge zu organisieren. Durch diesen Einsatz in der Microsoft Community wuchs auch mein nationales bzw europäisches Engagement, siehe z.B. meine Vorträge auf dem SQLSaturday in Wien und Linz. Oder letztendlich die Anerkennung meiner Aktivitäten durch Microsoft mit der Ernennung zum Microsoft Most Valuable Professional (MVP). Es ist eine Ehre Teil dieser weltweiten Community zu sein (was hoffentlich auch noch länger so bleibt)!

Wie oben schon geschrieben, bin ich Atos hier sehr dankbar, denn hätte Atos (Origin) damals nicht den Stein ins Rollen gebracht, hätte ich mich nicht auf diese Weise entwickelt und wäre so gewachsen. Es macht einfach unheimlich Spaß und hat im Endeffekt auch dazu geführt, dass ich nun mein Aufgabengebiet zu einem anderen Arbeitgeber verlege und Abschied nehme von Atos.

mehr Data, mehr Cloud, mehr Community – neue Herausforderungen

Ich wechsel also morgen zu einem (im Vergleich zu Atos) kleinen Systemhaus namens Kramer und Crew mit Sitz in Köln. Hier werde ich um die komplette Microsoft Data Platform kümmern dürfen/können und werde gemeinsam mit meinen Kollegen und Kunden an spannenden Cloud-Projekten arbeiten! Auch wenn diese Entscheidung dazu führt, im Vergleich zu den letzten 12 Jahren die ich bei Atos war, dass ich mehr auf der Straße unterwegs bin (#ConsultantLife), so wird mich dieser Weg auch wieder persönlich weiter bringen… menschlich sowie fachlich. Über Details in meinem neuen Umfeld kann ich derzeit noch nichts mitteilen, hierzu werde ich sicherlich zu gegebener Zeit noch einmal einen “Fazit”-Blogbeitrag schreiben. Die letzten Gespräche, Vorstellungen und Pläne/Ideen sind sehr vielversprechend und herausfordernd, ich weiß auf jeden Fall, dass ich viel lernen werde, viel umsetzen kann und das alles mit viel Spaß!

Das klingt erst einmal nach viel viel Arbeit, aber keine Sorge ich bleibe der Community erhalten (sowohl der PASS aka Data-Platform als auch Azure). Im Mai werde ich auf jeden Fall mit einem Vortrag Teil der “Technology Conference Hamburg” sein, ebenso beim SQLSaturday im Rheinland. Und natürlich gibt es weiterhin das Azure Meetup in Hamburg… also muss ich hiervon keinen Abschied nehmen 😉

Wie sagt man so schön, “man sieht sich immer zweimal”… in diesem Sinne, wünsche ich allen eine erfolgreiche Zukunft und vielen Dank für die angenehme und konstruktive Zusammenarbeit, wir sehen uns garantiert irgendwann einmal wieder… entweder beruflich, auf einer Community Veranstaltung oder im privaten Garten…

Das Azure Meetup Hamburg im Mai 2019

Auch im Mai 2019 trifft sich das Azure Meetup Hamburg wieder für einen interessanten und spannenden Abend mit der Community. Diesmal kommt der Vortrag aus der Hamburger Community selber… Benjamin Konrad wird uns über seine praktischen Erfahrungen beim Erstellen von Power BI Architekturen und dem Verknüpfen von Datenquellen, sowie dem Erstellen von Berichten näher bringen.

Anmelden könnt ihr euch – wie gewohnt – natürlich kostenfrei über die Meetup-Seite des Azure Meetups in Hamburg
Hier geht es direkt zu unserer Mai Veranstaltung

Vielen Dank an Benjamin Konrad für seine Bereitschaft selber etwas vorzutragen, eben “aus der Community für die Community”!

Wie mit Azure starten – interessante Einstiegsmöglichkeiten

Heute kam hier die Frage von einem Kollegen auf, nach wie kann ich mich wo informieren, womit sollte ich anfangen, wenn ich mich zukünftig mit Azure auseinandersetzen möchte/soll/muss. Da ich ihm dazu einen nicht allzu kurzen Text geschrieben habe, dachte ich mir, dass das für meine Blog-Leser auch interessant sein könnte und möchte den Text hier in einer etwas ausführlicheren Form veröffentlichen. 😉

Erstmal muss man sich über die Fülle an Möglichkeiten Gedanken machen, was es da nicht alles für verschiedene Produkte, Services, Plattformen, Hersteller, Anbieter und vielem mehr gibt… Also was möchte/soll man machen… meist kommt man ja mit einer Public Cloud aus geschäftlichen Gründen in Berührung, wie bei meinem Kollegen. Beispielsweise der Web-Entwickler, der wird sich eher damit beschäftigen mit welchen Services in welcher Ausprägung und vor allem wie seine Webseite/-Applikation dem Kunden/Anwender zur Verfügung stellen kann. Der Business-Intelligence (BI) Berater wird sich vielleicht eher mit den Möglichkeiten einer Dynamics-Umgebung und wie er diese Daten worüber wohin wie am Besten dem Management präsentieren kann.

Nehmen wir meinen Kollegen, der bisher sich mit dem SQL Server in allen Ausprägungen und Fazetten on-premise beschäftigt hat… der fragte mich:

Hallo Björn,
[...]
wollte bei Dir mal nachfragen
was für Literatur / Links Du mir
zum Thema MSSQL und Azure empfehlen kannst
[...]

Azure ist einfach sehr vielfältig 😉

In diesem Fall kann man natürlich erst einmal eingrenzen, dass er sich mit Datenbanken beschäftigen möchte und zwar in der Hauptsache mit der Azure SQL Database und vielleicht noch dem Azure SQL Datawarehouse, sowie allen notwendigen Services wie zum Beispiel Netzwerke. Hier muss jeder für sich entscheiden, welcher Lerntyp er ist… erst lesen/anschauen und dann machen oder erst einmal durch ausprobieren wie weit man ohne Hilfe kommt, um dann nachzulesen. Ich bin eher der Typ ausprobieren und dann lesen, wobei bei neuen Haushaltsgeräten… 😉
Ich schätze meinen Kollegen eher als den “Ausprobierer” ein…

Idealerweise fängt man klein an bzw dort an, was man unter Umständen schon von seiner bisherigen Tätigkeit kennt. Also hier eine einfache virtuelle Maschine mit Windows Server und einem SQL Server… diese kann man erst einmal über ein Tutorial aus der Microsoft-Dokumentation erstellen, entweder über das Azure-Portal oder mittels Powershell. Hierzu stellt Microsoft bzw die Community entsprechende Dokumentationen (Schritt-für-Schritt-Anweisungen) zur Verfügung, anhand derer man sehr einfach die ersten Erfolge sehen kann.

Beispielsweise => Bereitstellen eines virtuellen Windows-Computers mit SQL Server im Azure-Portal

Praktischer Start mit Azure

Wenn man aber nun – wie oben vorgeschlagen – mit der praktischen Arbeit beginnen möchte, wird man schnell feststellen, dass man einen Account für Azure benötigt… dies geht für die ersten privaten Gehversuche am einfachsten mit einem kostenfreien Azure-Account. Diesen kann man sich ganz schnell selber erstellen und erhält darüber hinaus auch noch viele kostengünstige Angebote für Azure Services und teilweise sogar bestimmte Services dauerhaft kostenfrei. So kann man die ersten Übungen bzw das gerade gelernte selber – ohne großes Risiko – ausprobieren und antesten.

So stellt Microsoft zum Beispiel – über diesen “Free-Account” – jedem Nutzer eine Azure SQL Database, virtuelle Windows und Linux-Maschinen oder auch eine Azure Cosmos DB für die ersten 12 Monate kostenfrei zur Verfügung! Weitere Services wie Azure Data Factory, der Azure Kubernetes Service oder Cognitive Services sind in begrenztem Umfang dauerhaft kostenfrei verfügbar. Reinschauen lohnt sich auf jeden Fall !!!

Vertiefung des Azure KnowHows

Wenn man dann seine erste Maschine deployed hat und auch schon ein wenig in der Dokumentation gestöbert hat, so kann man sich später über das vielfältige Service-Angebot von Microsoft informieren, in dem man sich die kostenfreie Schulungen auf Microsoft Learn anschaut! Hier kann man sich die entsprechenden Produkte bzw Lernziele aussuchen und einfach loslegen…

Videos, Dokumentationen, Schritt-für-Schritt-Anleitungen und Demos / Labs bringen einem die Produkte sowie Services theoretisch näher. So erhält man einen ersten Einblick in die Vorgehensweise und Möglichkeiten der Microsoft Public Cloud Azure. Im Endeffekt hilft aber nichts anderes als wirklich ausprobieren und zu testen, hierzu müsste man sich dann entweder selber oder mit dem Kunden entsprechende Test-Szenarien überlegen und testen, testen, testen…

Auch in der Public Cloud bleiben die alten “Weisheiten” meist gültig, auch wenn man gewissen alte Denkstrukturen überwinden muss und auf den ersten Blick vieles unübersichtlich und teuer wirkt! Hier heißt es dann weiter bzw um die Ecke denken, um dem Kunden entsprechende Angebote und Solutions präsentieren zu können. Aber für einen ersten Einstieg sind die oben genannten Plattformen auf jeden Fall sehr hilfreich!

Viel Spaß beim Lernen und Ausprobieren!

Screenshots für Dokumentation und Blogbeiträge

Gerade für uns technischen Blog-Beitrag-Schreiber ist es aus mehreren Gründen relevant gute Screenshots in unsere Beiträge einzubinden. Wie aber kommen wir zu qualitativ hochwertigen Screenshots für unsere Beiträge oder auch für Vorträge jeglicher Art?
Es gibt sicherlich eine Vielzahl von Tools, die man für solche Zwecke nutzen kann… ich möchte euch heute mein Tool/ meinen Favoriten zeigen.

Techsmith Snagit

Es gab in den letzten Jahren viele Tools, die ich genutzt habe um Screenshots für meine Dokumentation, Vorträge oder Blogbeiträge zu erstellen… da waren auch echt gute (freie) Tools (zum Beispiel Greenshot) drunter, aber wenn man dann etwas mehr damit machen wollte, als schnell und einfach einen bloßen Copyright-Text hinzufügen, dann wurde es schwer und ich musste oftmals weitere Tools wie zum Beispiel Gimp nutzen. Aber es hat als MVP (Microsoft Most Valuable Professional) den einen oder anderen Vorteil, denn wir erhalten von einigen Herstellern Software zum Testen und oft auch für ein Jahr zur Nutzung for free. So auch Snagit von Techsmith, was in der 2019 Version schon echt gut ist, denn man kann nicht nur bloße Screenshots damit machen, sondern auch Videos aufzeichnen und diese editieren!

bestimmte Bereiche als Screenshots erfassen

Snagit 2019 erkennt eigenständig erfassbare Bildschirmbereiche, wie Kopfzeilen, Menübänder oder das eigentliche Fenster… man kann natürlich auch selber bestimmte Bereiche des sichtbaren Bereiches auswählen. Hierbei bietet Snagit auch die Möglichkeit des “Scrolling Screenshot”, bei dem auch größere Bereiche erfasst werden können. Dies ist zum Beispiel sehr gut nutzbar, wenn man eine ganze Webseite – bei der man scrollen müsste – erfassen und als Screenshots abspeichern.

Beispiele, Anleitungen und Videos dazu man in der Dokumentation von Techsmith

auch Animationen oder kleine Videos möglich

Mit Snagit 2019 kann man nicht nur einfache Screenshots erstellen, sondern auch Videosequenzen aufzeichnen, zum Beispiel für Klickfolgen mit Eingabe der entsprechende Werte in die zu benutzenden Felder. So kann man dem Betrachter schnell und einfach eine Handlungsanweisung erstellen und diese im Snagit-Editor bearbeiten. Auch wenn man die Bearbeitung im Editor nicht mit einem richtigen Schnittprogramm vergleichen kann, so lassen sich doch erstaunliche Ergebnisse erzielen.

Das Entfernen/Rausschneiden von ungewünschten Anfängen oder Enden, zu lange Ladevorgänge können ebenso für die Darstellung entfernt werden. Diese Funktion ist sehr nützlich für Vorträge, Demonstrationen oder zur Veranschaulichung in Schulungen, um nicht zuviel (unnötige) Zeit zu verlieren.

Fazit – großartiges Tool nicht nur Screenshots

Ich scheine nicht alleine zu sein mit meiner Meinung, denn knapp 83% 5 Sterne aus allen Bewertungen im Techsmith-Store sind schon ein deutliches Indiz für eine sehr gut nutzbare Software. Ja, dieses Tool um Screenshots zu erstellen ist nicht kostenfrei, sondern kostet (April 2019) ~52 Euro (je nach Wechselkurs), dieses Geld ist aber sehr gut investiert, denn man erhält ein wirklich professionelles Tool für zwei Arbeitsplätze!