Presentation is loading. Please wait.

Presentation is loading. Please wait.

Weird Stuff I Saw While … Working With Heaps

Similar presentations


Presentation on theme: "Weird Stuff I Saw While … Working With Heaps"— Presentation transcript:

1 Weird Stuff I Saw While … Working With Heaps
Really, How Bad Is It to Use Heaps? 7/15/2017

2 Rick Lowe rick@data-flowe.com DataFLowe
7/15/2017

3 What Is a Heap Table without a clustered Index
Doesn’t automatically have a B tree Disorganized data Table that only supports scans 7/15/2017

4 Demo Break 1 Creation script System health session Update demo 1
7/15/2017 Demo Break 1 Creation script System health session Update demo 1

5 What’s a Deadlock? has has needs needs 7/15/2017

6 Modifying a Heap 1 2 3 4 5 6 UPDATE dbo.myHeap SET n = 1 WHERE ID = 4;
Is ID 4 here? Is ID 4 here? 1 2 3 4 5 6 7/15/2017

7 Modifying a Heap (cont’d)
UPDATE dbo.myHeap SET n = 1 WHERE ID = 4; Found it 1 2 3 4 5 6 Time to update! 7/15/2017

8 Modifying a Clustered Index (comparison)
UPDATE dbo.myTable SET n = 1 WHERE ID = 4; 1 2 3 4 5 6 Found it Time to update! 1 2 3 4 5 6 7/15/2017

9 Modifying a Heap – Two Connections
UPDATE dbo.myHeap SET n = 1 WHERE ID = 4; It’s Here! Is ID 4 here? Nope. Is ID 4 here? Nope. 1 2 3 4 5 6 UPDATE dbo.myHeap SET n = 1 WHERE ID = 3; 7/15/2017

10 Modifying With a Heap – Two Connections (Contd)
UPDATE dbo.myHeap SET n = 1 WHERE ID = 4; Is 4 here? 1 2 3 4 5 6 Is 3 here? UPDATE dbo.myHeap SET n = 1 WHERE ID = 3; 7/15/2017

11 Issues With Updating Heaps
No seeks (in the absence of NC index) Also no guarantee of uniqueness (scan continues even after record is found) Many update locks, one exclusive lock If multiple connections are doing similar update, connection A may hold an exclusive lock on data that connection B wants to scan and vice versa 7/15/2017

12 Inserting Into Heaps: Best Case
INSERT INTO dbo.myHeap(…) VALUES(…); I’m locking slot 0. 1 2 3 4 5 I’m locking slot 1. INSERT INTO dbo.myHeap(…) VALUES(…); 7/15/2017

13 Inserting Into Heaps: Reused Space
INSERT INTO dbo.myHeap(…) VALUES(…); I’m locking slot 0. 1 2 3 4 5 Oh, there’s space here. INSERT INTO dbo.myHeap(…) VALUES(…); 7/15/2017

14 Inserting Into Clustered Index (Comparison)
INSERT INTO dbo.myTable(…) VALUES(…); 1 2 3 4 5 Found it Time to update! 1 2 3 4 5 7/15/2017

15 7/15/2017 Demo Break 2 SSIS Demo Speed comparison

16 One Way to Make Insert Fail
= COUNT(*) FROM dbo.myHeap WHERE ClientID WITH(SERIALIZABLE) Shared lock I’m looking at this. Don’t change. dbo.BigHeap = COUNT(*) FROM dbo.myHeap WHERE ClientID WITH(SERIALIZABLE) 7/15/2017

17 One Way to Make Insert Fail (cont’d)
INSERT INTO dbo.MyHeap(ID, IsTrial, BigBlobbyData) VALUES(…) Shared lock Convert to IX lock Need to lock a row dbo.BigHeap Convert to IX lock INSERT INTO dbo.MyHeap(ID, IsTrial, BigBlobbyData) VALUES(…) 7/15/2017

18 Issues With Inserting Into Heaps
No order, so new records could go anywhere Reusing space means looking for space Mixing SELECTS and INSERTS are more problematic due to table scans Many believe inserts into heaps are faster. That’s not always true. If table eventually needs a clustered index, how long does it take to convert from heap? 7/15/2017

19 Demo Break 3 Update demo 2 – heap with NC index
7/15/2017 Demo Break 3 Update demo 2 – heap with NC index NOTE: Follow up to discussion in class – This demo is a bit contrived. Realistic case for deadlock without using HOLDLOCK to force failure would be an update or delete with inner joins to other tables, or an insert/select.

20 Indexing Cheat Sheet Heaps are OK for inserting lots of transitory, unsorted data through a single connection. Heaps aren’t ideal for select, update, delete Heaps aren’t ideal for multiple connections Clustered index inserts may outperform heap inserts when data is ordered Usually not difficult to sort data before loading 7/15/2017

21 Non-Clustered Indexes
Adding NC indexes or unique constraints to heaps rarely makes sense Adding NC index to heap often increases frequency of deadlocks (more things to lock) NC indexes also tend to make deadlocks more likely when inserting to clustered index Best case for inserts is often a table with clustered index and no NC indexes. 7/15/2017

22 Ghost Cleanup http://www.mikefal.net/2012/10/17/a-heap-of-trouble/
Large, partitioned heap Volatile Key Ghost cleanup stopped working 7/15/2017

23 Thank You 7/15/2017


Download ppt "Weird Stuff I Saw While … Working With Heaps"

Similar presentations


Ads by Google