Skip to content

Ankündigung: SQL Server Konferenz 2016 in Darmstadt

Ich freue mich, im kommenden Jahr auf der deutschen SQL Server Konferenz, die vom 23.-25. Februar 2016 in Darmstadt stattfindet, als Sprecher dabei zu sein.

Die Konferenz selbst beginnt mit einem Workshoptag, dem zwei Tage mit parallel stattfindenden Tracks zu verschiedenen Themen aus den Bereichen Administration, Entwicklung, Business Intelligence, Azure Data Platform und Information Management folgen. Als Referenten sind ca. 50 Speaker aus dem In- und Ausland im Einsatz. Workshoptag und Hauptkonferenz sind auch separat buchbar.

Bei meinem eigenen Vortrag wird es um das Thema Datenqualität gehen. Dabei werden verschiedene Ansätze aufgezeigt, wie man mit den Mitteln, die SQL Server in den verschiedenen Versionen (bis hin zu SQL Server 2016) zur Verfügung stellt, eine möglichst gute Datenqualität erreicht. Dabei wird stets die Praxistauglichkeit im Vordergrund stehen. Es geht also weniger darum, was alles theoretisch machbar ist, sondern eher, wie man mit vertretbarem Aufwand die bestmögliche Datenqualität erzielt.

Weitere Informationen zur Konferenz gibt es auf der offiziellen Veranstaltungswebsite: http://sqlkonferenz.de

PASS2016_300x100

 

Index-Vortrag bei den Frankfurter IT-Tagen 2015

IT-Tage_300x250-Sprecher

Am 14.12.2015 werde ich bei den IT-Tagen in Frankfurt mit einem Vortrag zum Thema SQL Server Indizes vertreten sein. Dabei werde ich einen Überblick über die verschiedenen Indextypen geben, die SQL Server zur Verfügung stellt und werde auch Kriterien aufzeigen, anhand derer man entscheiden kann, für welchen Einsatzweck welche Indexform am besten geeignet ist.

Details zum Vortrag: http://www.informatik-aktuell.de/seminare/it-tage-datenbanken-2015/sql-server-indizes-verschiedene-varianten-im-ueberblick.html

Die IT-Tage mit Schwerpunkt Datenbanken in Frankfurt finden vom 14.-18.12.2015 im Maritim Hotel an der Frankfurter Messe statt. Nähere Infos zur Veranstaltung sind auf der Website des Veranstalters zu finden: http://www.informatik-aktuell.de/seminare/it-tage-datenbanken-2015.html

Ergänzung vom 23.12.2015:

Mittlerweile sind auf der Website des Veranstalters auch die Slides zu den einzelnen Vorträgen zu finden: http://www.informatik-aktuell.de/seminare/it-tage-datenbanken-2015/download-praesentationen-it-tage-2015.html

 

BASTA! Nachlese

BASTA! 2015

Die diesjährige Herbst-BASTA! ist vorüber. 3 Tage Konferenz + 2 Workshoptage, wobei von den Konferenztagen an einem Tag einer der insgesamt 9 Vortragssääle von Morgens bis Abends SQL Server-Themen gewidmet war.

Darunter auch mein Vortrag zum Thema SQL Server Indizes, an dem immerhin über 70 Leute teilgenommen haben. Die Präsentation dazu kann hier heruntergeladen werden: SQL Server Indizes gestern und heute

Weitere Infos zur Veranstaltung gibt es auf der offiziellen Veranstaltungs-Website: http://www.basta.net

Die Vorbereitungen für die nächsten Konferenzvorträge laufen bereits …

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.

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.