Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Server: Performance-Optimierung

Natively Compiled Procedures

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Dieser Film stellt sowohl eine Einführung in wie auch eine Demo für Natively Compiled Procedures dar.
07:59

Transkript

Damit könnte dieses Kapitel eigentlich zu Ende sein. Sie haben gesehen, wann Sie welchen Index benutzen können, wie da ungefähr die unterschiedlichen Laufzeiten sind. Sie haben aber auch gesehen, dass In-Memory Optimized Tables in einigen Fällen durchaus ihre Nase vorne hatten. Und ich zeige Ihnen jetzt einfach mal über sogenannte "Natively Compiled Procedures", wo die Reise hingehen wird, wenn die Maschinen in der Zukunft immer mehr Speicher haben werden. Natively Compiled Procedures sind nur für Memory Optimized Tables verfügbar. Hier wird T-SQL in C übersetzt und der wird kompiliert und in den Adressraum des SQL-Servers gehängt und damit habe ich etwas, was extrem schnell auf meine Speicherstrukturen zugreifen kann. Leider aber fehlen noch viele Funktionalitäten, also mit SQL Server 2014 wurde diese Technologie eingeführt. Da konnte ich bei einem Prädikat noch nicht einmal ein OR durchführen und auch jetzt sind die Einschränkungen noch so dermaßen vielfältig, dass es sich eigentlich gar nicht lohnt, die alle aufzulisten letztendlich. Aber um Ihnen mal zu zeigen, wohin die Richtung gehen wird in den nächsten Jahren, zumindest vermuteterweise, ein kleines Chart hier. Sie sehen eine Summierung, was auch immer da summiert werden soll, über eine Spalte über eine gewisse Anzahl von Zeilen, das werden wir gleich noch einmal sehen dann, dauert bei einer Ad-hoc-Abfrage knapp 1700 Millisekunden, für eine "Stored Procedure", also für eine gewöhnliche Stored Procedure, wie Sie sie bis jetzt wahrscheinlich mannigfaltig schon geschrieben haben, sogar noch einen kleinen Tacken länger. Wobei das würde ich jetzt nicht so sehr auf die Goldwaage legen, die 50 Millisekunden. Allerdings eine Natively Compiled Procedure ist um ein Vielfaches schneller. Das ist ungefähr ein Drittel, was ich da habe. Das heißt, wenn ich einmal das Rad der Zeit um ein paar Jahre nach vorn drehe, dann könnte ich mir vorstellen, dass man gerade für sehr, sehr rechenintensive Operationen nur noch Strukturen im Speicher benutzt, dass man Natively Compiled Procedures benutzt, um die Berechnungen durchzuführen und dann wirklich auch mit sehr großen Datenmengen in relativ kurzer Zeit Ergebnisse erzielen kann. So, ich zeige Ihnen einmal, wie das in der Praxis aussieht und dann können Sie sich da selber ein Bild darüber machen, wie es im Detail und im Code aussieht. So und damit sind wir im SQL Server Management Studio und ich möchte Ihnen zeigen, wie man solche Natively Compiled Procedures anlegt beziehungsweise in dem Fall, wie es gleich bei einem Versuch bleiben wird. Ganz einfach, ich kann sagen: "CREATE OR ALTER PROCEDURE". Dieses "CREATE OR ALTER" kann ich seit Service Pack 1, siehe 2016, für eine Vielzahl von Objekten verwenden, hier für die Prozedur. Ich gebe dem Kind einen Namen. Ich kann, wenn ich möchte, Parameter hinzufügen, das möchte ich in dem Fall, die "EANGroup" möchte ich hinzufügen. Dann muss ich mit "WITH" angeben "NATIVE_COMPILATION". Damit wird dem SQL-Server mitgeteilt: "Pass auf, das soll ein Natively Compiled Procedure werden." Ich muss angeben "SCHEMABINDING". Das bedeutet, die Tabellen und die Objekte, auf dem wiederum dieses .PROCEDURE, dieses Natively Compiled Procedure basiert, kann nicht geändert werden, solange diese existiert. Dann kommt das Schlüsselwort "AS", danach "BEGIN" und "END", und zwar "BEGIN ATOMIC WITH". Ich lege den "TRANSACTION ISOLATION LEVEL" fest, das ist soweit erst einmal in Ordnung. Ich muss aber auch sagen, mit welcher Sprache ich gerne arbeiten möchte. Das heißt, ich kann das nicht der User Connection, die die Natively Compiled Procedure ausführt, überlassen an der Stelle. Dazwischen, also zwischen "BEGIN" und "END", habe ich hier ein SELECT-Statement, was eigentlich nichts Besonderes macht. Es benutzt aber unter anderem die Funktion "LEFT", um diesen Filter hier zu etablieren. Das heißt, die EAN-Gruppe sind die letzten beziehungsweise von links gesehen die ersten beiden Ziffern der EAN an der Stelle. So und wenn ich versuche, das auszuführen. Na, komm schon. Dann wird es bei dem Versuch bleiben, weil er schlicht und ergreifend so etwas einfaches wie die LEFT-Funktion nicht unterstützt. Das heißt, Sie stolpern sehr schnell in Einschränkungen hinein, wo Sie niemals gedacht hätten, dass das überhaupt ein Problem ist. Wenn Sie aber dann doch etwas gefunden haben, was funktioniert, dann können das zum Beispiel so etwas sein: Ich summiere die Spalte "Preis" auf, und zwar über alle Zeilen an der Stelle. Es geht da nur um reine Geschwindigkeit. Und das hat offensichtlich recht gut funktioniert. Dann kann ich das quasi als gewöhnliches Stored Procedure ebenfalls machen, ja. Das heißt, der Unterschied zwischen dem und dem hier unten ist einfach, dass das eine normale Stored Procedure ist und das eine Natively Compiled Procedure und dann kann ich quasi Testläufe laufen lassen. Ich kann das einmal mit der gewöhnlichen Stored Procedure, oder Moment, die Zwei ist die Natively Compiled Procedure, mit der gewöhnlichen Stored Procedure und der Ad-hoc-Abfrage ausführen. Das kann ich jetzt hier einfach mal an der Stelle zusammen laufen lassen und schauen, was entsprechend herauskommt. Erst einmal die Summe, die geliefert wird. Die ist in allen drei Fällen gleich, das ist schon einmal ein gutes Zeichen, und ich kann dann sehen, wie die Ausführungszeiten an der Stelle wirklich sind. Es sind nicht genau die gleichen Werte, wie sie auch auf der Folie zu sehen sind, aber letztendlich kann ich doch erkennen, dass der erste Ansatz mit der Natively Compiled Procedure auf jeden Fall der schnellste Ansatz war. So. Damit kann ich zumindest das erst einmal so als kleine Einführung abschließen. Was ich Ihnen allerdings noch zeigen möchte, ist der Code, der dahinter liegt, und ich kann Folgendes machen: Ich kann hingehen, wenn ich nicht weiß, wo meine Medien in der Datenbank liegen, dann kann ich hier auf "Database Settings" gehen, dann kann ich diesen Ordner öffnen. Na, brauche ich den Explorer für, gehe entsprechend in diesen Ordner hinein. Normalerweise habe ich darauf keinen Zugriff, als Administrator verschaffe ich mir den Zugriff. Und ich habe hier einen Ordner, der "xtp" heißt, auch da kann ich mir den Zugriff gestatten, kriege dann hier Namen, die einfach nur solche Nummern sind. Ich kann mir natürlich jetzt behelfen, indem ich einfach sortiere und gucke nach dem entsprechenden Datum, auch dort hineingehe und da finde ich dann genau diesen Code an der Stelle und sehe, das ist alles relativ frisch. Ich kann also hingehen und zum Beispiel so eine Datei öffnen. Sie sehen schon, der erkennt das hier als C-Code und wenn ich das entsprechend öffne, dann sehen Sie, ist das der Code, in den mein T-SQL umgebaut wurde. Sicherlich nichts, mit dem man in irgendeiner Form tiefer etwas anfangen kann, vermute ich einmal. Soll aber zeigen, dass in der Tat diese Umsetzung von T-SQL nach C durchaus funktioniert. Ich vermute mal, die Väter der C-Sprache werden sich das wahrscheinlich nie im Traum gedacht haben, dass eine Datenbankabfragensprache irgendwann einmal als Quelle für ihren Code dient, aber, na ja, so entwickelt sich die Zeit halt. Und Sie sehen hier entsprechend, jede einzelne Code-Datei entspricht einer Object-Datei, entspricht einer DLL und das ist das, was entsprechend, also hier unten in der Output-Datei, die entsprechend dann in den Prozessbereich des SQL-Servers gemappt werden. Eine ganz nette Sache. Die "8" hier an der Stelle, ich kann einmal heruntergehen, sollte der Datenbank-ID der Datenbank, in der ich unterwegs bin, entsprechen. Sie sehen, durch die "DB_ID"-Funktion bekomme ich auch hier eine "8" geliefert. Das heißt, das ist nichts anderes als letztendlich die interne ID der Datenbank und Sie sehen auch hier, es gibt offensichtlich mindesten drei weitere Datenbanken, die entsprechend auch die Natively Compiled Procedures haben.

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!