Latches, Spinlocks, and Lock Free Data Structures€¦ ·...
Transcript of Latches, Spinlocks, and Lock Free Data Structures€¦ ·...
![Page 1: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/1.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at www.SQLpassion.at Bring your SQL Server installa3ons to a new level of excellence!
Latches, Spinlocks, and Lock Free Data Structures
Klaus Aschenbrenner Microsoft Certified Master SQL Server 2008 www.SQLpassion.at Twitter: @Aschenbrenner
![Page 2: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/2.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
About me
• CEO & Founder SQLpassion • International Speaker, Blogger, Author • SQL Server 2008 MCM • „Pro SQL Server 2008 Service Broker“ • Twitter: @Aschenbrenner • SQLpassion Academy
– http://www.SQLpassion.at/academy – Free Newsletter, Training Videos
![Page 3: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/3.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Caution!
If you are latched or spinlocked by the
session, there is always a way to back-off: apply a lock-free operation!
![Page 4: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/4.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Caution!
![Page 5: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/5.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Agenda
• Latches • Spinlocks • Lock Free Data Structures
![Page 6: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/6.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Agenda
• Latches • Spinlocks • Lock Free Data Structures
![Page 7: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/7.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Latches – what are they?
Lightweight Synchroniza1on
Objects Used for Thread Synchroniza1on
Protects internal Data Structures
Can’t be controlled directly
![Page 8: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/8.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Locks vs. Latches
Locks Latches
Controls… Transac1ons Threads
Protects… Database content In-‐Memory Data Structures
During… En1re transac1on Cri1cal sec1on
Modes… Shared, Update, Exclusive, Inten1on
Keep, Shared, Update, Exclusive, Destroy
Deadlock… Detec1on & Resolu1on Avoidance through careful coding techniques
Kept in… Lock Manager’s Hashtable Protected Data Structure
![Page 9: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/9.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Latch Types
Buffer Latches (BUF) • PAGELATCH_*
IO Latches • PAGEIOLATCH_*
Non-‐Buffer Latches (Non-‐BUF) • LATCH_*
![Page 10: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/10.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
BUF-Latches
• Protect all kinds of pages when they are accessed from the Buffer Pool – Data Pages/Index Pages – PFS/SGAM/GAM Pages – IAM Pages
• PAGELATCH_* • Accessible through sys.dm_os_wait_stats
![Page 11: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/11.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
I/O Latches
• Subset of BUF Latches • Used when outstanding I/O operations are done against
pages in the Buffer Pool – Disk to Memory Transfers (Reading) – Memory to Disk Transfers (Writing)
• SQL Server is waiting on the I/O subsystem • PAGEIOLATCH_*
![Page 12: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/12.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Non-BUF Latches
• Guarantees the consistency of any other in-memory structures other than Buffer Pool pages
• LATCH_* • Detailed breakdown in sys.dm_os_latch_stats
![Page 13: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/13.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Demo
Exploring Latches
![Page 14: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/14.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Last Page Insert Latch Contention
Last Page Inserts
EX
SH
SH
![Page 15: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/15.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Current Solutions
• Random Clustered Keys – UNIQUEIDENTIFIER – Distributes the INSERTs across the Leaf Level – Larger Lookup Values in Non-Clustered Indexes… – Index Fragmentation
• Hash Partitioning – Distribute INSERTs across different partitions – Every CPU core has its own partition – You can’t additionally partition your table… – Partition Elimination is almost impossible…
• In-Memory OLTP – SQL Server 2014+
![Page 16: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/16.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Demo
Last Page Insert Latch Contention
![Page 17: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/17.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Agenda
• Latches • Spinlocks • Lock Free Data Structures
![Page 18: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/18.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Why Spinlocks?
How to protect a Latch?
Windows Kernel Objects
Query Life Cycle
Latches don’t scale!
![Page 19: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/19.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Spinlock Internals
• It’s a Mutex (Mutual Exclusion) – No waiting list – No compatibility matrix – You hold the spinlock, or not!
• Used to protect “busy” data structures – Read or written very frequently – Held for a short amount of time – E.g. Lock Manager (LOCK_HASH)
![Page 20: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/20.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Spinlock Contention
• Problem – Tight spinning around a busy data structure – Short waits are expected! – Exponential back-off since SQL Server 2008 R2+
• Symptoms – High CPU usage without performing useful work – High “backoffs” in sys.dm_os_spinlock_stats
![Page 21: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/21.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
LOCK_HASH Example Lock Hash Buckets
U 1 U 2 U 3 U 4 U 5 U 6
Lock Resource = Database ID
![Page 22: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/22.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
LOCK_HASH Example Lock Hash Buckets
U 1 U 2 U 3 U 4 U 5 U 6
Lock Resource = Database ID
Access to the Hash Bucket is protected by a spinlock!
![Page 23: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/23.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
LOCK_HASH Example Lock Hash Buckets
U 1 U 2 U 3 U 4 U 5 U 6
Lock Resource = Database ID
U 10000
Access to the Hash Bucket is protected by a spinlock!
New user requires the spinlock and a long list traversal!
![Page 24: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/24.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Demo
Debugging Spinlock Contention
![Page 25: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/25.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Agenda
• Latches • Spinlocks • Lock Free Data Structures
![Page 26: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/26.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Non-Blocking Algorithms
“A non-blocking algorithm ensures that threads competing for a shared resource do not have their
execution indefinitely postponed by mutual exclusion. A non-blocking algorithm is lock-free if there is guaranteed
system-wide progress regardless of scheduling.” Source: http://en.wikipedia.org/wiki/Non-blocking_algorithm
![Page 27: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/27.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Traditional Spinlocks
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { while (compare_and_swap(&lock, UNLOCKED, LOCKED) != 0) ; /* Do nothing */ /* Critical section */
val = val + 5; lock = UNLOCKED; } while (true); }
![Page 28: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/28.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Traditional Spinlocks
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { while (compare_and_swap(&lock, UNLOCKED, LOCKED) != 0) ; /* Do nothing */ /* Critical section */
val = val + 5; lock = UNLOCKED; } while (true); }
We want to execute this code in a thread-‐safe manner!
![Page 29: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/29.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Traditional Spinlocks
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { while (compare_and_swap(&lock, UNLOCKED, LOCKED) != 0) ; /* Do nothing */ /* Critical section */
val = val + 5; lock = UNLOCKED; } while (true); }
Implemented through one atomic hardware instruc1on: CMPXCHG
![Page 30: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/30.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Traditional Spinlocks
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { while (compare_and_swap(&lock, UNLOCKED, LOCKED) != 0) ; /* Do nothing */ /* Critical section */
val = val + 5; lock = UNLOCKED; } while (true); }
Implemented through one atomic hardware instruc1on: CMPXCHG
There is a shared resource involved!
![Page 31: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/31.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Traditional Spinlocks
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { while (compare_and_swap(&lock, UNLOCKED, LOCKED) != 0) ; /* Do nothing */ /* Critical section */
val = val + 5; lock = UNLOCKED; } while (true); }
Implemented through one atomic hardware instruc1on: CMPXCHG
There is a shared resource involved!
If one thread holds the spinlock, and gets
suspended, we get stuck in the loop!
![Page 32: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/32.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Lock Free Approach
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { val = *addr; } while (compare_and_swap(&addr, val, val + 5) != 0) }
![Page 33: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/33.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Lock Free Approach
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { val = *addr; } while (compare_and_swap(&addr, val, val + 5) != 0) }
We just check if someone has modified “addr” before we make the atomic addi1on
![Page 34: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/34.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Lock Free Approach
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { val = *addr; } while (compare_and_swap(&addr, val, val + 5) != 0) }
We just check if someone has modified “addr” before we make the atomic addi1on
There is no shared resource, no other thread can block us
anymore!
![Page 35: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/35.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Lock Free Approach
int compare_and_swap(int *value, int expected, int newValue) { int temp = *value;
if (*value == expected) *value = newValue; return temp; }
void Foo() { do { val = *addr; } while (compare_and_swap(&addr, val, val + 5) != 0) }
We just check if someone has modified “addr” before we make the atomic addi1on
There is no shared resource, no other thread can block us
anymore! In-‐Memory OLTP installs page changes in the
mapping table of the Bw-‐Tree with this technique
![Page 36: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/36.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
Summary
• Latches • Spinlocks • Lock Free Data Structures
![Page 37: Latches, Spinlocks, and Lock Free Data Structures€¦ · Bring&your&SQL&Server&installa3onsto&a&new&level&of&excellence! & & Latches, Spinlocks, and Lock Free Data Structures Klaus](https://reader034.fdocuments.net/reader034/viewer/2022042416/5f3232f1c33a9a172374fe62/html5/thumbnails/37.jpg)
Bring your SQL Server installa3ons to a new level of excellence! www.SQLpassion.at
SQL Server Query Tuning Workshop
• Date & Location – October 20 – 23 in London
• Agenda – How to write high performance T-SQL queries – Logical & physical query processing – Execution Plan Troubleshooting – Applying Indexing Strategies – Using In-Memory Technologies
• Further information – http://www.SQLpassion.at/academy