News zu Microsoft SQL Server

Häufige Fehler beim Einsatz von SQL Server Da­ten­ban­ken: Teil 1 – Instanzkonfiguration

Dieser DBA Tipp ist der erste Teil einer kleinen Serie, welche sich de­tail­liert mit der Feh­ler­ver­mei­dung beim Einsatz von Microsoft SQL Server Da­ten­ban­ken be­schäf­tigt. Um die Vielzahl von Punkten über­sicht­lich zu halten, haben wir die Serie in 3 The­men­be­rei­che untergliedert.

  • Teil 1: Instanzkonfiguration
  • Teil 2: Datenbankkonfiguration
  • Teil 3: Si­cher­heit von Instanzen


Ziel ist es, dir mit Hilfe der Beiträge ein paar Hand­grif­fe mit­zu­ge­ben, um den Betrieb deiner SQL Server Da­ten­ban­ken zu verbessern.

Wir beginnen ganz oben – sprich: auf Ebene der Instanz. Dazu stellen wir aus jedem Teil ver­schie­de­ne Punkte vor, welche unserer Erfahrung nach am häu­figs­ten auftreten:

1. Per­for­mance – Probleme durch starre Prozessorzuordnung

Die Zuordnung einzelner Pro­zes­so­ren oder Kerne zu einer be­stimm­ten SQL Server Instanz entsteht mehr­heit­lich aus dem Wunsch heraus, die Res­sour­cen eines von mehreren Instanzen gemeinsam genutzten Windows Hosts optimal zu verteilen. Ins­be­son­de­re auch in vir­tua­li­sier­ten Um­ge­bun­gen spielt das eine er­heb­li­che Rolle. Hier kann man sich jedoch schnell bei der korrekten Zuweisung der CPU-Res­sour­cen ver­schät­zen. Man läuft hier schnell Gefahr, die zwei folgenden Tatsachen außer Acht zu lassen:

  1. Ein Prozessor oder Kern sollte niemals für Abfragen und I/O‑Aufgaben glei­cher­ma­ßen genutzt werden.
  2. Die manuelle Zuordnung de­ak­ti­viert ebenfalls den dy­na­mi­schen Wechsel eines SQL-Threads (Scheduler) von einem Prozessor zum anderen.

Werden diese beiden Tatsachen nunmehr in der manuellen CPU-Zuweisung nicht be­rück­sich­tigt, kann es schnell zu folgenden Problemen kommen:

  • Die Über­schät­zung der be­nö­tig­ten CPU-Res­sour­cen führt zu einer Ver­schwen­dung von zum Teil kos­ten­in­ten­si­ven IT-Res­sour­cen (Host Power, In­ves­ti­tio­nen, IT Betrieb, etc.)
  • Die Un­ter­schät­zung der be­nö­tig­ten CPU-Res­sour­cen führt früher oder später zwangs­läu­fig zu Per­for­man­ce­pro­ble­men und den damit ver­bun­de­nen nicht un­er­heb­li­chen ver­steck­ten Kosten.

In beiden Fällen läuft es also nicht optimal. Klar, wenn man das weiß, kann man die CPU-Zuweisung auch schnell wieder anpassen. Doch macht eine ständige manuelle Anpassung wirklich Sinn? Und vor Allem: Hat der DBA heute für so etwas überhaupt noch aus­rei­chend Zeit? Das muss jeder für sich selbst bewerten, aber wir meinen, genau diese Arbeit sollte man dem SQL Server selbst über­las­sen. Dazu bringt das SQL Server OS bereits ent­spre­chen­de Al­go­rith­men mit, die diese Arbeit selbst­stän­dig und zu­ver­läs­sig über­neh­men. Und genau das ist auch unsere klare Emp­feh­lung für diesen Punkt.

2. Sta­bi­li­tät – unnütze Trace Flags

Trace Flags verändern die Funk­ti­ons­wei­se des SQL Servers an ent­schei­den­den Stellen. Daher sind sie ab Werk (also durch Mi­cro­softs Installer) niemals au­to­ma­tisch aktiviert. Das manuelle Setzen an sich ist jedoch nicht komplett falsch, sondern vielmehr das unnötige Setzen. Denn einmal ak­ti­vier­te Trace Flags tendieren dazu, im Ar­beits­all­tag sehr schnell in Ver­ges­sen­heit zu geraten. Nicht zuletzt auch dadurch, dass das SQL Server Ma­nage­ment Studio bis heute keinerlei Ober­flä­che zur Anzeige oder Kontrolle von Trace Flags anbietet.

Der Sinn eines Trace Flags liegt darin, einige der grund­le­gen­den Funk­tio­nen zu steuern, die teilweise tief in der Engine verborgen sind. Hier sollte man genau wissen, was man tut.

