Deadlocks — Complete Guide
Deadlocks — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of SQL Server Tutorial on Toolliyo Academy.
On this page
SQL Server Tutorial · Lesson 57 of 100
Deadlocks
SQL basics ✓ → Queries → Advanced
Queries · 2 — JOINs · ~10 min · SQL — Transactions & Concurrency
What is this?
A deadlock is a cycle: session A waits on B and B waits on A. SQL Server picks a victim and fails its batch with error 1205.
Why should you care?
Concurrent transfers that lock accounts in opposite order deadlock under load.
See it live — copy this example
Run in SQL Server Management Studio (SSMS) or Azure Data Studio.
-- Classic deadlock pattern (two windows)
-- A: BEGIN TRAN; UPDATE Accounts SET Balance=Balance WHERE AccountId=1;
-- B: BEGIN TRAN; UPDATE Accounts SET Balance=Balance WHERE AccountId=2;
-- A: UPDATE Accounts SET Balance=Balance WHERE AccountId=2; -- waits
-- B: UPDATE Accounts SET Balance=Balance WHERE AccountId=1; -- deadlock
SELECT * FROM sys.dm_exec_session_wait_stats
WHERE session_id = @@SPID; -- after tests, look for LCK waits
What happened?
- Comments show the cycle.
- One session becomes the victim.
- Capture deadlock graphs with Extended Events for real incidents.
Practice next
- Reproduce carefully in lab with two windows.
- Note error 1205 on the victim.
- Retry logic belongs in the app/proc.
- Always lock AccountId in ascending order in both procs.
- Reduce transaction scope to fewer statements.
Remember
Deadlock = circular lock wait. Engine kills a victim. Capture graphs; fix ordering.
Transfer deadlocks at noon
DataVerse transfers locked accounts inconsistently.
Outcome: Ordered locking cut deadlocks near zero.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!