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 Punkte ü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

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. Gleich­zei­tig benötigt man dafür nicht zwingend fach­li­ches Tie­fen­wis­sen, um diese Emp­feh­lun­gen umzusetzen.

Wir beginnen gleich mit einem Klassiker:

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. Ein hän­di­sches Ak­ti­vie­ren ist jedoch nicht mit dem Zünden des Turbos zu ver­wech­seln. Viel eher ist es ver­gleich­bar mit dem Aus­schal­ten des ABS. Hier muss man genau wissen, was man tut.

Mit Trace Flags sollte man im Alltag also äußerst sparsam umgehen. 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 Flag 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 pauschal ver­un­glimp­fen. 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. Das dürften si­cher­lich auch die Netzwerk-Admins begrüßen.

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” (in der deutschen Aus­füh­rung: Anmeldung) 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. Das 

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

Zugegeben: Es klingt schon fast zu simpel für einen Tipp, doch gerade diese Emp­feh­lung ist an Hand von Ein­bli­cken in dutzende pro­duk­ti­ver Systeme entstanden.

Ü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äufige Fehler beim Einsatz von SQL Server Da­ten­ban­ken, haben wir Euch wiederum 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. Zum anderen kann man sich bereits mit kleinen Hand­grif­fen die Arbeit re­spek­ti­ve den Betrieb der SQL Server Da­ten­ban­ken we­sent­lich erleichtern.

icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email