Es ist daher ratsam, mit Trace Flags im Alltag äußerst sparsam umzugehen. Unsere Emp­feh­lung stützt sich hierbei auf zwei Dinge:

  1. Verstehen: Vor dem Ak­ti­vie­ren sollte man sich die Zeit nehmen und die Be­schrei­bung zumindest grund­le­gend studieren. Erst wenn man darin einen guten Grund erkennt, sollte man das Trace Flag auch setzen.
  2. Do­ku­men­tie­ren: Die Ak­ti­vie­rung des Trace Flags sollte auf eine solide Art und Weise vermerkt werden, idea­ler­wei­se mit einer Be­grün­dung, warum es aktiviert wird. Das beugt dem Vergessen vor und ist um so wichtiger, wenn man sich die Ver­ant­wor­tung für einen SQL Server mit anderen Personen teilt.

Aus­ge­wähl­te Beispiele für überholte Trace Flags sind:

  • 1117 – all file grow
  • 3023 – backup checksum default
  • 4136 – no parameter sniffing
  • 6545 – CLR strict security
  • 8079 – soft-NUMA 

Einige Beispiele für ge­fähr­li­che Trace Flags sind:

  • 3042 – no pre-al­lo­ca­ti­on for com­pres­sed backups
  • 3459 – no parallel redo
  • 8020 – working set unawareness 

Ein be­son­de­res Beispiel für ein nicht exis­ten­tes Trace Flag ist:

  • 2861 – zero cost plan capture 

Diese Auf­lis­tung soll selbst­ver­ständ­lich die Trace Flags nicht pau­scha­li­sie­ren. Sie soll vielmehr eine Emp­feh­lung sein, die je­wei­li­gen Ein­stel­lun­gen nicht leicht­fer­tig zu setzen und sich außerdem über Sinn und Zweck eines Trace Flags absolut im Klaren zu sein.

3. Netzwerk – dy­na­mi­sche TCP/IP-Ports

Eine der un­schöns­ten Kon­fi­gu­ra­tio­nen eines SQL Servers entsteht bereits während der In­stal­la­ti­on. Und zwar die Ver­wen­dung dy­na­mi­scher Ports des TCP/IP-Pro­to­kolls. Denn benannte SQL-Server-Instanzen verwenden von Haus aus bei jedem Hoch­fah­ren der Instanz (Dienst­start) einen anderen Port.

Ändert man das auf die Ver­wen­dung von sta­ti­schen Ports, ergeben sich zwei Vorteile:

  1. Der SQL-Da­ten­ver­kehr zwischen der Instanz (oder dem Host) und den Clients kann nun auch durch eine Firewall geleitet werden, was zu grund­sätz­lich zu einer erhöhten Si­cher­heit im Da­ten­ver­kehr beiträgt. In einem unserer früheren Beiträge mit dem Titel “TCP/IP-Kon­fi­gu­ra­ti­on und Probleme mit Firewalls im SQL-Server-Alltag” geben wir noch weitere Tipps und In­for­ma­tio­nen zu dieser Thematik.
  2. Man kann nun auch bei einer benannten Instanz auf den SQL Browser ver­zich­ten, da sich die Ver­bin­dungs­zei­chen­fol­ge nicht mehr ändert. 

Folglich empfehlen wir bei diesem Punkt die Um­stel­lung auf feste (statische) Ports.

4. Si­cher­heit – Berechtigungs-Wildwuchs

Das folgende Thema ist simpel, aber wertvoll. Unter Windows-Admins ist eine Regel wohl­be­kannt: keine Be­rech­ti­gun­gen für Benutzer, sondern für Gruppen. Anstatt also eine Reihe von einzelnen Logins mit vielen Ein­zel­be­rech­ti­gun­gen zu versehen, ist es ratsam, die je­wei­li­gen Logins einer Rolle zu­zu­ord­nen. Und damit ist auch schon die Lösung genannt.

Dieses aus dem Windows-Bereich bekannte Prinzip lässt sich auch im SQL Server anwenden. Lediglich das Wording ist ein klein wenig unterschiedlich:

  • Was im Windows (oder Active Directory) die Benutzer sind, wird im SQL Server als “Login” bezeichnet
  • Was im Windows eine Gruppe ist, wird im SQL Server eine Server-Rolle genannt 

