Installing old SQL Server Versions – T-SQL Tuesday #83

T-SQL Tuesday #82 – To the cloud… And beyond!!!

T-SQL Tuesday is a recurring blog party, that is started by Adam Machanic (b | t). Each month a blog will host the party, and everyone that want’s to can write a blog about a specific subject.

This month Andy Mallon is our TSQL2sDay host and the subject is “We’re still dealing with the same problems”.

Yes, of cause I know such problems too! Let me tell you my story about customers, 3rd party companies and their solutions.

Their solution vs. my recommendation vs the real world

Due to the contracts between “us” and the customer we’re responsible for their SQL Servers… very old ones, middle-aged ones and newer ones. So if there is any problem with any database, user or what else they’ll contact “me”. So I’ve got a big interest in building up stable and long running SQL Servers according to best practices.

Some of might know that I’m working for a big outsourcing company and many of our customer don’t have a IT team anymore. So what do they do if they wanna have a new application for their business cases… correct they asking a third party company to help them… ok, better than doing it themself. But what happens next ???

Due the internal structure of our company the customer doesn’t get directly in contact with me or my team, they asking their Service Manager for assistance… what do they do? There are four options

  1. asking a solution architect for a structured solution
  2. calling me or my team for assistance in building a stable solution
  3. doing it themself
  4. asking the customer or his 3rd party to send a recommendation for SQL Server setup

our prepared solution architects

They’re doing a great job and have very much knowledge and trying to get the best result to fulfill everyone needs. Nearly all solution architects at my company are knowing how to setup a stable basic SQL Server, if they’re not sure at all they will ask one of the DBAs. There is also a regular communication round where we talk to each other about new features, new ideas and so on… So I can rely on what they do and how they build solutions.

the lonesome rider

Several Service Manager of my company think they are able to do such solution design on their own… mostly they’re on the easiest path and accept every requested solution from the customer or 3rd party. But with that solution we’re not going live… 😉 So we’ll have to take several rounds of discussions… very annoying.

calling the specialists team

After several annoying years with lots of solution discussions we’ve build up a “shopping cart” where everyone can click through the most relevant features and informations needed for a stable SQL Server Installation. All these items and recommendations are based on the general available standards and best-practices. So I can guarantee that this sql server will fit nearly all application requirements and provides a stable, performant SQL Server.

warenkorb

The most annoying to me are always the requirements from third-party service providers and our own service managers that we should still install SQL Server 2008R2. That version is very aged and the newer version had so much improvements according to performance and stability.

So why shouldn’t my or their customers benefit from these improvements ???

 

#2 Disable NIC Power Save Mode mit Powershell

Weiter geht es mit dem zweiten Teil meiner Powershell-Reihe:
Diesmal möchte ich den Power Save Mode der Netzwerkkarten abschalten, damit diese Funktion nicht “plötzlich” zum Verhängnis wird. In Verbindung mit dem “Balanced”-Powerplan kann Windows der Meinung sein, dass die Netzwerkkarte bei Inaktivität in den “Sleep”-Mode versetzt wird. Somit verliert der SQL Server plötzlich seine (inaktiven) Connections, zahlreiche Applikationen werden diese Trennungen nicht mögen. Noch viel schlimmer in einem Cluster oder mit AlwaysOn Availability-Groups, plötzlich ist der Heartbeat weg und das Cluster schwenkt.

Widersprüchliches in High Performance

Auch wenn man meinen würde, dass dieser Power Save Mode der Netzwerkkarte abgeschaltet wird, wenn man den Powerplan auf “High Performance” setzt. Nein, laut Aussage eines Microsoft PFE Team-Members (Oktober 2016) hilft auch dies nicht:

• If the server is set to High Performance – Windows places the system in the highest performance state and disables the dynamic scaling of performance in response to varying workload levels. Therefore, special care should be taken before setting the power plan to High Performance as this can increase power consumption unnecessarily when the system is underutilized.
• We will have to disable “Allow the computer to turn off this device to save power” option of Power management from NIC. Setting the server in High Performance would not stop the NIC to go in sleep mode whenever there is no activity, as that is a setting at an OS level. The setting on NIC will take preference in this situation.

Somit hilft nur das Abschalten dieses Power Save Modes an allen Netzwerkkarten!

