Skip to content

BASTA! vom 28.09.-02.10.2015 in Mainz

BASTA_Herbst_2015_Promobutton_speaker_ContentAd_28714_v2

Ich freue mich, auch in diesem Jahr wieder auf der BASTA! in Mainz mit einem Vortrag vertreten zu sein.

Und zwar gebe ich am Donnerstag von 10:15 bis 11:30 Uhr einen Überblick über die inzwischen doch recht zahlreichen verschiedenen Indextypen, die SQL Server zur Verfügung stellt und beleuchte dabei deren Besonderheiten. Dabei werden auch Kriterien aufgezeigt, anhand derer man entscheiden kann, für welchen Einsatzweck welche Indexform geeignet ist.

Details zum Vortrag: https://basta.net/2015/sessions/sql-server-indizes-gestern-und-heute-verschiedene-varianten-im-vergleich

Die BASTA! läuft wie gewohnt ganze 5 Tage wovon am Pre-Conference-Day (Montag) und Post-Conference-Day (Freitag) ganztägige Workshops angeboten werden, während der Rest der Konferenz mit meist 75-minütigen Vorträge aus verschiedenen Bereichen rund um .NET, Windows und Javascript gefüllt ist. Weitere Infos zur Veranstaltung gibt es auf der offiziellen Veranstaltungs-Website: http://www.basta.net

Tipps & Tricks: Bedeutung und Wartung von Indexstatistiken

“Traue keiner Statistik, die Du nicht selbst aktualisiert hast!”

Eigentlich jedem, der sich etwas intensiver mit SQL Server Datenbanken beschäftigt, ist die hohe Bedeutung von Indizes für performante Datenbankabfragen bewusst. Was aber oft und gerne vernachlässigt wird, sind die Indexstatistiken.
Diese speichern Informationen über die Werteverteilung der indizierten Spalten und müssen – genau wie die Indizes selbst – regelmäßig gewartet werden. Eine veraltete Indexstatistik kann nämlich leicht dazu führen, dass der dazu gehörende Index einfach nicht verwendet wird.

Ähnlich wie bei der Indexwartung, die entweder per Reorganize oder aber per Rebuild durchgeführt werden kann, stehen auch für Indexstatistiken verschiedene Varianten zur Wartung zur Verfügung. Die gründlichere aber auch zeitaufwändigste Variante ist die Statistikerstellung per FULLSCAN. Hier werden die gesamten Indexdaten eingelesen und daraufhin die Statistik aktualisiert. In den meisten Fällen reicht jedoch auch eine Statistikaktualisierung auf Basis von Stichproben (SAMPLED) aus. Hierbei wird nur ein Teil der Indexdaten gelesen und der Rest quasi hochgerechnet.

(Wenn ein Index mittels Rebuild neu aufgebaut wird, werden auch die dazu gehörenden Indextstatistiken quasi im Vorbeimarsch per Fullscan aktualisiert, da die Indexdaten ohnehin komplett gelesen werden müssen.)

Bei ungleichmäßiger Verteilung der Indexwerte kann eine stichprobenbasierte Indexstatistik jedoch auch dazu führen, dass der Index nicht optimal oder unter Umständen auch gar nicht genutzt wird. Denn wenn die gewählte Stichprobe nicht repräsentativ für die Mehrzahl der Daten ist, wird von einer falschen Verteilung der Daten ausgegangen.
Das ist auch einer der Gründe, warum die Datenbankoption “Statistiken automatisch aktualisieren” nicht zu empfehlen ist. Hier werden nämlich – sobald bestimmte Grenzwerte bzgl. Alter der Statistik und Änderungen in der Tabelle überschritten sind – die Indexstatistik generell stichprobenbasiert aktualisiert. Stattdessen macht es mehr Sinn, auch Indexstatistiken gezielt mit Hilfe von SQL Server Agent Jobs zu aktualisieren, wodurch man diese Wartungsaufgaben auch in Zeiten mit geringer Systemlast (Nachts oder am Wochenende) verlagern kann. Nun kann man bei kleineren Datenbanken leicht eine Routine entwickeln, die anhand der Systemtabelle sys.objects die Statistiken jeder Tabelle mit der FULLSCAN-Option aktualisert. Spätestens bei etwas größeren Datenbanken kann dieses Vorgehen aber leicht das nächtliche Wartungsfenster sprengen.