Leider noch immer wenig bekannt ist die Tatsache, dass Microsoft mit Ein­füh­rung der SQL Server Version 2012 die Option für selbst de­fi­nier­te Server-Rollen be­reit­ge­stellt hat. Server-Rollen können dif­fe­ren­ziert mit Be­rech­ti­gun­gen aus­ge­stat­tet werden. Si­cher­lich macht das hier am Anfang ein wenig mehr Arbeit, sich ent­spre­chen­de Gedanken zu machen und dies auch so um­zu­set­zen. Aber der Aufwand lohnt sich.

Er­fah­rungs­ge­mäß zahlt sich das saubere Vorgehen bei der Umsetzung der oben genannten Punkte aus. Ins­be­son­de­re bei der Umsetzung von Mi­gra­tio­nen oder Kon­so­li­die­run­gen von SQL Server Instanzen lassen sich somit ent­spre­chen­de Aufgaben op­ti­mie­ren. Eine kon­se­quen­te Ver­wen­dung von Server-Rollen und deren sinnvolle Benennung trägt ent­schei­dend zur Trans­pa­renz in den Systemen bei und er­leich­tert somit auch eine Systemdokumentation. 

5. Effizienz – un­ge­nutz­te Komponenten

Ein bereits bekannter Umstand ist, dass beim Setup eines SQL Servers diverse Kom­po­nen­ten für die In­stal­la­ti­on auch einzeln aus­ge­wählt werden können. Die wich­tigs­ten Kom­po­nen­ten sind:

  • SQL Server Engine
  • Analysis Services
  • In­te­gra­ti­on Services 

Ver­mut­lich aus Gründen der “Ein­fach­heit” werden bei vielen In­stal­la­tio­nen grund­sätz­lich erstmal alle Kom­po­nen­ten in­stal­liert – un­ab­hän­gig davon, ob sie zum Einsatz kommen oder nicht. Besser wäre es jedoch, sich im Vorfeld darüber Gedanken zu machen, welche Kom­po­nen­ten tat­säch­lich gebraucht werden. Nicht zuletzt aus Si­cher­heits­grün­den sollten nicht benötigte Kom­po­nen­ten von den Systemen entfernt werden – oder gar nicht erst in­stal­liert werden. Weiterhin ver­ur­sacht auch die Ad­mi­nis­tra­ti­on (Wartung, Patchen, Rech­te­ver­ga­be, …)  einen erhöhten Ar­beits­auf­wand beim Ad­mi­nis­tra­tor und stellt zudem eine zu­sätz­lich Feh­ler­quel­le dar. Nicht außen vor gelassen werden soll der Umstand, dass die Kom­po­nen­ten natürlich auch ent­spre­chen­de Res­sour­cen auf der Hardware unnötig in Anspruch nehmen. Wie zuvor bereits erwähnt, lassen sich die Kom­po­nen­ten im Be­darfs­fall auch pro­blem­los nachinstallieren.

Als kleines Beispiel aus der Praxis heraus gegriffen, ist die In­stal­la­ti­on der Kom­po­nen­te PolyBase. PolyBase selbst ist ein sehr in­ter­es­san­tes Werkzeug, um auf externe Da­ten­quel­len zu­zu­grei­fen – aber die wenigsten Ad­mi­nis­tra­to­ren nutzen dieses Tool auch tat­säch­lich. Trotzdem findet sich diese Kom­po­nen­te heute bei einer Vielzahl von SQL Server In­stal­la­tio­nen wieder. 

Zu­sam­men­fas­send lässt sich sagen: in­stal­liert werden sollte nur das, was tat­säch­lich benötigt wird.
Dieses Vorgehen 

  • reduziert Aufwand und Ver­ant­wor­tung beim DBA 
  • schont kos­ten­in­ten­si­ve Hardware-Ressourcen
  • minimiert das Sicherheitsrisiko 

Übrigens: Microsoft geht hier selbst mit gutem Beispiel voran und bietet die bekannten Reporting Services im SQL Server Setup gar nicht mehr an. Möchte man ganz bewusst eine SSRS-Instanz in­stal­lie­ren, genügt ein kurzer Abstecher in das MS Download Center.

Fazit

Im ersten Teil unserer drei­tei­li­gen Serie zu den häu­figs­ten Fehlern beim Einsatz von SQL Server Da­ten­ban­ken, haben wir dir fünf konkrete An­satz­punk­te an die Hand gegeben, um allein bei der In­stanz­kon­fi­gu­ra­ti­on schon einiges mehr an Per­for­mance, Sta­bi­li­tät und Si­cher­heit her­aus­zu­ho­len. Zum Teil sind es wirklich banale Themen, über die man doch gern mal wieder stolpert. Unser Fazit: Bereits mit kleinen Hand­grif­fen kannst du die Arbeit re­spek­ti­ve den Betrieb der SQL Server Da­ten­ban­ken we­sent­lich verbessern.

icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email