Disable NIC Power Save Mode

Diese Powershell-Lösung habe ich mir nicht selber ausgedacht, mit dieser hatte ich die wenigsten Probleme, sie funktionierte auf zahlreichen Maschinen.
Die Lösung von Ingmar Verheij habe ich angepasst von WiFi auf LAN-Adapter gemäß iana.org, lässt sich sicherlich auch auf andere Adapter anpassen.

Was macht das Powershell Snippet?

Das Skript sucht sich alle installierten Netzwerkkarten und überprüft, ob diese vom Typ “6” (ethernetCsmacd(6), for all ethernet-like interfaces, regardless of speed, as per RFC3635) sind. Wurde eine entsprechende Ethernet-Netzwerkkarte gefunden wird für diese in der Registry der Wert entsprechend geändert, so dass die Netzwerkkarte nicht mehr in den Power Save Mode wechseln kann.

$intNICid=0; do {
     #Read network adapter properties
     $objNICproperties = (Get-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Control\Class\{0}\{1}" -f "{4D36E972-E325-11CE-BFC1-08002BE10318}", ( "{0:D4}" -f $intNICid)) -ErrorAction SilentlyContinue)
 
     #Determine if the Network adapter index exists 
     If ($objNICproperties) {
          #Filter network adapters
          # * only Ethernet adapters (ifType = ieee80211(6) - http://www.iana.org/assignments/ianaiftype-mib/ianaiftype-mib)
          # * root devices are exclude (for instance "WAN Miniport*")
          # * software defined network adapters are excluded (for instance "RAS Async Adapter")
          If (($objNICproperties."*ifType" -eq 6) -and ($objNICproperties.DeviceInstanceID -notlike "ROOT\*") -and ($objNICproperties.DeviceInstanceID -notlike "SW\*")) {
               #Read hardware properties
               $objHardwareProperties = (Get-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Enum\{0}" -f $objNICproperties.DeviceInstanceID) -ErrorAction SilentlyContinue)
               If ($objHardwareProperties.FriendlyName) {
                    $strNICDisplayName = $objHardwareProperties.FriendlyName
               } else { 
                    $strNICDisplayName = $objNICproperties.DriverDesc
               }
               #Read Network properties
               $objNetworkProperties = (Get-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Control\Network\{0}\{1}\Connection" -f "{4D36E972-E325-11CE-BFC1-08002BE10318}", $objNICproperties.NetCfgInstanceId) -ErrorAction SilentlyContinue)

               #Inform user
               Write-Host -NoNewline -ForegroundColor White " ID : "; Write-Host -ForegroundColor Yellow ( "{0:D4}" -f $intNICid)
               Write-Host -NoNewline -ForegroundColor White " Network: "; Write-Host $objNetworkProperties.Name
               Write-Host -NoNewline -ForegroundColor White " NIC : "; Write-Host $strNICDisplayName
               Write-Host -ForegroundColor White " Actions:"

               #Disable power saving
               Set-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Control\Class\{0}\{1}" -f "{4D36E972-E325-11CE-BFC1-08002BE10318}", ( "{0:D4}" -f $intNICid)) -Name "PnPCapabilities" -Value "24" -Type DWord
                Write-Host -ForegroundColor Green (" - Power saving disabled")
                Write-Host ""
           }
      } 
      #Next NIC ID
      $intNICid+=1
} while ($intNICid -lt 255)

#1 Powerplan – SQL Server konfigurieren mit Powershell

Ich möchte in den folgenden Beiträgen auf meine Erfahrung bzw meinen Umstieg auf die Konfiguration des SQL Servers mittels Powershell eingehen und einige Beispiele (hier zum Beispiel den Powerplan) präsentieren. Es kommt immer wieder vor, dass wir verschiedenste Ausprägungen des SQL Server installieren sollen, eines haben aber alle im Grunde genommen gemeinsam… eine auf den Best-Practices beruhende Grundkonfiguration. Diese muss auf jedem SQL Server ausgerollt werden, damit dieser performant läuft. Bisher haben wir das immer manuell oder mit T-SQL gemacht, nun wird es aber Zeit diese Methode umzustellen auf eine etwas einfachere bzw zentralere Variante. Die Konfiguration des SQL Servers mit Powershell sowie ich es hier vorstelle, muss nicht für jede Umgebung passen, seht es bitte nur als Leitfaden an. Des Weiteren werde ich hier nur auf meine “Snippets” eingehen und nicht mein ganzes Skript vorstellen, es gehört natürlich ein gewisser Powershell Rahmen (Synopsis, Hilfe etc) um das Snippet, damit es überall von jedem ausgeführt werden kann.

Powershell against “Balanced” Powerplan

Seit dem Windows 2008R2 Betriebssystem werden die Power Pläne immer mit dem Default-Powerplan “Balanced” ausgerollt, dies kann aber unter Umständen zu starken Performance-Einbussen führen. Bei der Ausführung von einfachen Skripten oder Programmen ist die Wahrscheinlichkeit der Performance-Reduzierung eher sehr gering, allerdings je komplexer die auszuführenden Anwendungen sind, desto mehr die Server-Ressourcen genutzt werden müssen, desto mehr wird man die Nachteile des “Balanced”-Modes spüren. Im Balance-Powerplan wird zum Beispiel die Taktung des Prozessors und die Energieaufnahme der einzelnen Kerne reduziert, dadurch kann die Leistung der CPU nicht voll genutzt werden. Erst wenn man den Powerplan umkonfiguriert auf “High Performance” kommt man in den Genuss der vollen CPU-Leistung.

Windows Server Powerplan für mehr Performance anpassen

Nun kann man sich lange durch die Einstellungen der Power Optionen des Windows Betriebssystemes klicken:

1. Start => Control Panel
2. Control Panel => Power Options (notfalls das Wort “Power” in das Suchfeld eingeben)
3. Per default ist die Auswahl der einzelnen Powerpläne disabled, man muss also erst auf den Link “Change settings that are currently unavailable” klicken.
4. Nun kann man den Powerplan “High Performance” auswählen.
5. Power Option Fenster schliessen

Man könnte dies aber – wie der Beitragstitel andeutet – auch mit Powershell ändern, dies vereinfacht bei Wiederholungen die Änderung am jeweiligen Server.

function SetPowerPlan([string]$PreferredPlan) 
{ 
    Try
    {
        Write-Host "Setting Powerplan to $PreferredPlan" 
        $HighPerf = powercfg -l | %{if($_.contains("High performance")) {$_.split()[3]}}
        $CurrPlan = $(powercfg -getactivescheme).split()[3]
        if ($CurrPlan -ne $HighPerf) {powercfg -setactive $HighPerf}
    } 
    Catch
    {
        Write-Host "Setting the value of powerplan properties failed." -ForegroundColor Red
    }
}

Man muss zwar den leichten Umweg über die “Kommandozeile” nehmen, diese lässt sich mit Powershell aber recht einfach “auslesen” und weiter verarbeiten bzw manipulieren.
Also erst die ID des “High Performance” Powerplan ermitteln, dann auch die ID des aktuellen Powerplans, beide IDs miteinander vergleichen, bei Anweichungen wird über die powercfg.exe der neue Powerplan aktiviert.

Wie ich mittlerweile gelernt habe… typisch Powershell… kurz, einfach und wirksam 😉
Ich kann nur jedem empfehlen sich mit Powershell für den SQL Server zu beschäftigen, in den nächsten Beiträgen werde ich noch einige Snippets veröffentlichen.

Morgen finden erst einmal die Pre-Cons im Rahmen des SQLSaturday München #555 statt, auch hier werde ich wieder viel zum Thema Automatisierung auf SQL Servern mittels Powershell erfahren. Garantiert wieder mit vielen neuen Ideen für weitere Anwendungen von Powershell im täglichen Einsatz.

PASS RG Hamburg – Treffen Juli 2016 – Master Data Services

Conny und Sascha laden am Mittwoch, den 13. Juli 2016 wieder alle Microsoft Data Platform Interessierten herzlich zu einem spannenden Abend bei Microsoft ein, dieses Mal mit dem Thema “Master Data Services”. Das regelmäßige Treffen der PASS Regionalgruppe Hamburg findet auch diesen Monat wieder in der MICROSOFT Niederlassung Hamburg statt. Termin: Mittwoch, 13 . Juli 2016, 18:30 Uhr bis ca. 20:30 Uhr

Master Data Services 2016: Was gibt es neues bei den Masterdaten?

Diesen Abend wird Christoph Seck etwas über die Master Data Services im SQL Server 2016 erzählen.

Endlich (aka „Ja, sie leben noch“), es tut sich wieder etwas bei den MDS.

• Kaskadierende Parameter
• Aufregendes bei den Business Rules
• Modellübergreifende Referenzen
• Entrümpeln des Hierarchieunwesens

Etc. etc. Das schauen wir uns alles genau an und riskieren dann auch den einen oder anderen Blick unter die DB Haube.

für die BI Freunde: SCD2 in der Luxusvariante

Unter dem Begriff Slowly Changing Dimensions (deutsch: sich langsam verändernde Dimensionen) werden im Data-Warehousing Methoden zusammengefasst, um Änderungen in Dimensionstabellen zu erfassen und gegebenenfalls historisch zu dokumentieren. Im Wesentlichen unterscheidet man drei Verfahren, die nach Kimball (Lit.: Kimball, 2002) in Typen unterteilt werden. Allen gemein ist, dass vorhandene Datensätze über den Primärschlüssel mit neuen Datensätzen verbunden werden, um Änderungen in der Tabelle zu speichern. Technische Schlüssel sind aktuell nicht Gegenstand des Artikels.

Typ 2 ist ein komplexes Verfahren, um Dimensionstabellen oder einzelne Attribute der Tabelle zu historisieren, um zu jedem Zeitpunkt die dann gültigen Ausprägungen der Tabelle ermitteln zu können. Dies wird erreicht, indem zu jedem Datensatz ein Gültigkeitsintervall abgelegt wird. Um die Eindeutigkeit des PK zu gewährleisten, ist dieser um zumindest eines der Intervallattribute zu erweitern. In der Regel wird ein unten abgeschlossenes Intervall verwendet, indem der aktuell gültige Satz als unendlich gültig gekennzeichnet ist. Grundlage ist der Vergleich der vorhandenen Datensätze mit den neuen Datensätzen aus einer vollständigen und periodischen Extraktion über den fachlichen Primärschlüssel ohne das Gültigkeitsattribut oder die -attribute.

Quelle: https://de.wikipedia.org/wiki/Slowly_Changing_Dimensions

Christoph works as a BI Architect for KI Performance. With SQL Server and its BI Stack he is dealing for more than 15 years.
He is cofounder and chapter leader of the German PASS chapter of Hannover, Visiting Lecturer at the University of Hildesheim and regular speaker at conferences and German PASS events on DWH topics and agile project management.

 

Also wie bereits oben erwähnt trifft sich die SQL PASS RGV Hamburg:

Donnerstag, 11. Februar 2016, 18:30 Uhr bis ca. 20:30 Uhr in der MICROSOFT Niederlassung Hamburg (Adresse unten)

Microsoft Deutschland GmbH
Geschäftsstelle Hamburg
Gasstraße 6a
22761 Hamburg

Kostenlose Parkplätze befinden sich hinter dem Gebäude. Der Parkplatz ist über die Rampe mit dem Schild “Microsoft Kunden” erreichbar.
Nur wenige Minuten zu Fuß ist der S-Bahnhof Bahrenfeld entfernt (S1/S11).

Ansprechpartner vor Ort: MS Empfangs-Team, Cornelia Matthesius und Sascha Lorenz.

Wir bitten um eine vorherige Anmeldung per Email an: rgv_Hamburg@sqlpass.de

Wichtig: Wir benötigen die Anmeldungen möglichst 2 Tage vor dem Treffen, da wir uns bei Microsoft treffen können und dort Besucherausweise ausgestellt werden. Spontane Teilnehmer sind dennoch herzlich willkommen.

Im Namen von Conny & Sascha Vielen Dank und viele Grüße an alle Interessenten.

SQL Server 2016 – IFI-Aktivierung und TempDB-Optimierung

Jetzt wo der SQL Server 2016 offiziell erschienen ist, kommen auch immer mehr Details ans Licht, so dass man sich so langsam auf die ersten “richtigen” Installationen vorbereiten kann/muss. Was hat sich im Vergleich zum SQL Server 2014 im Rahmen der Installation alles geändert? Wie muss man die vorhandene Dokumentation anpassen?

Beim Lesen zahlreicher Tweets und Blogs bin ich über einen Tweet zum SQL Server 2016 von Thomas Larock gestolpert, hier hat er eine sehr schöne Übersicht über eine Vielzahl von Neuerungen im SQL Server 2016, mit denen man zum Beispiel die Performance des SQL Servers steigern kann, erstellt. Bisher musste man eine Vielzahl von Parametern und Einstellungen zur Performance Optimierung vor der Installation (z.B. Instant File Initialization) oder wie die Anzahl der TempDB-Files nach der Installation anpassen.

Ich möchte hier auf die Neuerungen im Rahmen der SQL Server 2016 Installation eingehen, über die ich mich persönlich sehr freue, weil sie einen Teil meiner Arbeit sehr vereinfachen.

Instant File Initialization

Bisher musste man umständlich VOR der Installation des SQL Servers immer über die lokale Sicherheitsrichtlinie über das System-Tool “secpol.msc” dem SQL-Service-User die Berechtigungen für “Perform Volume Maintenance Tasks/Durchführen von Volumenwartungsaufgaben” einräumen. Erst das Tool öffnen, dann durch einen Strukturbaum klicken und noch die richtige Berechtigung finden, um dann den User in der Userverwaltung zu suchen… ein wirklich aufwändiger Weg um das Vollschreiben neuer Dateien bzw Dateibereiche zu umgehen, um so z.B. den Autogrowth Event zu beschleunigen…

Jetzt mit dem neuen SQL Server 2016 geht es wesentlich einfacher, da der Installationsprozess die Arbeit für uns übernimmt. Hier hat Microsoft, die in der Community gängige Praxis optimal umgesetzt und im Rahmen der Installation die Möglichkeit geschaffen einfach nur einen Haken zu setzen… tada…

SQL Server 2016 - Instant File Initialization

Nun kann man ganz einfach während der Installation einen Haken setzen und der Installationsprozess übernimmt für einen die Arbeit. Vielen Dank hierfür an Micorsoft!
Falls man den SQL Server 2016 von der Commandline installiert, hat man beim Aufrufen der “Setup.exe” auch die Möglichkeit diesen Parameter entweder in der ConfigurationFile.ini mit anzugeben oder direkt als Option am Aufruf

/SQLSVCINSTANTFILEINIT=”True”

Automatic TEMPDB Configuration in SQL Server 2016

Die Konfiguration der TempDB nach erfolgter Installation nahm immer ein wenig Zeit in Anspruch, natürlich konnte man das bisher auch skripten, aber so einfach wie jetzt war es noch nie bzw es bedeutete trotzdem einen gewissen Aufwand. Auch diese Konfiguration hat Microsoft in den Installationsprozess verlegt, so dass man nach der Installation nicht noch ein weiteres Skript aufrufen muss.

SQL Server 2016 - Config TempDB

In diesem neuen Tab unter Database Engine Configuration kann man die Anzahl der TempDB-Files, deren initiale Größe und Autogrowth-Wert festlegen. Man kann die Pfade beider Filetypen individuell anpassen, theoretisch könnte man auch mehrere Pfade für die TempDB-Datenfiles angeben.

Auch bei diesem neuen Konfigurations-Tab gibt es die Möglichkeit die Parameter über die ConfigurationFile.ini oder die Kommandozeile mitzugeben.

/SQLTEMPDBFILECOUNT=”8″ /SQLTEMPDBFILESIZE=”16″ /SQLTEMPDBFILEGROWTH=”256″ /SQLTEMPDBDIR=”C:\tempdb” “D:\tempdb” /SQLTEMPDBLOGFILESIZE=”256″ /SQLTEMPDBLOGFILEGROWTH=”0″ /SQLTEMPDBLOGDIR=”E:\tempdblog”

Diese oben genannten Optimierung (oder besser Vereinfachungen) machen die Installation und performance-orientierte Konfiguration des SQL Servers wesentlich komfortabler. Allerdings hat es auch einen kleinen Nachteil (*Augenzwinker*), die DBAs verlieren einen Teil ihres Einflusses, da nun jeder die Möglichkeit hat, diese Performance-Schrauben zu bedienen.