Daher empfehle ich folgende Strategie für die Wartung von Indexstatistiken:

  1. Statistiken zu Indizes auf Identity-Spalten können täglich (genaue: jede Nacht) strichprobenbasiert erstellt werden, da Identity-Werte automatisch gleichmäßig verteilt sind (sofern nicht übermäßig viele Zeilen in einem Bereich der Tabelle gelöscht werden).
  2. Alle anderen Indexstatistiken sollten generell mit FULLSCAN neu erstellt werden.
  3. Um das Wartungsfenster unter der Woche möglichst klein zu halten, werden am Wochenende alle Indexstatistiken mit FULLSCAN neu erstellt.
  4. Unter der Woche werden nur die Statistiken zu Indizes, deren Daten sich stark geändert haben, täglich mit FULLSCAN neu aufgebaut. Als Ausgangswert für die jeweiligen Schwellwerte kann man sich hier an den Parametern orientieren, die Microsoft auch für die automatische Statistikaktualisierung nutzt:
    • mindestens 50.000 Zeilen in der Tabelle
    • mindestens 20% geänderte Zeilen
    • mindestens 500 geänderte Zeilen (ist aufgrund der anderen beiden Bedingungen ohnehin erfüllt)

Natürlich kann man sowohl die Schwellwerte als auch die Häufigkeit der Aktualisierungen individuell anpassen. Es handelt sich hier lediglich um Startwerte, die für viele Datenbanken einen sinnvollen Kompromiss zwischen Wartungsaufwand und Aktualität der Statistiken darstellen.

Um die Statistiken, deren Tabellen, Indizes und Änderungswerte zu ermitteln kann man folgende Abfrage verwenden:

SELECT
sch.name AS [Schemaname],
obj.name AS [Tablename],
s.name AS [Statisticname],
STATS_DATE(s.[object_id],s.[stats_id]) AS [StatisticUpdateDate],
sp.[rows],
sp.rows_sampled,
sp.modification_counter
FROM sys.stats s
INNER JOIN sys.objects obj ON s.object_id = obj.object_id
INNER JOIN sys.schemas sch ON obj.schema_id = sch.schema_id
LEFT JOIN sys.indexes i ON i.object_id = obj.object_id AND i.index_id = s.stats_id
CROSS APPLY sys.dm_db_stats_properties (obj.object_id, s.stats_id) AS sp
WHERE
obj.type = 'U'
ORDER BY
s.name

Diese Abfrage durchläuft man dann mit einem SQL Cursor und führt pro Zeile die entsprechende UPDATE Statistics-Anweisung aus:

EXEC ('UPDATE STATISTICS [' + @Schemaname + N'].[' + @Tablename + N'] [' + @Statisticname + '] WITH FULLSCAN')

Von diesem Ablauf müssen nun nur noch anhand der oben beschriebenen Kriterien für die Fälle 1 bis 4 unterschiedliche Varianten erstellt werden, die in die jeweiligen SQL Server Agent Jobs kommen. Das einzige was hierbei nicht ganz offensichtlich ist, ist die Erkennung von Statistiken zu Indizes auf Identity-Spalten. Da sich die Namen von Statistiken aber an denen der dazu gehörenden Indizes orientieren, sind diese leicht von den anderen zu unterscheiden, sofern man sich an entsprechende Namenskonventionen gehalten hat (z.B. “PK” als Präfix für Primärschlüssel, “IX” für normale Indizes).

“SQL Server Performance-Ratgeber” zum Sonderpreis – Nur noch wenige Exemplare verfügbar!

Mein Buch “SQL Server Performance-Ratgeber: Datenbank-Optimierung für Architekten, Entwickler & Administratoren” ist fast vergriffen (über eine aktualisierte Neuauflage wird bereits nachgedacht). Der Verlag hat mir freundlicherweise die letzten Exemplare zur Verfügung gestellt, die ich nun zum deutlich reduzierten Preis anbieten kann. (Alles natürlich mit offizieller Rechnung inkl. ausgewiesener Mehrwertsteuer.)

