"query execution: expectation - reality (level 300)" Денис Резник
TRANSCRIPT
SQL Server. Expectation – Reality
Denis ReznikIntapp
Email: [email protected]: denisreznikBlog: http://reznik.uneta.com.uaTwitter: @denisreznik
Agenda
• Some Useful Stuff to Remind
• Expectation - Reality 1
• Expectation - Reality 2
• Expectation - Reality 3
• Expectation - Reality 4
• Expectation - Reality 5
Index (B-Tree) - Seek
…
…
1 .. 1M
1 .. 2K 2K+1 .. 4K
1M-2K .. 1M
1 .. 300 301..800 801..1,5K 1,5K+1..2K
SELECT * FROM UsersWHERE Id = 523
Index (B-Tree) - Scan
…
…
1 .. 1M
1 .. 2K 2K+1 .. 4K
1M-2K .. 1M
1 .. 300 301..800 801..1,5K 1,5K+1..2K
SELECT * FROM Users
Statistics
500
1000
10
1200
800
1 800 2000 2800 4500 5400
SELECT * FROM UsersWHERE Id BETWEEN 2100 AND 2500SELECT * FROM UsersWHERE Id BETWEEN 1 AND 5300
Exec SomeProc @p
Optimizer
Buffer Pool
Query Plan cache
@p
Plan is cached for the first value of Query Plan
cache
Parameter Sniffing – Intro
Lock Types - Shared
S S
X
Lock Types - Exclusive
X
X
S
Lock Types - Update
U
U
S
SX
READ COMMITTED
ID City
1 Kiev
2 London
3 London
4 London
5 London
6 New York
7 New York
ID City
1 London
2 London
3 London
4 London
5 London
6 New York
7 New York
SELECT * FROM UsersWHERE City = 'Kiev'
BEGIN TRANUPDATE UsersSET City = 'London'WHERE City = 'Kiev' SELECT * FROM Users
WHERE City = 'Kiev'
Wait for Shared lock on the row
X S
READ COMMITTED SNAPSHOT
ID City
1 Kiev
2 London
3 London
4 London
5 London
6 New York
7 New York
ID City
1 London
2 London
3 London
4 London
5 London
6 New York
7 New York
BEGIN TRANUPDATE UsersSET City = 'London'WHERE City = 'Kiev'
SELECT * FROM UsersWHERE City = 'Kiev'
SELECT * FROM UsersWHERE City = 'Kiev'
X
tempdb
ID City
1 Kiev
Version Store
READ UNCOMMITTED
ID City
1 Kiev
2 London
3 London
4 London
5 London
6 New York
7 New York
ID City
1 London
2 London
3 London
4 London
5 London
6 New York
7 New York
SELECT * FROM UsersWHERE City = 'Kiev'
BEGIN TRANUPDATE UsersSET City = 'London'WHERE City = 'Kiev' SELECT * FROM Users
WHERE City = 'Kiev'
0 RecordsROLLBACK
SELECT * FROM UsersWHERE City = 'Kiev'
X
DEMO: Universal Query
DEMO: Conditional Logic
DEMO: Implicit Locks
DEMO: NOLOCK Locks
DEMO: The Most Confusing Behavior
Summary
• Universal Query
• Conditional Logic
• Implicit Locks
• NOLOCK Locks
• The Most Confusing Behavior
Thank You!
@denisreznik
http://reznik.uneta.com.ua/
https://www.facebook.com/denis.reznik.5
https://www.linkedin.com/pub/denis-reznik/3/502/234