Posts

Showing posts from September, 2017

SQL Server In-Memory OLTP - max() vs. ident_current()

Image
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_olddeclare @i int = rand()*@max
select * from t1_old
where id >= @i and id <= @i+rand()*250Sehr 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. Nicht schlecht für…