Wer sich also eines der letzten Exemplare (quasi direkt vom Autor) sichern will, sollte sich also möglichst schnell (am besten per Mail an buch@panthersql.de) bei mir melden, denn es sind jetzt bereits nur noch ca. 70 Exemplare übrig.

sqlserverperformanceratgeber

Robert Panther
SQL Server Performance-Ratgeber: Datenbank-Optimierung für Architekten, Entwickler & Administratoren
entwickler.press
292 Seiten (Softcover)
ISBN: 978-3-86802-030-4
alter Preis: 39,90 € inkl. MwSt.
Sonderpreis: 9,90 € inkl. MwSt. (zzgl. 3,- € Versandkosten)

Neuer Datentyp für SQL Server vNext

Wieder einmal sind aus gut informierten Kreisen ein paar Details zu einem möglichen neuen Feature für die nächste Version von SQL Server bekannt geworden. Während allgemeine Trends wie bessere Performance, höhere Verfügbarkeit und bessere Cloud Integration sicherlich weiter fortgesetzt werden, ist dieses Feature für die meisten eher überraschend:

Neuer Datentyp: FUZZYBIT

Während der altbekannte Datentyp BIT nur eine zwei- (TRUE/FALSE) bzw. dreiwertige (TRUE/FALSE/NULL) Logik abbildet, sind mit dem neuen Datentyp FUZZYBIT auch Zwischenwerte möglich. Der Wert NULL erlaubt es ja heute bereits, einen unbekannten Wert zu repräsentieren. Mit dem FUZZYBIT kommen nun noch die Zwischenstufen LIKELY (wahrscheinlich) und UNLIKELY (unwahrscheinlich) dazu, so dass sich daraus eine sogenannte fünfwertige Logik ergibt. Um das Wording durchgehender zu gestalten, kann man anstelle von NULL auch das neue Schlüsselwort UNKNOWN verwenden, so dass sich damit insgesamt folgende Abstufungen ergeben:

TRUE – LIKELY – UNKNOWN – UNLIKELY – FALSE

Mit diesem neuen Datentyp wird es künftig einfacher möglich sein, Erkenntnisse aus unstrukturierten Big Data Datenquellen in einem relationalen Data Warehouse abzulegen.

Der Name FUZZYBIT leitet sich aus dem Begriff “Fuzzy Logic” ab, der ebenfalls für eine stärkere Differenzierung der zweifachen Booleschen Logik steht. Offen ist bisher noch, ob das Prinzip der Fuzzy Logic auch auf andere Datentypen ausgeweitet wird.

BASTA! vom 22.-26. September 2014 in Mainz

Auch in diesem Jahr bin ich wieder auf der BASTA! in Mainz als Speaker im Einsatz.

Bereits am Dienstag halte ich von 10:00 bis 11:15 Uhr einen Vortrag zum Thema Performante Datenbankzugriffe mit T-SQL, in dem ich altbewährte aber auch neuere Methoden vorstellen will um effektive SQL-Abfragen zu schreiben.

Am Mittwoch unterstütze ich meinen Kollegen von 14:00 bis 15:15 Uhr Florian Nattermann bei seinem Vortrag zum Thema In-Memory Datenbanken vs. Columnstore Index, in dem er diese beiden neuen Technologien gegenüberstellt.

Die BASTA! läuft wie gewohnt ganze 5 Tage wovon am Pre-Conference-Day (Montag) und Post-Conference-Day (Freitag) ganztägige Workshops angeboten werden, während der Rest der Konferenz mit meist 75-minütigen Vorträge aus verschiedenen Bereichen rund um .NET, Windows und Javascript gefüllt ist. Weitere Infos zur Veranstaltung gibt es auf der offiziellen Veranstaltungs-Website: http://www.basta.net

BASTA! Herbst 2014 Speakerbutton 2

Bericht: SQL Saturday in Sankt Augustin

