SQL Server: Performance-Optimierung

Datenbank-Dimensionierung – Praxisdemonstration

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Grau ist alle Theorie, daher zeigt dieses Video ein praktisches Beispiel für sinnvolle Datenbank-Dimensionierung.
13:14

Transkript

So, ich habe hier ins SQL Server Management Studio gewechselt. Ich mache eine neue Abfrage auf und die einfachste Art, eine neue Datenbank anzulegen ist natürlich create database. MeineDB. Kann das entsprechend so ausführen. Das hat allerdings gleich mehrere Nachteile. Ich gebe weder an, wo die Datenbank liegen soll, noch gebe ich an, entsprechend, wie groß die entsprechenden Medien werden sollen, die für diese Datenbank zur Verfügung stehen, Und das bedeutet zum Beispiel, dass in einer einfachen Installation, wie zum Beispiel meiner hier, das bedeutet, dass die Datenbank sich auch noch die gleiche Partition teilt, wie das Betriebssystem und wenn der Eine oder Andere schon mal in Windows versucht hat zu arbeiten, dem der Plattenplatz ausgeht, wissen Sie, dass das vielleicht keine ganz so tolle Idee ist. Was ich jetzt hier an Problemen habe, ist ich könnte natürlich hingehen und die Datenbank so anlegen und die einzelnen Dateien entsprechend bestimmen, oder ich gehe hin und sehe mir die Standards an. Wenn ich möchte, kann ich die auch verändern. Damit hätte ich das Problem gelöst. Das heißt, ich kann hier festlegen unter den Eigenschaften, des Servers auf der Page Database Settings, wo Daten und wo die Logdateien liegen sollen an der Stelle. Das heißt hier wird er meine Dateien anlegen. Die Größe kann ich abfragen, indem ich hier auf Sys Databases gehe, und die Eigenschaften der Model Datanbank abrufe dann sehen Sie: initiale Größe sind nur 8 MB. Das ist nicht besonders viel. Dafür ist das Autogrow im Vergleich zum Vorhergängern, sprich SQL Server 2014 und vorher durchaus aufgestockt worden und steht jetzt ungefähr auf genau auf 64 MB natürlich, mit Unlimited. Das bedeutet, das jedes Mal, wenn die Datenbank vergrößert werden muss, also wenn Platz in dieser Datei benötigt wird, dann wird diese um 64 MB erweitert. Das ist schon mal kein allzu kleiner Schritt. Die vorherigen Versionen die hatten da teilweise wirklich extrem winzige Werte stehen. So. Das bedeutet, wenn ich jetzt die Datenbank anlegen würde. Ich mache den Dialog mal zu. Dann... wird er das entsprechend versuchen. Beim Versuch wird es hier auch bleiben. Der Punkt ist, das Management Studio hat mir jetzt selber so ein bisschen die Karten gelegt und hat noch eine Sperre auf dieser Model Datenbank bestehen. und wen ich eine neue Datenbank anlege, dann brauche ich eine exklusive Sperre für die Model Datenbank und wenn ich die nicht bekomme, Gibt es genau diesen Fehler hier: Could not obtain exclusive lock on database model. Und dagegen kann ich leicht vorgehen. Ich kann zum Beispiel hingehen in einem weiteren Abfragefenster Sagen sp_who2. Das ausführen. Bisschen größer machen. Bisschen größer machen und hier in der Spalte DBName mal nach Model suchen. Mal sehen, wenn ich ein bisschen runter scrolle, dann habe ich hier die 54 stehen. Gleichen Effekt oder gleiche Funktionsweise kriege ich natürlich auch, wenn ich hingehen würde rechte Maustaste hier auf den Server und mir den Activity Monitor anzeigen lasse. Da kann ich hier auf Prozesse gehen. und habe dann hier entsprechend sogar offensichtlich noch eine übersehen. Hier ist es die 54 und die 51 da es die gleichen Daten sind, die angezeigt werden, muss auch hier die 51 entsprechend ebenfalls in der Model Datenbank sein. Und ich könnte jetzt hingehen, den Prozess killen, zum Beispiel für die 51. Und ich kann, um das auf SQL gleich zu zeigen, auch die 54 kurz killen, und dann noch mal zum Beispiel hier die Stopp Procedure ausführen und wenn jetzt nicht noch etwas zusätzlich versucht, auf diese Datenbank zuzugreifen, 60, na das wird ja lustig. Schau an, es ist mein eigener Prozess, den kann ich natürlich nicht eliminieren. Ich bin selber in dieser Datenbank. Das ist natürlich nicht so schön. Aber wenn ich den jetzt hier zu mache, sollte das Problem zumindest gelöst sein. Und zurück zur Create Database Anweisung, nachdem ich also quasi alle Prozesse, die auf die Model Datenbank entsprechend zugegriffen haben eliminiert habe, müsste es so sein, dass das hier relativ schnell ausgeführt wird. So, wenn ich das kurz überprüfe, dann werde ich sehen, dass diese Datenbank in der Tat die Größe hat. Dafür kann ich natürlich zum Einen hingehen, und sagen, ich möchte hier einmal einen Refresh durchführen. Dann müsste auf der linken Seite meine Datenbank auch auftauchen. Ich könnte jetzt hier auf Properties gehen, auf Files und genau wie versprochen, initale Größe von 8 MB und 64 MB Growth. Alternativ kann ich Folgendes machen: Ich kann sagen: sp_helpfile, das ausführen. Da kriege ich die gleichen Informationen. kurz und prägnant angezeigt. Beziehungsweise ich bin hier immer noch in der falschen Datenbank, das heißt. ich müsste hingehen und hier zum Beispiel sagen: MeineDB das nochmal ausführen, dann zeigt er mir das auch exakt für die Datenbank an, die mich an der Stelle interessiert. Das ist nicht ganz so optimal. Ich hab jetzt nicht besonders viele Möglichkeiten das zu steuern. Ich könnte natürlich theoretisch hingehen und die Einstellungen auf der Serverebene, wo Dateien angelegt werden, ändern. Das macht vielleicht auch Sinn, keine Frage. Damit könnte ich sicherstellen zum Beispiel dass die Datendateien nicht versehentlich auf der gleichen Partition abgelegt werden wie das Windows Betriebssystem und damit habe ich nicht das Problem, das irgendwann dem Betriebssystem Plattenplatz ausgeht. Wer schon mal mit Windows ohne Plattenplatz versucht hat zu arbeiten, wird wissen, was ich meine. Ich kann natürlich auch hingehen und die Model Datenbank mit bestimmten Werten versehen aber ich hätte da das Problem, das zum Einen das natürlich toter Platz oder tote Dateien wären letztendlich. Wenn ich beispielsweise in meiner Model Datenbank sage: OK, ich brauche mindestens 10 GB, dann würde 10 GB brach liegen auf meiner Festplatte und bei entsprechend großen Größen wird das natürlich irgendwann doch ein bisschen weh tun und letztendlich ist ja das zweite Problem: ich hab nie wirklich die Sicherheit dass ich auch für jede Datenbank in der Tat die gleiche Startgröße brauche. Das ist schon etwas individueller. Insofern da die Model Datenbank anzupassen ist ein bisschen schwierig. Deshalb mein Tipp: gehen Sie hin, wenn Sie die Datenbank anlegen, können Sie das auch sehr bequem über die Oberfläche machen, ich sage einfach MeineDb2, und dann kann ich hingehen und für die einzelnen Dateien entsprechende Werte angeben. Ich könnte zum Beispiel sagen: Hier möchte ich dann mit 80 MB anfangen und ich möchte eine maximale Größe haben, die beispielsweise ein gewisses Limit hat, also entweder Unlimited ausschalten, das wird gar nicht wachsen, dann werde ich jetzt genau auf die hier ausgewählten 80 MB festgelegt, oder ich könnte sagen: ich möchte, das es zwar wachsen kann, aber mein lieber Freund ich traue dir nicht so sehr, ich nehme beispielsweise einen Wert, der 500 GB entspricht. Jetzt kann ich mir überlegen, ob das ein guter Wert ist. Obwohl 64 MB kann schon ganz in Ordnung sein. Wenn Sie nicht eine Anwendung haben, die wirklich extrem viele Daten immer importiert und dann auch die Daten jedes mal wieder kleiner machen aus irgendwelchen Gründen, dann sind 64 MB vielleicht gar keine so schlechte Wahl. Da heißt entweder, mein Rat, Autogrowth ausschalten, das ist so ein bisschen die harte Tour oder schlicht und ergreifend ein bisschen Reserve einplanen und sagen: OK das soll an der Stelle das Maximum sein, wo diese Datei wachsen kann. Da ich genau weiß, was ich tue, möchte ich an der Stelle das Autogrowth ausschalten und das zeigt er dann entsprechend an dieser Stelle mit None an. Dann kann ich hingehen und für die Indizes ebenfalls eine Datei anlegen, Ich könnte sagen: MeineDb2_indexSpace. Möchte dafür eine neue Dateigruppe anlegen. Und dann kann ich zum Beispiel sagen: IndexSpace Space So. Kann dem ebenfalls eine Startgröße geben, Auch in dem Fall 80 MB. In der Regel brauche ich weniger. Es ist tendenziell eher so, dass Indizes weniger Platz als die Datenbank beanspruchen. Aber ich starte hier einfach mal komfortabel mit 80 MB. Kann auch hier hingehen und sagen: OK ich möchte kein Autogrowth. Ich schalte das aus. Und habe dann genau diese Einstellungen. Das kann ich mir skripten lassen, wenn ich möchte, Schiebe ich das Fenster mal ein Stückchen nach unten dann sehen Sie: die Datenbank wird mit Create Database nach wie vor angelegt. Das ist ein richtiges Statement an sich schon. Ich gebe aber jetzt hier wirklich explizit an, wo welche Dateien letztendlich liegen sollen und vor allen Dingen auch, wie groß die sein sollen. Das heißt, wenn ich hier ein Stückchen nach rechts scrolle, dann sehen Sie: hier wird die SIZE angegeben dann wird das FILEGROWTH angegeben, entweder 0 für ausgeschaltet oder einen entsprechenden Wert, den Sie konfiguriert haben. Dann kann ich dieses Script archivieren, wenn ich möchte. Vielleicht brauche ich das irgendwie. Ich kann es einfach ausführen und wenn ich nicht wieder in die Sperrproblematik reinlaufe, dann sollte das soweit kein Problem sein. Wobei, er braucht schon relativ lange. Das hat jetzt sofort funktioniert. Der Hintergrund ist, das der SQL Server das SQL Server Management Studio selber den Lock auf die Model Datenbank hatte beim zweiten Mal und quasi diesen Lock freigegeben hat und so die Datenbank angelegt werden konnte. Das Skript an sich hier ist aber durchaus in Ordnung. Da ist jetzt nichts Fehlerhaftes dran. Es liegt einfach nur daran, das ich vorher hier im Management Studio auf der System Database Model war an der Stelle. Wenn Sie das nicht machen, dürften Sie mit dem Skript hier keine Probleme bekommen. Dann kann ich Ihnen auch gleich zeigen, wo Sie angeben können bei der Erstellung einer Tabelle oder eines Index welche Filegroup verwendet werden soll und entsprechend auf welche Dateien der Inhalt verteilt werden soll. Sie können einfach hier auf neue Tabelle gehen. Dann kann ich hingehen und hier mal eine Spalte anlegen. Und Sie sehen hier auf der rechten Seite unter Properties Falls Sie das kleine Fenster rechts nicht haben, F4 sollte es einblenden. Und ich kann hier auswählen, in welcher Dateigruppe der Inhalt abgelegt werden soll und damit in welche Dateien der Inhalt letztendlich platziert wird auf dem IO System. Man kann das Ganze auch für Text oder Image machen, das heißt, wenn Sie etwas haben wie VAR BINARYMAX VAR CHARMAX, NVAR CHARMAX, TEXT IMAGE oder ähnliches, also diese Blockdatentypen, dann können Sie auch festlegen, wo diese liegen sollen. Standardmäßig ist dies auch das Primary beziehungsweise die Primary File Group, aber wenn ich möchte, kann ich das ändern. Wenn ich für eine Index festlegen möchte, wo dieser liegt, dann muss ich zunächst einmal die Tabelle abspeichern, Name spielt jetzt keine Rolle für mich, deshalb lasse ich das mal so. Dann muss ich auf Managed Indices and Keys gehen. Das versteckt sich manchmal so ein bisschen. Das sieht beim neuen SQL Server Management Studio wie so eine Kiste mit einem Schlüssel aus. Oder so Imker Bienenwaben und ein Schlüssel daneben. Und wenn ich da drauf gehe, kriege ich diesen Dialog. Ich kann dann auf App gehen, kann hier runter scrollen, bis Data Specification, und kann dann hier auswählen, wo der Index letztendlich angelegt werden soll. Und wenn ich das mache, dann habe ich hier die Möglichkeit, zu sagen: Ich möchte das auf IndexBase haben. Das kann ich dann, wenn ich möchte, entsprechend auch speichern, und dann wird der Index genau auch so angelegt, dass er in dieser Dateigruppe liegt. Und damit habe ich quasi die Daten getrennt von meinen Indizes. Wie gesagt: das ist bei manchen Datenbankdesigns durchaus sinnvoll. Wenn Sie sich ein bisschen mehr Arbeit aufbürden wollen dann teilen Sie das einfach rein prophylaktisch vielleicht, damit Sie später mal die einfache Option haben, das wirklich auf zwei unterschiedliche physikalische IO Systeme zu bringen. Zwingend notwendig ist es nicht. Sie können Datenbanken bis zu einer gewissen Größe durchaus so betreiben, das alles auf einer Partition, auf einem IO System liegt. Insofern würde ich es da auch nur so kompliziert machen, wie es unbedingt notwendig ist.

SQL Server: Performance-Optimierung

Lernen Sie den Umgang mit Indizis und Tools, um die Leistungsfähigkiet Ihrer SQL Server Datenbank effektiv zu erhöhen.

3 Std. 20 min (32 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:04.05.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!