A SQL Server Pro from Hamburg, Germany with a passion for OLTP databases, automated workload tests, and a fan of risk- & change-management approaches for development- & operations-teams.
Data Vault in der Praxis Vortrag von der SQL Server Konferenz 2015 in Darmstadt
As more and more of our customers communicate with us in English, I decided to start blogging in English. So for my "new" readers here is a small introduction to what I do with SQL Server and other similar technologies. Originally I'm a developer, who is gradually immersed in various database technologies. I have been working with databases for more than 30 years now. I started my own business with my partners in 1994. Then, in the late 1990s, I discovered the vast possibilities of Microsoft SQL Server for our customers. Our office is in Hamburg, and since 2017 we also have an office in Karlsruhe in the south of Germany. The company name "Projekt Service" expresses what we do most of the time. We support projects of any kind, as long as they are related to SQL Server or databases in general, with our products. A plan can actually mean the classic long-running project as well as a short-term action to eliminate unwanted impact in development or operation. W
Wenn ich Diskussionen über die Entscheidung für eine ETL oder ELT Architektur führe oder auch nur moderiere, dann bringe ich als ein mögliches Beispiel für eine ELT Architektur gerne die Verwendung des MERGE Befehls. Nur wenige scheinen diesen Befehl bisher aktiv zu nutzen, dabei ist er schon seit SQL Server 2008 dabei und gehört auch zum SQL:2008 Standard! Was macht nun der Befehl MERGE? Laut den BOL das hier: “Führt Einfüge-, Aktualisierungs- oder Löschvorgänge in einer Zieltabelle anhand der Ergebnisse eines Joins mit einer Quelltabelle aus. Sie können z. B. zwei Tabellen synchronisieren, indem Sie Zeilen in einer Tabelle anhand von Unterschieden, die in der anderen Tabelle gefunden wurden, einfügen, aktualisieren oder löschen.” Und damit ist er perfekt geeignet für den Ladeprozess von Dimensionen in Data Warehouse/BI Projekten. Denn dort benötigen wir ja sowohl ein INSERT als auch ein UPDATE für unsere Geschäftsobjekte in den Dimensionen. Ok, und ganz selten mal ein DELETE,
Während eines Performance Driven Development Advanced Trainings kam eine interessante Fragestellung auf. Die Aufgabenstellung war einen einfachen lesenden Workload zu erzeugen, um die Geschwindigkeit von In-Memory OLTP zu testen. Folgender Code wurde vorgeschlagen: declare @max int select @max = max(id) from t1_old declare @i int = rand()*@max select * from t1_old where id >= @i and id <= @i+rand()*250 Sehr unverdächtig! Das offensichtliche Problem in der Where Clause lassen wir für den Moment mal unkommentiert. Das lösen wir weiter unten noch auf. Ich fand den Vorschlag ganz okay, da er echte Probleme der Qualität von T-SQL Code aufzeigte. Die physikalische Struktur hinter t1_old ist ein Clustered Index mit der ID als Clusterkey. Ein Test mit einer interaktiven Variante unseres Werkzeuges SQLPressure ergab, bei einer Steigerung von 20 Threads alle 5 Sekunden, dass sich der Workload bei 300 Threads mit einem Durchsatz von ungefähr 5000 einpendelt.