Am 28.06. veranstaltete die PASS zum dritten Mal einen SQL Saturday in Deutschland. Dabei wurde zum zweiten Mal die Hochschule Bonn-Rhein-Sieg in Sankt Augustin als Veranstaltungsort gewählt. Die gute Erreichbarkeit mit dem Auto sowie (am Wochenende) ausreichenden Parkplatzmöglichkeiten sprechen für den Veranstaltungsort. Lediglich die etwas unbequemen Hochschul-Sitzbänke hinterließen einen suboptimalen Eindruck, der durch die qualitativ hochwertigen Vorträge aber mehr als wettgemacht wurde. So fanden sich dann auch ca. 250 Teilnehmer ein, die sich die 30 Vorträge (verteilt auf 5 parallele Tracks zu den Bereichen BI, DBA, Development, Mixed und Open) anhörten. Unter den Speakern waren viele international renommierte Experten, bekannte Buchautoren und MVPs vertreten, darunter Scott Klein, Andreas Wolter, Dr. Holger Schwichtenberg, Dejan Serka, Chris Testa-O’Neill, Matija Lah, Uwe Ricken, Christoph Muthmann, Oliver Engels, Konstantin Klein (um nur einige zu nennen). Die Vorträge deckten verschiedene Themenbereiche und Niveaus ab, so dass für jeden sicherlich etwas Interessantes dabei war. Zwischen den Vorträgen gab es Gelegenheit sich bei den verschiedenen Sponsoren der Veranstaltung über deren Produkte aus dem SQL Server Umfeld zu informieren. Zum Abschluss der Veranstaltung gab es noch diverse Verlosungen der Sponsoren, so dass sich viele Teilnehmer über diverse Sachpreise (vom Buch bis hin zu Hardware) freuen konnten. Doch bereits am Vortag der Veranstaltung trafen sich bereits einige SQL-Enthusiasten an der Hochschule um sich beim Big Data Hackathon intensiv mit Microsoft BigData-Technologien wie HDInsight und PowerBI (PowerQuery, Power View, Power Map und andere) auseinanderzusetzen.

Insgesamt war dieser SQL Saturday eine runde Veranstaltung, die jedem zu empfehlen ist. Schließlich gibt es nicht oft die Möglichkeit quasi zum Nulltarif an so viele interessante Informationen zu kommen. Auf der Website zur Veranstaltung kann man sich zu einigen Vorträgen die PowerPoint-Slides ansehen: http://www.sqlsaturday.com/313/eventhome.aspx

Beim SQL Saturday handelt es sich um eine Veranstaltungsreihe, die von der Professional Association for SQL Server (kurz PASS), weltweit durchgeführt wird. Das Besondere an dieser Veranstaltung ist, dass keinerlei Teilnahmegebühr erhoben wird, die Veranstaltung also komplett durch Sponsoren finanziert wird. Dafür, dass die Teilnehmer einen Samstag Freizeit opfern, bekommen diese hochkarätige Vorträge zu allen möglichen Themen rund um SQL Server von ausgewiesenen Experten zu hören (darunter viele MVPs).

Neues Buch zur Optimierung von SQL-Abfragen

Bei entwickler.press ist gerade mein neues Buch – oder genauer Büchlein – zum Thema Optimierung von SQL-Abfragen erschienen. Das Buch erklärt in kompakter Form am Beispiel von Microsoft SQL Server, wie man performante SQL-Abfragen formuliert. Dabei wird auch auf die verschiedenen Möglichkeiten hingewiesen, die verschiedene Versionen des Produkts (bis hin zu SQL Server 2014) bieten. Viele Optimierungsansätze sind jedoch auch auf SQL-basierte Datenbank-Management-Systeme anderer Hersteller anwendbar. Auch wenn der Text sich primär an Anwendungs- und Datenbankentwickler richtet, dürfte der Inhalt auch für Administratoren interessant sein, zumal die Praxisbeispiele auch diesen Teil mit abdecken.
Das Buch ist bewusst kompakt gehalten und bildet eine auf SQL-Optimierung konzentrierte (aber auch aktualisierte und um neue Inhalte ergänzte) Teilausgabe meines – ebenfalls bei entwickler.press erschienenen – SQL Performance-Ratgebers.

SQL-Abfragen optimieren

Robert Panther
SQL-Abfragen optimieren
Was Entwickler über Performance wissen müssen
entwickler.press
176 Seiten (Softcover)
ISBN: 978-3-86802-123-3
Preis: € 12,90 inkl. MwSt.

Alternativ auch als eBook erhältlich:

PDF-ISBN: 978-3-86802-310-7
PDF-Preis: 9,99 €

EPUB-ISBN: 978-3-86802-650-4
EPUB-Preis: 9,99 €

Weitere Infos:

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.