"query execution: expectation - reality (level 300)" Денис Резник

19
SQL Server. Expectation Reality Denis Reznik Intapp Email: [email protected] Skype: denisreznik Blog: http://reznik.uneta.com.ua Twitter: @denisreznik

Upload: fwdays

Post on 21-Jan-2018

395 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

SQL Server. Expectation – Reality

Denis ReznikIntapp

Email: [email protected]: denisreznikBlog: http://reznik.uneta.com.uaTwitter: @denisreznik

Page 2: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Agenda

• Some Useful Stuff to Remind

• Expectation - Reality 1

• Expectation - Reality 2

• Expectation - Reality 3

• Expectation - Reality 4

• Expectation - Reality 5

Page 3: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

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

Page 4: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

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

Page 5: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

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

Page 6: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Exec SomeProc @p

Optimizer

Buffer Pool

Query Plan cache

@p

Plan is cached for the first value of Query Plan

cache

Parameter Sniffing – Intro

Page 7: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Lock Types - Shared

S S

X

Page 8: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Lock Types - Exclusive

X

X

S

Page 9: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Lock Types - Update

U

U

S

SX

Page 10: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

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

Page 11: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

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

Page 12: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

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

Page 13: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

DEMO: Universal Query

Page 14: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

DEMO: Conditional Logic

Page 15: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

DEMO: Implicit Locks

Page 16: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

DEMO: NOLOCK Locks

Page 17: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

DEMO: The Most Confusing Behavior

Page 18: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Summary

• Universal Query

• Conditional Logic

• Implicit Locks

• NOLOCK Locks

• The Most Confusing Behavior

Page 19: "Query Execution: Expectation - Reality (Level 300)" Денис Резник

Thank You!

@denisreznik

[email protected]

http://reznik.uneta.com.ua/

https://www.facebook.com/denis.reznik.5

https://www.linkedin.com/pub/denis-reznik/3/502/234