Kategorie: "Optimierung / Performance"

Inside sys.dm_db_index_physical_stats

Ich habe in dieser Woche einen Fall zu untersuchen gehabt, der ein System für mehrere Stunden (teilweise sogar Tage) komplett lahm gelegt hat. Die Analyse hat gezeigt, dass (unter anderem) regelmäßige Index- und Statistikaktualisierungen durchgeführt wurden. Was ich dann herausgefunden habe, mag man kaum glauben. In diesem konkreten Beispiel wurden wirklich ALLE Fehler gemacht, die man in Verbindung mit sys.dm_db_index_phyical_stats und dessen Anwendungsspektrum überhaupt machen kann.

Ganze Geschichte »

CTE, Tabellenvariablen und temporäre Tabellen

In einem zu implementierenden Projekt ging es darum, den vom Programmierer gewählten “zeilenorientierten” Lösungsansatz zu untersuchen und gegebenenfalls zu optimieren. Hintergrund war die Aufgabe, für jeweils einen Monat eine Analyse über Einkaufszahlen in den Reporting Services zu erstellen. Basis des Reports ist eine Stored Procedure, die ich auf Performanceprobleme zu untersuchen hatten. Das Ergebnis der Untersuchung war mehr als überraschend. Lernen Sie im nachfolgenden Artikel die unterschiedlichen Lösungsansätze unter Verwendung von CTE in einer Tabellenfunktion, Tabellenvariablen und temporären Tabellen kennen.

Ganze Geschichte »

Optimierung von Datenbankmodellen–SARGable Abfragen

Ich bekam heute eine recht interessante Aufgabe auf den Tisch. Ein Kunde beklagte sich über die schlechte Ausführungsgeschwindigkeit einer Abfrage, der er von einem Programmierer erhalten hatte. Mir wurde der Code für die View zugeschickt und das Problem war sehr schnell gefunden. Statt eines Indexseek hat die Abfrage nur einen Indexscan durchgeführt. Ursache war, das die WHERE-Klausel keine SARGable Argumente verwendete. Mit diesem Artikel möchte ich aufzeigen, was SARGable ist und wie es funktioniert.

Ganze Geschichte »

Tücken bei der Verwendung von sp_executeSQL

Mit Hilfe der Systemprozedur sp_executeSQL werden Transact-SQL-Anweisungen oder -Batches ausgeführt, die bzw. der mehrfach wiederverwendet werden kann oder dynamisch erstellt wurde. Insbesondere wird sp_executeSQL eingesetzt, um kompilierte Pläne für die erneute Verwendung in den Plancache zu laden. Das kann aber auch zu Problemen führen, die der nachfolgende Artikel behandelt.

Ganze Geschichte »

Neue DMV für Aufteilung der Pages

Im Artikel "Optimierung von Datenbankmodellen - Richtige Wahl von Datentypen und Indexen (Teil 2)" habe ich gezeigt, wie man mit dem undokumentierten Befehl DBCC IND in Verbindung mit dem - ebenfalls undokumentierten - Befehl DBCC PAGE die Aufteilung der Daten in den einzelnen Datenseiten (Pages) analysieren kann.

Das Problem von DBCC IND ist jedoch, dass die Ausgabe nicht sortiert werden kann. Also wurde als Workaround eine Tabelle angelegt, in die das Ergebnis von DBCC IND mittels sp_executeSQL in die Tabelle umgeleitet.

Seit der Version von Microsoft SQL Server 2012 gibt es endlich eine - leider auch undokumentierte - DMV, mit deren Hilfe die Aufteilung der Daten ohne DBCC IND ausgegeben und unmittelbar weiterverarbeitet (filtern, sortieren) kann.

Ganze Geschichte »