READ UNCOMMITTED is the lowest isolation level in SQL Server. It allows a transaction to read data modified by other transactions even if those changes are not yet committed. SQL Server does not acquire Shared Locks for reads and ignores Exclusive Locks held by writers. This eliminates reader-writer blocking and improves concurrency. However, it introduces issues such as Dirty Reads, Non-Repeatable Reads, Phantom Reads, missing rows, duplicate rows, and inconsistent results during page splits or ongoing updates. It is commonly used through the NOLOCK hint, but NOLOCK does not guarantee accurate data. In modern systems, READ_COMMITTED_SNAPSHOT (RCSI) is generally preferred because it provides non-blocking reads while still returning committed and consistent data.
Enable read
uncommitted isolation level
SET TRANSACTION
ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM
Accounts;
Keep in mind: All queries in the
session use READ UNCOMMITTED. Other session is still using default isolation
level (read committed).
Lock Behavior
|
Operation |
READ COMMITTED |
READ UNCOMMITTED |
|
Shared Lock |
Yes |
No |
|
Reads Uncommitted Data |
No |
Yes |
|
Blocked by Update |
Yes |
No |
|
Dirty Read Possible |
No |
Yes |
|
Non-repeatable Read |
Possible |
Yes |
|
Phantom Read |
Possible |
Yes |
If we are using READ UNCOMMITTED,
we can face the below problem.
Ø Dirty Reads
Ø Non-Repeatable Reads
Ø Phantom Reads
Ø Missing Rows
Ø Duplicate Rows
Ø Reading Corrupted Intermediate State
READ UNCOMMITTED vs RCSI
|
Feature |
READ UNCOMMITTED |
RCSI |
|
Dirty Reads |
Yes |
No |
|
Blocking |
Very Low |
Very Low |
|
Accuracy |
Low |
High |
|
Version Store |
No |
Yes |
|
TempDB Usage |
No |
Yes |
|
Recommended |
Rarely |
Frequently |
We can use this isolation level on
below case
Ø Dashboard queries
Ø Monitoring scripts
Ø Ad-hoc reporting
Ø Large table scans
Never use on below case
Ø Banking Transactions
Ø Financial Reports
Ø Payroll Calculations
Ø Inventory Systems
Ø Order Processing
Ø Regulatory Reporting
READ UNCOMMITTED is the least
restrictive isolation level and allows queries to read uncommitted changes.
Because it ignores Exclusive Locks, it can produce several anomalies including
Dirty Reads, Non-Repeatable Reads, Phantom Reads, Missing Rows, Duplicate Rows,
Incorrect Aggregate Results, and Inconsistent Business Data. These issues make
it unsuitable for financial and transactional systems. It is generally used
only for monitoring, troubleshooting, or approximate reporting where
performance is more important than data accuracy.
No comments:
Post a Comment
If you have any doubt, please let me know.