Sonntag, 6. April 2014

Löschen von Daten aus Heap gibt Datenseiten nicht frei

Wenn alle Datensätze aus einem Heap gelöscht werden, mag man meinen, dass Microsoft SQL Server nach dem Löschvorgang auch die allozierten Datenseiten wieder frei gibt. Das macht der Microsoft SQL Server jedoch nur, wenn bestimmte Voraussetzungen vorhanden sind wie der nachfolgende Artikel zeigt.

Dienstag, 1. April 2014

Berater / DBA / DEV – Dokumentation ist eine Hauptleistungspflicht!

Mit diesem Artikel möchte ich die technischen Berater für Microsoft SQL Server, DBAs und Entwickler erreichen, die täglich bei den Kunden sind, um technische Probleme zu analysieren und zu lösen. Der folgende Artikel beruht auf einem aktuellen Projekt. Ich wurde zu diesem Projekt hinzu gezogen, weil die technischen Analysen meines Vorgängers nicht ausreichend waren, um Probleme zu erkennen und zu beheben. Um mich mit dem Thema im Vorfeld beschäftigen zu können, habe ich um vorhandene Dokumentation(en) gebeten. Die dann zugesendeten Dokumente waren den Namen nicht wert, wie einige Auszüge im Artikel zeigen werden. Gleich Eines vorweg – es soll hier kein Finger Pointing stattfinden – ich möchte aufzeigen, welche Minimalanforderungen aus meiner Sicht an eine Analysedokumentation gestellt werden sollten.

Sonntag, 23. März 2014

Tabellenvariablen – Mythos der Datenverarbeitung im Buffer Pool

Ich hatte am 22.03.2014 in Nürnberg während der SNEK (SQL Server + .NET Entwickler Konferenz) die Gelegenheit, nach meinem Vortrag ein interessantes Gespräch führen können, in dem unter anderen behauptet wurde, dass Tabellenvariablen Objekte seien, deren Datenoperationen (INSERT/UPDATE/DELETE)  im Buffer Pool – und somit im RAM – stattfinden und daher ein Grund für die bevorzugte Wahl von Tabellenvariablen sei. Diese Aussage ist nicht richtig wie der nachfolgende Artikel zeigen soll.

Mittwoch, 19. März 2014

Wie viele Datensätze passen auf eine Datenseite

