Database develop. life cycle - Deadlock Handling
What is Deadlock?
-
A deadlock occurs in a database or multi-threaded system when two or more transactions are waiting for each other’s resources, and none can proceed.
-
It’s like two people meeting in a narrow hallway, each waiting for the other to move, and both being stuck.
Example in databases:
-
Transaction 1 locks Row A and waits for Row B.
-
Transaction 2 locks Row B and waits for Row A.
-
Both wait forever → deadlock.
Deadlock Handling Techniques
There are two main strategies: Prevention/Avoidance and Detection/Recovery.
1. Deadlock Prevention
The idea is to design the system so deadlocks never occur.
-
Ordering resources: Transactions must request resources in a predefined global order.
-
Request all resources at once: A transaction must acquire all it needs upfront, avoiding circular waiting.
-
Timeouts: If a transaction waits too long, it’s aborted and rolled back.
2. Deadlock Avoidance
Here, the system analyzes each resource request and decides whether granting it could lead to deadlock.
-
Uses the Banker’s Algorithm: ensures the system always stays in a “safe state.”
-
Example: The system checks before granting a lock if future resource allocation might cause deadlock.
3. Deadlock Detection and Recovery
-
In this approach, deadlocks are allowed to happen but are detected and resolved.
-
Detection: The system builds a wait-for graph (nodes = transactions, edges = waiting for resource). A cycle in the graph = deadlock.
-
Recovery: Once detected, the system can:
-
Abort transactions (usually the one with least cost or least progress).
-
Preempt resources (force a transaction to release some resources and roll back).
-
Deadlock Handling in the Data Development Cycle
-
Design phase: Use resource ordering and normalization to minimize risk.
-
Development phase: Implement proper transaction management and timeouts.
-
Testing phase: Simulate high-concurrency workloads to check for deadlocks.
-
Deployment phase: Use database engine features (like SQL Server’s deadlock detection or Oracle’s timeout settings) for automatic handling.