Es versteht sich von selbst, dass diese Frage eher akademischer Natur ist und mehr dem Spaß am Ausprobieren gewidmet ist. Dennoch wurde diese Frage auf LinkedIn gestellt (http://tinyurl.com/q4zuxzc) und ich habe mir einfach mal die Arbeit gemacht, dieser Frage – aus rein akademischer Neugier – nachzugehen. Wer wissen möchte, wie viele Datensätze maximal auf eine Datenseite in einer Datenbank von Microsoft SQL Server 2012 passen, dem wünsche ich viel Spaß beim Lesen.

Montag, 24. Februar 2014

Performancevorteile durch Instant File Initialization

Beim Anlegen von Datenbankdateien (Daten, Log) werden standardmäßig die zu erstellenden Dateien beim Initialisieren mit 0 aufgefüllt, damit eventuell auf dem Datenträger zurückgebliebene Daten von vorherigen (gelöschten) Dateien überschrieben werden. Dieses Verfahren betrifft nicht nur das Erstellen neuer Datenbanken sondern auch die Wiederherstellung von Datenbanken aus einem Backup oder die stetige Vergrößerung einer Datenbank. Welchen Einfluss diese Vorgänge auf die Leistung von Microsoft SQL Server hat, beschreibt der nachfolgende Artikel.

Dienstag, 4. Februar 2014

Eigene Systemprozeduren im Kontext der aktuellen Datenbank nutzen

Während der Vorbereitungen zu meinem Vortrag “DMO für die Analyse von Indexen” für die SQL Server Konferenz 2014 in Darmstadt wollte ich es mir einfach machen und eine Stored Procedure für die Ausgabe der Analyse programmieren, die in jeder Benutzerdatenbank verwendet werden kann. Dieser Prozedur wird nur noch der Name des zu analysierenden Objekts sowie die Index Id für die Ausgabe übergeben. Während der Tests gab es jedoch Schwierigkeiten, weil ein Aufruf in der Demo-Datenbank keine Daten lieferte. Die Ursache war schnell gefunden; einige Objekte in der Prozedur wurden im Kontext der master- Datenbank ausgeführt. Wie man eine Prozedur dazu veranlassen kann, dass sie trotz Speicherung in der master-Datenbank immer im Kontext der aktuellen Datenbank ausgeführt wird, zeigt dieser Artikel.

If you pay peanuts …

Beim Stöbern in Projektangeboten, die in den einschlägigen Netzwerken und Projektbörsen angeboten werden, bin ich auf ein Angebot aufmerksam geworden, das ich sehr interessant fand. Die Ausschreibung umfasste die folgenden Merkmale (Auszug):

  • Gewährleistung eines verlässlichen und kosteneffizienten Betriebs der vorhandenen MS SQL Server- Systeme
  • Spezialkenntnisse im Bereich MS SQL Server
  • praktische administrative Erfahrungen im 2nd und 3rd Level Support für MS SQL Server
  • Gute Kenntnisse der MS SQL Server Architektur und Administration, möglichst einschließlich spezieller Features wie Log Shipping, Replikation, DB Mirroring, Cluster und DTS/SSIS

Montag, 3. Februar 2014

Tabellarische Darstellung von IO Statistiken

Mehr durch Zufall bin ich auf eine sehr interessante Webseite gestoßen, die im täglichen Geschäft mit Microsoft SQL Server bei einem DBA / Entwickler nicht fehlen darf. Jeder SQL Experte, der schon einmal Ausführungspläne analysieren musste, ist unweigerlich mit dem I/O konfrontiert worden, das durch die Abfrage generiert wird. Das Ergebnis wird anschließend in einem Meldungsfenster angezeigt. Nun sind die Daten nicht gerade benutzerfreundlich angeordnet und man muss sich mühsam durch das Ergebnis lesen. Die nachfolgende Abfrage – aus AdventureWorks2012 – liefert das folgende Ergebnis für den produzierten I/O:

-- Ausgabe des IO aktivieren
SET STATISTICS IO ON;
 
SELECT  CAST (CONVERT(char(6), h.OrderDate, 112) + '01' AS datetime)    AS OrderMonth,
        SUM(h.TotalDue)                                                 AS TotalAmt,
        COUNT(d.SalesOrderDetailID)                                     AS ProductLines
FROM    sales.SalesOrderHeader h INNER JOIN sales.SalesOrderDetail d
        ON (h.SalesOrderID = d.SalesOrderID)
WHERE   OrderDate >= '20050101' AND
        OrderDate < '20060101'
GROUP BY
        CAST (CONVERT(char(6), h.OrderDate, 112) + '01' AS datetime)
 
-- Ausgabe des IO deaktivieren
SET STATISTICS IO OFF;

Das Ergebnis dieser Abfrage – in Bezug auf IO – ist schlecht lesbar und man muss sich durch die Ergebnisse “quälen”.

IO_UNTABELLARISCH

Um das Ergebnis leichter lesbar und besser aufbereitet zu präsentieren, gibt es von Richie Rump (blog | twitter) eine fantastische Webseite, in die das Ergebnis nur noch in eine dafür vorbereitete Textbox kopiert werden muss. Unter http://www.statisticsioparser.com/statisticsioparser/index.html kann man diesen tollen Parser finden.

IO_TABELLARISCH

Coole Sache. Herzlichen Dank an Richie. Eine – aus meiner Sicht – tolle Entwicklung wenn man nur die Management Konsole für Microsoft SQL Server zur Verfügung hat.

Herzlichen Dank fürs Lesen!

Dienstag, 24. Dezember 2013

Frohes Weihnachtsfest und einen guten Rutsch in das Jahr 2014

Ich möchte allen Lesern meines SQL Server Blogs ein frohes und besinnliches Weihnachtsfest wünschen verbunden mit den besten Wünschen für das kommende Jahr 2014. Ich danke allen interessierten Lesern, die dazu beigetragen haben, dass mein Blog in einem Jahr über 30.000 Mal aufgerufen wurde. Ich hoffe, dass die Themen für das Jahr 2013 gut gewählt waren und der eine oder andere “Tipp” in eigene Systeme implementiert werden konnte.

Montag, 23. Dezember 2013

SORT IN TEMPDB – teure (aber vermeidbare) Operation

In der letzten Woche bekam ich während eines Kurzprojekts eine Anfrage auf den Schreibtisch, in dem sich der betroffene Geschäftsbereich bei den SQL Server Administratoren beschwert, dass eine Abfrage mit unterschiedlichen Parameterwerten mal sehr schnell lief und dann wieder sehr langsam die Daten verarbeitete. Zunächst dachte ich an “Parameter Sniffing” jedoch war die Ursache viel komplexer als gedacht.